2017-03-15 11 views
2

Redisには2つのリストがあります。これらのリストが等しいことを確認するにはどうすればいいですか?唯一の選択肢は、リストから要素を1つずつ取得してメモリ内のリストと比較することですか?Redisの2つのリストでEqualsを確認する方法

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がテーブルを返すのを忘れていました。動作するようにスクリプトを修正しました。 –

関連する問題