Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在redis中按值按字母顺序排序一组整数ID_Redis - Fatal编程技术网

在redis中按值按字母顺序排序一组整数ID

在redis中按值按字母顺序排序一组整数ID,redis,Redis,我使用redis作为web应用程序的数据存储。基本设计基于对象的哈希和索引的zset,例如 user:<USER_ID> => hash(username: STRING, user_id: INTEGER, last_visit_date: FLOAT, create_date: FLOAT) users:by_last_visit => zset( (last_visit_date, user_id) ...) users:by_create_date => z

我使用redis作为web应用程序的数据存储。基本设计基于对象的哈希和索引的zset,例如

user:<USER_ID> => hash(username: STRING, user_id: INTEGER, last_visit_date: FLOAT, create_date: FLOAT)
users:by_last_visit => zset( (last_visit_date, user_id) ...)
users:by_create_date => zset( (create_date, user_id) ... )
user:=>hash(用户名:STRING,用户id:INTEGER,上次访问日期:FLOAT,创建日期:FLOAT)
用户:按上次访问=>zset((上次访问日期,用户id)…)
用户:按创建日期=>zset((创建日期,用户id)…)
在这里,我的日期存储为从纪元开始的秒数。到目前为止,这一切都很好——我可以使用强大的zset操作快速获取相关范围、进行分页等,我的排序要求自然映射到浮点空间

不过,现在我需要按字母顺序排序。我知道zset会按值的字母顺序排序,以打破比分的平局。到目前为止,我的最佳解决方案是将字符串作为分数为零的值输入,并依赖于此功能。我不喜欢这样,因为我最终得到了一些以ID作为值的集合和一些以字符串作为值的集合——我需要应用程序逻辑来确定它在给定时间使用的是哪种类型的集合,并将字符串映射回ID。此外,我失去了随意合并/相交集合的能力

我的下一个最佳解决方案是将字符串映射到浮点分数,但这看起来非常混乱且容易出错,因为字符串可以任意长


有没有一个比将字符串放入一个zset(所有字符串都具有相同的分数)并维护一个返回到id的反向映射更好的选择?假设这是最好的解决方案,那么它是否可靠(即,我是否依赖于副作用或真实功能)?

re。将字符串映射到分数——这种方法在redis邮件列表中已经讨论过几次。搜索档案或发送电子邮件给小组-你很可能会得到一些想法