在redis排序集

时间:2017-02-04 03:46:10

标签: sorting redis sortedset lexicographic

我有一个很大的字符串列表(包含用户名,大约350K条记录)。我需要按字典顺序存储它,并且应该能够有效地检索成员存在*和成员相似度**。 Redis排序集看起来像作业的数据类型。

然而,我似乎陷入了第一道障碍。具体来说,我的一个关键要求是将不同的字母大小写在一起,只要它们以相同的字母开头即可。例如。 Benderbender最终应该并排排序。但是,redis的排序集遵循词典排序规则是严格的,因此所有以大写字母开头的字符串默认排序,所有以小写字母开头的字符串(例如Z)在a之前排序,但在{ {1}})。

有什么方法可以解决这个问题,仍然使用redis排序集来满足我的要求吗?仅供参考,我使用的是redis版本2.8.4。提前谢谢。

*成员存在:给定用户名,检查它是否已存在于存储集

**会员相似性:给定一个用户名,拉出N个与给定用户名最相似的存储用户名

1 个答案:

答案 0 :(得分:1)

您需要使用名称进行一些特殊编码。以下是一个例子。

假设所有名称的长度都小于100个字符。对于每个名称,请执行以下步骤对其进行编码:

  1. 使用2位数字记录大写字母的索引:对于BeNd,索引为0002
  2. 将名称的大写字母转换为小写字母以获得小写名称:从BeNdbend
  3. 将索引附加到小写名称以获取encoded name:从bendbend0002
  4. encoded name添加到已排序的集合中:zadd key 0 bend0002
  5. 通过这种方式,BeNdbend应该并排排序。

    如果要进行搜索,请使用相同的编码方法对给定名称进行编码,进行搜索并对结果进行解码。由于encoded name记录了大写字母的索引,因此您可以轻松解码。