2011-07-25 10:38 贾隆 51CTO.com 字号:T | Thtml
Redis的一个很大好处就是能够不用整个转入到这个数据库,而是能够沿用以前的MySQL等数据库,而仅在一些特定的应用场景经过Redis的特性提升效率。本文列出了11个这样的Web应用场景,如显示最新的项目列表、删除和过滤、排行榜等相关需求。web
AD:51CTO学院:IT精品课程在线看!redis
【51CTO精选译文】在“怎样让Redis在你的系统中发挥做用”一文中,Salvatore 'antirez’ Sanfilippo告诉咱们如何利用Redis独有的数据结构处理能力来解决一些常见问题。一些Redis原语命令好比LPUSH、LTRIM和 LREM等等可以用来帮助开发者完成须要的任务——这些任务在传统的数据库存储中很是困难或缓慢。这是一篇很是有用而且实际的文章。那么要如何在你的框架 中完成这些任务呢?数据库
下面列出11种Web应用场景,在这些场景下能够充分的利用Redis的特性,大大提升效率。编程
1.在主页中显示最新的项目列表。缓存
Redis使用的是常驻内存的缓存,速度很是快。LPUSH用来插入一个内容ID,做为关键字存储在列表头部。LTRIM用来限制列表中的项目数最多为5000。若是用户须要的检索的数据量超越这个缓存容量,这时才须要把请求发送到数据库。网络
2.删除和过滤。数据结构
若是一篇文章被删除,可使用LREM从缓存中完全清除掉。 框架
3.排行榜及相关问题。spa
排行榜(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实现起来显然更为轻松。
原文:11 Common Web Use Cases Solved In Redis
【编辑推荐】