Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Pelengkapan otomatis ulang

Jika Anda berurusan dengan kumpulan data besar, saya sarankan mempertimbangkan untuk menerapkan ini sebagai percobaan. Saya telah mengumpulkan sedikit Ruby yang akan melakukan ini:

    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)

Misalnya:

    $ 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
    []

Baca lebih lanjut tentang Percobaan di entri Wikipedia tentang Percobaan.

Anda pasti ingin mengoptimalkan metode saran Anda untuk tidak mengembalikan nilai SEMUA, alih-alih hanya mengembalikan nilai X pertama yang ditemukannya. Itu akan mengalahkan tujuan untuk mengulangi seluruh struktur data.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis scan skipping keys

  2. Memasukkan Daftar ke Daftar lain di Redis

  3. Apakah ada sesuatu seperti Redis DB, tetapi tidak terbatas pada ukuran RAM?

  4. Mengapa data disimpan dengan kunci aneh di Redis saat menggunakan Jedis dengan Spring Data?

  5. Redis kinerja pada CPU multi-core