按模式删除Redis太慢了

时间:2017-02-13 07:53:04

标签: ruby-on-rails ruby lua redis

  for i, name in ipairs(redis.call('KEYS''cache:user_transaction_logs:*:8866666')) do redis.call('DEL', name); end"

如何优化此redis查询?

我们在Rails中使用Redis作为缓存存储。每当auser进行成功的事务时,接收者和发起者的事务历史记录从redis到期

2 个答案:

答案 0 :(得分:7)

无法优化查询 - 应该将其全部替换,因为除非在非生产环境中进行调试,否则不建议使用KEYS

一种更好的方法,不是试图获取相关的临时名称,而是在数据结构(例如Set或List)中管理它们,并在执行删除时从中读取它们。

答案 1 :(得分:2)

您需要更改为用户存储缓存条目的方法。 您的密钥应该类似于cache:user_transaction_logs:{user_id}。 然后,您将能够通过其键(user_id)删除条目。

如果每个user_id需要多个缓存条目 - 使用Redis哈希值(https://redis.io/commands#hash),然后再次使用一个命令DELETE或者需要输入的每个user_id删除所有条目HDEL

使用Redis数据库编号(默认为0,1-15可用)并在单独的数据库编号上放置单独的功能也是一个好主意。然后,如果您需要擦除可以使用一个命令FLUSHDB

完成的整个功能的缓存