gpt4 book ai didi

ruby-on-rails - 如何从匹配模式的redis列表中删除键?

转载 作者:IT王子 更新时间:2023-10-29 06:07:42 26 4
gpt4 key购买 nike

使用 ruby​​ redis 客户端

我有一个包含值列表的键,它们遵循

的模式
campaign_id|telephone|query_id

在一个单独的列表中有成千上万个这样的列表,我想做的是从该 redis 列表中删除所有具有例如 query_id 4 的列表。你能通过某种模式匹配来做到这一点吗?请有人给我举个例子,因为我一直在阅读其他问题并且有点迷路

最佳答案

基本上,您有两个选择之一:a) 在您的 (RoR) 应用程序中执行或 b) 在 Redis 中执行。

我不是 RoR 专家,所以我无法就具体方法提供建议,但请注意,采取 a) 路径基本上是将整个列表移至您的应用程序,并在那里进行过滤。您的列表越大,它通过网络所需的时间就越多。

选项 b) 意味着您将直接在 Redis 中过滤列表 - 当您使用 Lua 时,这可以简单高效地完成。示例:

$ cat dellistbyqueryid.lua
-- removes a range of list elements that confirm to a given
-- query_id. Elements are stored as: 'campaign_id|telephone|query_id'
-- KEYS[1] - a list
-- ARGV[1] - a query_id
-- return: number of elements removed

local l = tonumber(redis.call('LLEN', KEYS[1]))
local n = 0

while l > 0 do
local curr = redis.call('LINDEX', KEYS[1], -1)
local id = curr:match( '.*|.*|(.*)' )
if id == ARGV[1] then
redis.call('RPOP', KEYS[1])
n = n + 1
else
redis.call('RPOPLPUSH', KEYS[1], KEYS[1])
end
l = l - 1
end

return n

输出:

$ redis-cli LPUSH list "foo|bar|1" "baz|qaz|2" "lua|redis|1"
(integer) 3
$ redis-cli --eval dellistbyqueryid.lua list , 1
(integer) 2
$ redis-cli LRANGE list 0 -1
1) "baz|qaz|2"

关于ruby-on-rails - 如何从匹配模式的redis列表中删除键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32048377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com