Хранение хеша с использованием ZINCRBY в redis - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь использовать redis для кэширования автозаполнения поиска по моему сайту.Я наткнулся на туториал, в котором показано, как хранить обычную строку следующим образом:

$redis.zincrby "search-suggestions:#{prefix.downcase}", 1, term.downcase

Мне было интересно, есть ли способ сохранить хэш, но при этом все еще использовать ZINCRBY.Я думал о попытке сделать что-то вроде этого:

$redis.zincrby "search-suggestions:#{prefix.downcase}", 1, {key: val, ...}

Пример полного кода:

class SearchSuggestion
  def self.terms_for(prefix)
    $redis.zrevrange "search-suggestions:#{prefix.downcase}", 0, 9
  end 

  def self.index_products
    Product.find_each do |product|
      index_term(product.name)
      product.name.split.each { |t| index_term(t) }
      index_term(product.category)
    end
  end

  def self.index_term(term)
    1.upto(term.length - 1) do |n|
      prefix = term[0, n]
      $redis.zincrby "search-suggestions:#{prefix.downcase}", 1, term.downcase
    end
  end
end

Источник: Railscast: Episode # 399

1 Ответ

0 голосов
/ 04 января 2019

zincrby работает с отсортированным набором строк, но ничто не мешает вам использовать JSON-представление вашего объекта:

interactive redis example

$redis.zincrby "search-suggestions:#{prefix.downcase}",
               1,
               JSON.dump({key: val, ...})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...