我有一个很大的字符串列表(包含用户名,大约350K条记录)。我需要按字典顺序存储它,并且应该能够有效地检索成员存在*和成员相似度**。 Redis排序集看起来像作业的数据类型。
然而,我似乎陷入了第一道障碍。具体来说,我的一个关键要求是将不同的字母大小写在一起,只要它们以相同的字母开头即可。例如。 Bender
和bender
最终应该并排排序。但是,redis的排序集遵循词典排序规则是严格的,因此所有以大写字母开头的字符串默认排序,所有以小写字母开头的字符串(例如Z
)在a
之前排序,但在{ {1}})。
有什么方法可以解决这个问题,仍然使用redis排序集来满足我的要求吗?仅供参考,我使用的是redis版本2.8.4。提前谢谢。
*成员存在:给定用户名,检查它是否已存在于存储集
中**会员相似性:给定一个用户名,拉出N个与给定用户名最相似的存储用户名
答案 0 :(得分:1)
您需要使用名称进行一些特殊编码。以下是一个例子。
假设所有名称的长度都小于100个字符。对于每个名称,请执行以下步骤对其进行编码:
BeNd
,索引为00
和02
。BeNd
到bend
encoded name
:从bend
到bend0002
encoded name
添加到已排序的集合中:zadd key 0 bend0002
通过这种方式,BeNd
和bend
应该并排排序。
如果要进行搜索,请使用相同的编码方法对给定名称进行编码,进行搜索并对结果进行解码。由于encoded name
记录了大写字母的索引,因此您可以轻松解码。