for i, name in ipairs(redis.call('KEYS''cache:user_transaction_logs:*:8866666')) do redis.call('DEL', name); end"
如何优化此redis查询?
我们在Rails中使用Redis作为缓存存储。每当auser进行成功的事务时,接收者和发起者的事务历史记录从redis到期
答案 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