管理进化

redis有什么用


redis的作用有以下7点:1、获取最新的n个数据;2、获取TOP N的数据;3、设置精准的抢购时间;4、实现计数器;5、去除重复值;6、利用set命令制作反垃圾系统;7、构建队列系统。redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

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哈哈~

智齿客服