如何在Redis中的两个列表上检查Equals

spr*_*ran 3 redis

我在Redis中有两个列表.我如何检查这些列表是否相等?唯一的选择是从列表中逐个获取元素并与内存中的列表进行比较吗?

Redis是否提供任何解决方法?

Ita*_*ber 7

没有解决方法,Redis没有列表(或其他数据类型)的摘要功能,因为这些是双重链接,除了逐个元素之外没有其他方法可以比较它们.

但是,您可以在Lua中进行比较,以使其与在客户端执行相比更高效.像下面这样的东西应该工作:

if redis.call('LLEN',KEYS[1]) == redis.call('LLEN',KEYS[2]) and
    redis.call('LRANGE',KEYS[1],0,0)[1] == redis.call('LRANGE',KEYS[2],0,0)[1] and
    redis.call('LRANGE',KEYS[1],-1,-1)[1] == redis.call('LRANGE',KEYS[2],-1,-1)[1] and
    redis.call('DUMP',KEYS[1]) == redis.call('DUMP',KEYS[2]) then
    return 'Lists are the same'
end
return 'Lists are not the same'
Run Code Online (Sandbox Code Playgroud)

只有当列表具有不同的大小并且它们的结尾(获取起来便宜)相同时,上述脚本才会进行完全比较.