下面列出 11 种 web 应用场景, 在这些场景下可以充分的利用 Redis 的特性, 大大提高效率.
1.在主页中显示最新的项目列表.
Redis 使用的是常驻内存的缓存, 速度非常快. LPUSH 用来插入一个内容 ID, 作为关键字存储在列表头部. LTRIM 用来限制列表中的项目数最多为 5000. 如果用户需要的检索的数据量超越这个缓存容量, 这时才需要把请求发送到数据库.
2.删除和过滤.
如果一篇文章被删除, 可以使用 LREM 从缓存中彻底清除掉.
3.排行榜及相关问题.
排行榜 (leader board) 按照得分进行排序. ZADD 命令可以直接实现这个功能, 而 ZREVRANGE 命令可以用来按照得分来获取前 100 名的用户, ZRANK 可以用来获取用户排名, 非常直接而且操作容易.
4.按照用户投票和时间排序.
这就像 Reddit 的排行榜, 得分会随着时间变化. LPUSH 和 LTRIM 命令结合运用, 把文章添加到一个列表中. 一项后台任务用来获取列表, 并重新计算列表的排序, ZADD 命令用来按照新的顺序填充生成列表. 列表可以实现非常快速的检索, 即使是负载很重的站点.
5.过期项目处理.
使用 unix 时间作为关键字, 用来保持列表能够按时间排序. 对 current_time 和 time_to_live 进行检索, 完成查找过期项目的艰巨任务. 另一项后台任务使用 ZRANGE...WITHSCORES 进行查询, 删除过期的条目.
6.计数.
进行各种数据统计的用途是非常广泛的, 比如想知道什么时候封锁一个 IP 地址. INCRBY 命令让这些变得很容易, 通过原子递增保持计数; GETSET 用来重置计数器; 过期属性用来确认一个关键字什么时候应该删除.
7.特定时间内的特定项目.
这是特定访问者的问题, 可以通过给每次页面浏览使用 SADD 命令来解决. SADD 不会将已经存在的成员添加到一个集合.
8.实时分析正在发生的情况, 用于数据统计与防止垃圾邮件等.
使用 Redis 原语命令, 更容易实施垃圾邮件过滤系统或其他实时跟踪系统.
9.Pub/Sub.
在更新中保持用户对数据的映射是系统中的一个普遍任务. Redis 的 pub/sub 功能使用了 SUBSCRIBE,UNSUBSCRIBE 和 PUBLISH 命令, 让这个变得更加容易.
10.队列.
在当前的编程中队列随处可见. 除了 push 和 pop 类型的命令之外, Redis 还有阻塞队列的命令, 能够让一个程序在执行时被另一个程序添加到队列. 你也可以做些更有趣的事情, 比如一个旋转更新的 RSS feed 队列.
11.缓存.
Redis 缓存使用的方式与 memcache 相同.
网络应用不能无休止地进行模型的战争, 看看这些 Redis 的原语命令, 尽管简单但功能强大, 把它们加以组合, 所能完成的就更无法想象. 当然, 你可以专门编写代码来完成所有这些操作, 但 Redis 实现起来显然更为轻松.
毫无疑问, Redis http://blog.nosqlfan.com/tags/redis 开创了一种新的数据存储思路, 使用 Redis, 我们不用在面对功能单调的数据库时, 把精力放在如何把大象放进冰箱这样的问题上, 而是利用 Redis 灵活多变的数据结构和数据操作, 为不同的大象构建不同的冰箱. 希望你喜欢这个比喻.
下面是一篇新鲜出炉的文章, 其作者是 Redis 作者 @ http://twitter.com/antirez , 他描述了 Redis 比较适合的一些应用 http://blog.nosqlfan.com/tags/应用 场景, NoSQLFan 简单列举在这里, 供大家一览:
1. 取最新 N 个数据的操作
- FUNCTION get_latest_comments(start,num_items):
- id_list = redis.lrange("latest.comments",start,start+num_items-1)
- IF id_list.length < num_items
- id_list = SQL_DB("SELECT ... ORDER BY time LIMIT ...")
- END
- RETURN id_list
- END
来源: http://www.bubuko.com/infodetail-2646363.html