2017-03-15 24 views
2

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

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

+0

看看http://stackoverflow.com/questions/41651597/redis-diff-between-two-lists –

回答

6

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

以上诉诸全面比较只有在列表是不同的大小和它们的末端(这是廉价获取)的脚本是相同的。

+0

以下情况失败,redis.call('LRANGE',KEYS [1],0,0) == redis.call('LRANGE',KEYS [2],0,0)和 redis.call('LRANGE',KEYS [1], - 1,-1)== redis.call('LRANGE', KEYS [2], - 1,-1)。 如果我排除这些检查,它将按我的预期工作。 – sprabhakaran

+1

对不起,我忘了LRANGE返回一个表格。修正了我的脚本,所以它会工作。 –

相关问题