1. 获取最新的n个数据

为了让小伙伴更好地理解,我这里结合示例讲解.

示例:

现在你在和讯网黄金频道上班,项目经理让你负责每天在频道首页生成一张数据表,来展示1个月内的国际黄金的开盘和收盘价格.如果我们从mysql数据库中按时间排序取出,固然可以.但是你要考虑和讯网的并发量,和你排序时对资源的一个浪费程度.

这个时候我们选取redis的列表存取,就显得很有必要了,我们知道redis有一种队列(list)的数据结构,同时它还具备先进先出的特性.那这样的话,我去最新的1个月的数据不就信手拈来么.一个lrange命令即可简单地取出你想要的区间的值.

2. 获取 TOP N 的数据

接下来的这个例子,看标题,感觉跟第1中应用差不多,其实还是有差别的.应用1我们是利用列表的先进先出的特性,按存取时间来取,接下来我们的这个示例,就是利用有序集合的特性来解决实际问题.

现在你受雇于APPLESTORE,项目经理要求你在商店首页,展示下载量排行前30的APP.

这个时候,你若能够想到我们redis学习过程中,给大家讲到的SortedSet有序集合,那就再好不过了.我们只需要将每个APP生成一个唯一的ID,将其作为集合中成员member,下载数目作为成员的score.那么当你将这个score插入到有序集合中时,redis就会按其进行大小排序,自然有个有序的集合就形成了.最终你要取前N或者后N的数据,就在于你自己了.

3. 设置精准的抢购时间

设置抢购,促销时间,这项技术在电商领域确实很实用.

现在你在阿里的淘宝事业部上班,领队组长分配你来完成一个限时抢购活动,某商品中午10:00开始进行抢购,1小时后,活动结束.

咿呀,既然限时,要准确地1个小时结束.这个时候我们学习redis的过程中,讲到的key的有效期就派上用场了.我们可以将某个活动的key的过期时间设置为过期时刻的时间戳,用户抢购的过程中并发是很高的.那么这个时候提交的数据我们未必就需要立即存入我们的硬盘数据库.用户下单时我们获取该活动的key是否过期,未过期,允许用户下单,订单数据暂时内存缓存.一旦该key失效,禁止用户下单,同时,我们可以将刚才并发的那么多笔单进行硬盘数据库的导入即可.一来实现了精准时间的设定,二来,应对了抢购的高并发量.

4. 轻松实现计数器

你目前就职的单位是中央全面深化改革领导小组技术顾问办公室,在过去如果全国人民一起选代表,既浪费人力又浪费财力.现在网络技术发展了,习近平组长交代由你牵头开发点赞选人大平台.

接到这个项目,你是不是很犯难,13亿啊!可能同时集中在某个时间段,点赞,如此大的IO请求.硬盘数据库多少有些力不从心.哎,这个时候你要运用上我们的内存数据库系统了,redis中对key的增incre,减decr不正适合你的需求么.

5. 去除重复值

去除重复值,听起来很熟悉,我们的MySQL不是有unique索引吗?哦,好吧,我要说的是我们redis中的对字符串的set命令更使用.

你现在在下厨房平台,任职技术兼策划.你准备收集天下美食,苦于不知菜名.网络是有魔力的,人名群众的智慧是无穷的.你准备发动全国的网友们,为你提供菜名,同时你还不想让大家发出相同菜名.

看到如此问题,你是否还能想到我们之前在学习redis的字符串类型时,说到的set命令,我们讲默认情况,不给其他参数时,如果我们的key不存在,则创建添加.如果key已经存在,则旧值覆盖新值.既然如此,key值存在,则覆盖.不正是我们需要的模型么?

6. 利用set命令制作反垃圾系统

很多小伙伴,看到这,蒙了.一个破set命令什么时候还能反垃圾了.咦,你应该脑洞大一些,再大一些.

上次你制作的统计菜名系统,领导会上先把你肯定了一番,然后义正言辞地说,小明啊,你这系统不太符合净网行动的要求啊,有些网友把一些带有明显淫秽色情的菜名都提交到了系统.还被展示出来投票,这不荒唐吗?

吓的你一阵冷汗,这个时候你想到了在XX教育高性能架构班学习的同桌小胖.电话里小胖告诉你,当我们使用set命令对字符串进行操作时,给它一个NX参数,这样的话只有用户提交的key不存在时,才会对key进行操作.你去网上down一个敏感字汇字典,提前set入库,不就可以实现反垃圾了么.听完小胖的指导,紧张的你如释重负.

7. 利用发布订阅的中的SUBSCRIBE和PUBLISH命令构建实时消息推送系统

费了老鼻子劲,你终于进入了新浪微博事业部.第二天组长找到正埋头苦干的你.小明,咱们微博也要搞个跟FB一样一样的关注功能,搞大V认证,大V一发消息,赶紧推送给关注的那群XX,让XX跟大V赶紧互动起来.以此来提高用户粘性.组长走后,"赶紧,推送",这两个词在你的耳畔不时地回响.

你又想到了小胖,小胖电话里告诉你.redis里有subscribe订阅和publish发布功能的.你挂了电话,去自学it网里一搜索,果不其然.一个subscribe可以订阅不同的用户模型,只要对应的模型有publish实现,订阅者即可实时收到,推送的消息.你虽然不是王大锤,但你也万万没想到redis竟然有如此功能.O(∩_∩)O哈哈~

8. 构建队列系统

忙完微博的事,正准备收拾东西去挤地铁的你.突然被组长叫住了.

小明,你虽然完成了微博关注和推送的技术架构.但是这几天又有个新问题出现了.因为FB用不了,微博用户暴增.特别是认证大V的用户越来越多,就连门口烤红薯的大爷早上还拽着我说,给他整个大V吧,俺不差钱.老板为了缓解认证方面的压力,已经开始收费认证了,但是还是挡不住这群XX.赶上过节饭点,大V们几乎同时发微博,推送服务器有点压力.你把这个问题解决了,再走吧,晚点回去打车公司报销.然后打完卡他走了.

"同时发微博","同时推送,服务器压力大".你从电脑中找到了小胖之前发给你的那本redis自学笔记,笔记上说.我们可以将若干个需要执行的事件加入队列,然后按时间的顺序去逐个逐个的执行.这个时候你又想到了一个提高用户互动性的好办法.我能不能让粉丝数目多的大V的微博优先推送呢?毕竟粉丝基数大,影响大,总能搞出一个大新闻.既然这样,我直接使用有序队列不就行了.把一个个大V的微博推送事件ID存入有序队列,同时依据粉丝数给予权重(或说优先级).不就可以达到我们的需求了么.

9. 缓存

这一点大家应该很熟悉了,它可以像memcache一样充当缓存数据库.不过的它的数据类型比memcache多的多,应对场景自然要比memcache丰富的多.比较时髦的用法是,用其来缓存会话哦.