Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Redis按模式删除太慢_Ruby On Rails_Ruby_Lua_Redis - Fatal编程技术网

Ruby on rails 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查询


我们正在使用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"