【发布时间】:2015-11-07 16:47:17
【问题描述】:
我正在创建一个由客户端(网络浏览器)通过 AJAX 检索的事件系统。对于事件存储,我只想使用 Redis。
我了解了 Redis 中的一些不错的功能,例如 EXPIRE - 一个允许自动执行某种垃圾收集工作的命令,因此无需自己实现类似的功能(前提是该解决方案将与 Redis 一样有效)。确实,很不错,我会用的。
但后来,我偶然发现了一个问题,如何存储与 Redis 的 Strings 数据类型 unix 时间戳号相关的一个问题。此号码应用于:
- 对整个“数据集”进行排序 - 所有事件
- 最重要的是,仅获取高于给定数字(即 > given_time)的事件记录(字符串)
简而言之,我希望有类似 SCORE 与字符串相关的功能,但不一定要与 Redis 中的 Sorted Sets 一起使用。而且我不喜欢这里提出的解决方案实际上是一种集合:Redis: possible to expire an element in an array or sorted set?
相反,我只需要创建一个不常见的事件队列以发送给客户端。这个队列应该:
- 将要(通过 AJAX)获取的事件存储到“队列”中 - 为此,我想使用简单的 Redis 字符串
- 仅提供相关时间戳高于上一个请求之一的事件
- 在“发布”后 1 小时后过期(删除)事件(因为否则,不必要的数据量当然会增加到无穷大)
所以我目前的解决方案是:
- 对 Redis 字符串使用“命名空间”键:EVENT:{unix-time-stamp}:eventName,并将值作为事件内容
- 通过键模式获取所有字符串(事件):EVENT:*
- 通过一些 Redis 命令(我不知道)获取最新的字符串(事件):EVENT:* WHERE "*" > given_unixtime_number
但是如何创建:
"WHERE "*" > given_unixtime_number"
加入 Redis?
编辑: 当然,我不打算坚持上述解决方案。例如,如果需要,我可能会使用非命名空间字符串创建一个单独的 Redis 实例(例如,仅将 {unix-time-stamp} 作为键,没有 EVENT 和 eventName 部分)。
【问题讨论】:
标签: redis