【发布时间】:2014-07-24 01:55:27
【问题描述】:
我使用的是 Rails 4,有几个命名空间都缓存到单个 memcached 实例。有没有办法让我清除特定命名空间的所有缓存键而不影响其他命名空间?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 memcached
我使用的是 Rails 4,有几个命名空间都缓存到单个 memcached 实例。有没有办法让我清除特定命名空间的所有缓存键而不影响其他命名空间?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 memcached
我仅在 Rails 控制台中对此进行了测试,但您似乎可以使用 Rails.cache#delete_matched 来刷新特定的命名空间。
当您写入一个值并传递一个命名空间键时,该命名空间键只会被添加到值的键之前。您可以通过执行以下操作来查看:
cache.write(:foo_key, 'bar_value', namespace: 'baz_namespace')
cache.fetch(:'baz_namespace:foo_key') #=> 'bar_value'
因此您可以使用#delete_matched 来清除命名空间中的所有值,如下所示:
Rails.cache.delete_matched(/baz_namespace:/)
更新:
很遗憾,memcached 不支持 delete_matched。 :-/
【讨论】: