我刚开始使用redis而且我已经通过noSql击中了我的第一个绊脚石;以前我所知道的只是SQL服务器。
我理解一切都是以价值为基础的原则。但是如何处理排序,例如:
使用哈希集:
HMSET users:1 firstname 'james' lastname 'smith' created 'datetime.datatime.now'
现在我假设你要添加第二条记录,你会得到哈希集的长度(在这种情况下我们会说它的1返回值x
),然后添加另一行:
HMSET users:x firstname 'john' lastname 'smith' created 'datetime.datatime.now'
您如何获得最新记录?按日期?或者你能说'在hashset的-1处获得记录'吗?
当排序的集合更合适时,我可能会建议使用散列集吗?
答案 0 :(得分:2)
您需要查看SORT命令。
如果存储在纪元时间,您可以按创建时间戳进行排序。
> HMSET users:1 firstname 'john' lastname 'smith' created 1319729878
"OK"
> HMSET users:2 firstname 'Jane' lastname 'Forbes' created 1319729910
"OK"
> sadd users 1
true
> sadd users 2
true
> sort users get users:*->firstname by users:*->created
["john","Jane"]
> sort users get users:*->firstname by users:*->created desc
["Jane","john"]
如果需要,您可以获得多个密钥,SORT可能是包含大多数选项的命令,请研究文档。
关于密钥,你必须仔细考虑可能的密钥重用(删除,计数+ 1,插入会重用密钥吗?),所以我只是从项目中的关系数据库中获取密钥。
答案 1 :(得分:0)
您应该使用一组有序的用户ID,当您添加到集合时,添加用户ID和时间戳作为分数。
然后你可以使用zrevrange之类的东西以asc或desc顺序将它们拉出来,将其限制为1条记录以获取最新信息。
然后你可以从哈希中获取所有值。