设置Redis以进行重复识别

时间:2016-10-31 21:05:26

标签: redis duplicates

我想使用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来执行此类操作。

由于

2 个答案:

答案 0 :(得分:1)

您可以为每个功能构建从功能到记录ID的索引映射。

  

第一个指数

记录ID的哈希字符串。该索引的所有键都有一个键前缀: fea1:

set fea1:ABC 1
  

第二个指数

要记录ID的哈希数组的元素。此索引的所有键都有一个键前缀: fea2:

set fea2:aa 1
set fea2:bb 1
set fea2:cc 1
  

重复识别

  1. 使用第一个功能(即哈希字符串)构建密钥,然后搜索第一个索引:

    exists fea1:ABC exists fea1:DDA

  2. 如果它不存在于第一个索引中,则使用第二个功能构建密钥,并搜索第二个索引:

    exists fea2:ff exists fea2:bd exists fea2:aa

  3. 修改

    从Redis 3.0.3开始,exists命令可以检查是否存在多个密钥。因此,您只需使用1次redis命令调用即可搜索第二个索引:

    exists fea2:ff fea2:bd fea2:aa
    

答案 1 :(得分:0)

您也可以使用 - 请参阅http://redis.io/commands/sadd

对于SADD feature2 aa bb cc开始的第一个特征,SADD将返回添加到集合中的元素数量,不包括已经存在于集合中的所有元素

因此,如果该值小于您尝试添加的值的数量,那么您将重复。

对第二个功能执行相同操作 [HttpPost] public ActionResult Login(UserAccount user) { using (OurDbContext db = new OurDbContext()) { var usr = db.userAccount.Single(u => u.Username == user.Username && u.Password == user.Password); if(usr != null) { Session["UserID"] = usr.UserID.ToString(); Session["Username"] = usr.Username.ToString(); return RedirectToAction("LoggedIn"); }else { ModelState.AddModelError("", "Username or Password is wrong"); } } return View(); }