Redisには2つのリストがあります。これらのリストが等しいことを確認するにはどうすればいいですか?唯一の選択肢は、リストから要素を1つずつ取得してメモリ内のリストと比較することですか?Redisの2つのリストでEqualsを確認する方法
Redisはすべての回避策を提供していますか?
Redisには2つのリストがあります。これらのリストが等しいことを確認するにはどうすればいいですか?唯一の選択肢は、リストから要素を1つずつ取得してメモリ内のリストと比較することですか?Redisの2つのリストでEqualsを確認する方法
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、-1)== redis.call( 'LRANGE' KEYS [2]、 - 1、-1)。 これらの小切手を除外すると、私は期待通りに機能します。 – sprabhakaran
申し訳ありませんが、LRANGEがテーブルを返すのを忘れていました。動作するようにスクリプトを修正しました。 –
http://stackoverflow.com/questions/41651597/redis-diff-between-two-lists –