REDIS SISMEMBERS性能:多个密钥与单个事务上的LUA脚本

qv7cva1a  于 2023-01-20  发布在  Redis
关注(0)|答案(1)|浏览(138)

我有一打类型为SET的REDIS密钥
公共子系统用户集-1 -1668985588478915880、公共子系统用户集-2 -1668985588478915880、公共子系统用户集-3 -166898864447632747、...公共子系统用户集-10 -166898346447632083
集合包含userId,问题陈述是检查用户是否存在于任何集合中
我尝试的解决方案是获取所有键,并附加一个分隔符(,逗号),然后将其作为参数传递给lua脚本,其中使用gmatch操作符拆分键并运行sismember操作,直到命中为止。

local vals = KEYS[1]
        for match in (vals..","):gmatch("(.-)"..",") do
            local exist = redis.call('sismember', match, KEYS[2])
            if (exist == 1) then
                return 1
            end
        end
        return 0

现在,当键的数量增加到PUBSUB_USER_SET-20或PUBSUB_USER_SET-30时,我看到延迟和吞吐量都有所增加。
这是更好的方法吗?或者是更好的方法是批处理LUA脚本,而不是传递30个键作为参数,我以10个键的批处理方式传递,并在用户出现时立即返回?或者有更好的方法吗?

tjrkku2a

tjrkku2a1#

您可以使用带有批处理(每次迭代10个键)的redis管道来提高性能

相关问题