redis 数据类型详解 以及 redis适用场景场合( 五 )
4、按照用户投票和时间排序排行榜的一种常见变体模式就像Reddit或Hacker News用的那样 , 新闻按照类似下面的公式根据得分来排序:score = points / time^alpha因此用户的投票会相应的把新闻挖出来 , 但时间会按照一定的指数将新闻埋下去 。 下面是我们的模式 , 当然算法由你决定 。 模式是这样的 , 开始时先观察那些可能是最新的项目 , 例如首页上的1000条新闻都是候选者 , 因此我们先忽视掉其他的 , 这实现起来很简单 。 每次新的新闻贴上来后 , 我们将ID添加到列表中 , 使用LPUSH + LTRIM , 确保只取出最新的1000条项目 。 有一项后台任务获取这个列表 , 并且持续的计算这1000条新闻中每条新闻的最终得分 。 计算结果由ZADD命令按照新的顺序填充生成列表 , 老新闻则被清除 。 这里的关键思路是排序工作是由后台任务来完成的 。
5、处理过期项目另一种常用的项目排序是按照时间排序 。 我们使用unix时间作为得分即可 。 模式如下:- 每次有新项目添加到我们的非Redis数据库时 , 我们把它加入到排序集合中 。 这时我们用的是时间属性 , current_time和time_to_live 。 - 另一项后台任务使用ZRANGE…SCORES查询排序集合 , 取出最新的10个项目 。 如果发现unix时间已经过期 , 则在数据库中删除条目 。
6、计数Redis是一个很好的计数器 , 这要感谢INCRBY和其他相似命令 。 我相信你曾许多次想要给数据库加上新的计数器 , 用来获取统计或显示新信息 , 但是最后却由于写入敏感而不得不放弃它们 。 好了 , 现在使用Redis就不需要再担心了 。 有了原子递增(atomic increment) , 你可以放心的加上各种计数 , 用GETSET重置 , 或者是让它们过期 。 例如这样操作:INCR user:
8、实时分析正在发生的情况 , 用于数据统计与防止垃圾邮件等我们只做了几个例子 , 但如果你研究Redis的命令集 , 并且组合一下 , 就能获得大量的实时分析方法 , 有效而且非常省力 。 使用Redis原语命令 , 更容易实施垃圾邮件过滤系统或其他实时跟踪系统 。
9、Pub/SubRedis的Pub/Sub非常非常简单 , 运行稳定并且快速 。 支持模式匹配 , 能够实时订阅与取消频道 。 10、队列你应该已经注意到像list push和list pop这样的Redis命令能够很方便的执行队列操作了 , 但能做的可不止这些:比如Redis还有list pop的变体命令 , 能够在列表为空时阻塞队列 。 现代的互联网应用大量地使用了消息队列(Messaging) 。 消息队列不仅被用于系统内部组件之间的通信 , 同时也被用于系统跟其它服务之间的交互 。 消息队列的使用可以增加系统的可扩展性、灵活性和用户体验 。 非基于消息队列的系统 , 其运行速度取决于系统中最慢的组件的速度(注:短板效应) 。 而基于消息队列可以将系统中各组件解除耦合 , 这样系统就不再受最慢组件的束缚 , 各组件可以异步运行从而得以更快的速度完成各自的工作 。 此外 , 当服务器处在高并发操作的时候 , 比如频繁地写入日志文件 。 可以利用消息队列实现异步处理 。 从而实现高性能的并发操作 。
推荐阅读
- 西部数据在CES 2021推出多款4TB容量的旗舰级SSD
- WhatsApp收集用户数据新政惹众怒,“删除WhatsApp”在土耳其上热搜
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 黑客窃取250万个人数据 意大利运营商提醒用户尽快更换SIM卡
- 阳狮报告:4成受访者认为自己的数据比免费服务更有价值
- 中消协点名大数据网络杀熟 反对利用消费者个人数据画像
- 学习大数据是否需要学习JavaEE
- 意大利运营商Ho Mobile被曝数据泄露
- 微软官方数据恢复工具即将更新:更易于上手 优化恢复性能
- HDMI 2.1诞生三年:超高速数据线落地 8K电视圆满了