Ruby on rails Redis按模式删除太慢
如何优化此redis查询Ruby on rails Redis按模式删除太慢,ruby-on-rails,ruby,lua,redis,Ruby On Rails,Ruby,Lua,Redis,如何优化此redis查询 我们正在使用Redis作为Rails中的缓存存储。每当auser进行成功的事务时,接收方和发起方的事务历史都会从Redis中过期,因此无法对查询进行优化-应该将其全部替换,因为除了在Rails上调试外,不鼓励使用键非生产环境 一种更好的方法是在数据结构(如集合或列表)中管理它们,并在执行删除时从中读取,而不是尝试临时获取相关的键名。您需要更改为用户存储缓存项的方法。 您的密钥应该类似于cache:user\u transaction\u logs:{user\u id}
我们正在使用Redis作为Rails中的缓存存储。每当auser进行成功的事务时,接收方和发起方的事务历史都会从Redis中过期,因此无法对查询进行优化-应该将其全部替换,因为除了在Rails上调试外,不鼓励使用
键非生产环境
一种更好的方法是在数据结构(如集合或列表)中管理它们,并在执行删除时从中读取,而不是尝试临时获取相关的键名。您需要更改为用户存储缓存项的方法。
您的密钥应该类似于cache:user\u transaction\u logs:{user\u id}
。
然后您就可以通过其键(用户id)删除条目
如果您需要每个用户id多个缓存项,请使用Redis hashes(),然后您可以使用一个命令delete
删除每个用户id的所有项,或者使用HDEL
删除所需项
使用Redis数据库号(默认为0,1-15可用)并在单独的数据库号上放置单独的功能也是一个好主意。然后,如果您需要擦除整个功能的缓存,而这些功能可以通过一个命令来完成FLUSHDB
,则可以在DEL中发送多个键,但这里的主要瓶颈是keys命令。
for i, name in ipairs(redis.call('KEYS''cache:user_transaction_logs:*:8866666')) do redis.call('DEL', name); end"