Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
如何在Redis中检查两个列表上的相等_Redis - Fatal编程技术网

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

如何在Redis中检查两个列表上的相等,redis,Redis,我在Redis中有两个列表。如何检查这些列表是否相等?唯一的选择是从列表中逐个获取元素并与内存中的列表进行比较吗 Redis是否提供了解决方案 没有解决办法,Redis没有列表(或其他数据类型)的摘要函数,而且由于这些列表是双重链接的,除了元素对元素的比较之外,没有其他方法来比较它们 但是,您可以在Lua中进行比较,使其比在客户端执行更有效。类似于以下的方法应该可以工作: if redis.call('LLEN',KEYS[1]) == redis.call('LLEN',KEYS[2]) an

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


Redis是否提供了解决方案

没有解决办法,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'

上述脚本仅在列表大小不同且其末端(获取成本较低)相同时才进行完全比较。

查看以下条件失败:redis.call('LRANGE',KEYS[1],0,0)==redis.call('LRANGE',KEYS[2],0,0)和redis.call('LRANGE',KEYS[1],-1)==redis.call('LRANGE',KEYS[2],-1,-1)。如果我排除这些检查,它将按照我的预期工作。对不起,我忘记了LRANGE返回一个表。修正了我的脚本,这样它就可以工作了。