我想使用一个redis实例来识别重复的记录。
任何记录都可以通过两个特征来标识,第一个特征是字符串的散列。第二个特性是散列数组。因此,如果一个新记录的字符串哈希匹配,或者哈希数组中的任何元素存在于另一个其他元素数组中,则该记录被视为重复记录。
例子:
记录1:Id: 1, feature 1: ABC, feature 2: [aa,bb,cc]
记录2:Id 2, feature 1: ABC, feature 2: []
--->
复制记录1
记录3:Id 3, feature 1: DDA, feature 2: [ff,bd,aa]
-->
与记录1重复(匹配于aa
)
我想知道我如何能以最有效的方式使用redis来执行这样的操作。
谢谢
最佳答案
您可以为每个功能构建从功能到记录id的索引映射。
第一索引
记录ID的哈希字符串。此索引的所有键都有一个键前缀:fea1:
set fea1:ABC 1
第二项指标
要记录ID的哈希数组的元素。此索引的所有键都有一个键前缀:fea2:
set fea2:aa 1
set fea2:bb 1
set fea2:cc 1
重复标识
使用第一个功能(即哈希字符串)生成密钥,然后搜索第一个索引:
exists fea1:ABCexists fea1:DDA
如果在第一个索引中不存在,则使用第二个功能构建键,然后搜索第二个索引:
exists fea2:ffexists fea2:bdexists fea2:aa
编辑
由于redis 3.0.3,
exists
命令可以检查是否存在多个键。因此,您只需使用1个redis命令调用就可以搜索第二个索引:exists fea2:ff fea2:bd fea2:aa