Redis
 sql >> база данни >  >> NoSQL >> Redis

Автоматично довършване на Redis

Ако имате работа с голям набор от данни, бих предложил да обмислите прилагането на това като опит. Събрах малко Ruby, което ще направи това:

    require 'rubygems'
    require 'redis'
    
    class RedisTrie
      TERMINAL = '+'
    
      def initialize(prefix)
        @prefix = prefix
        @r = Redis.new
      end
    
      def add_word(word)
        w = word.gsub(/[^a-zA-Z0-9_-]/, '')
        key = "#{@prefix}:"
    
        w.each_char do |c|
          @r.zset_add key, c.bytes.first, c
          key += c
        end
    
        @r.zset_add key, 0, TERMINAL
      end
    
      def add_words(*words)
        words.flatten.compact.each {|word| add_word word}
      end
    
      def suggest(text)
        @r.zset_range("#{@prefix}:#{text}", 0, -1).map do |c|
          (c == TERMINAL) ? text : suggest(text + c)
        end.flatten
      end
    end
    
    rt = RedisTrie.new('trie')
    
    rt.add_words %w( apple automobile carwash oil-change cranky five ruthie axe auto )
    
    p rt.suggest(ARGV.shift.to_s)

Например:

    $ ruby RedisTrie.rb
    ["apple", "auto", "automobile", "axe", "carwash", "cranky", "five", "oil-change", "ruthie"]
    $ ruby RedisTrie.rb a
    ["apple", "auto", "automobile", "axe"]
    $ ruby RedisTrie.rb au
    ["auto", "automobile"]
    $ ruby RedisTrie.rb aux
    []

Прочетете повече за Tries в записа на Уикипедия за Tries.

Определено ще искате да оптимизирате метода си за предложение, за да не връща ВСИЧКИ стойности, вместо това да връща само първите X стойности, които намира. Това би провалило целта да се повтори цялата структура от данни.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Застой чрез Aggregator + Redis

  2. Проектиране на структура от данни на Redis за сортиране на стойности, базирани на времето

  3. StackExchange.Redis ConnectionMultiplexer пул за синхронни методи

  4. Най-добрата библиотека Redis за Java

  5. конфигурирайте redis auth на sidekiq