我在Redis中有两个列表。我如何检查这些列表是否相等?唯一的选择是从列表中逐个获取元素并与内存中的列表进行比较吗?
Redis是否提供任何变通方法?
答案 0 :(得分: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'
只有当列表的大小不同且其结尾(提取成本低廉)相同时,上述脚本才会进行完全比较。