Rails.cache как сделать приращение и истечение срока действия одновременно - PullRequest
0 голосов
/ 05 декабря 2018

Я вижу, что Redis не позволяет одновременно создавать increment и expiration.Я решил это, сделав это в 2 этапа:

my_redis_client.incrby( key, amount )
my_redis_client.expire( key, expire_time )

Но если я хочу использовать Rails.cache, я не знаю, как получить тот же результат наиболее оптимальным способом.

Если я сделаю это:

Rails.cache.increment( key, amount, :expires_in => expire_time )

expires_in полностью игнорируется.

Можно ли установить время истечения и выполнить приращение с помощью Rails.cache?

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Похоже, в Rails 6.0.0:

Rails.cache.increment( key, amount, :expires_in => expire_time )

работает как положено:

0 голосов
/ 19 июня 2019

Это то, что у меня работало в Rails 5.2

Rails.cache.write(key, 0, :raw => true, :unless_exist => true, :expires_in => expire_time)
Rails.cache.increment( key, amount )
0 голосов
/ 05 декабря 2018

Один из вариантов - monkeypatch Rails.cache т.е.

module CacheSupport
  def increment_with_ttl(key, amount, ttl)
    increment(key, amount)
    expire(key, ttl)
  end
end

Rails.cache.extend(CacheSupport)

Поместите это в папку initializer, тогда вы можете начать использовать Rails.cache.increment_with_ttl() в своем проекте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...