一:Redis的7个应用场景

Redis的7个应用场景
 

一:缓存——热数据前端

热点数据(常常会被查询,可是不常常被修改或者删除的数据),首选是使用redis缓存,毕竟强大到冒泡的QPS和极强的稳定性不是全部相似工具都有的,并且相比于memcached还提供了丰富的数据类型可使用,另外,内存中的数据也提供了AOF和RDB等持久化机制能够选择,要冷、热的仍是忽冷忽热的均可选。mysql

结合具体应用须要注意一下:不少人用spring的AOP来构建redis缓存的自动生产和清除,过程可能以下:redis

  • Select 数据库前查询redis,有的话使用redis数据,放弃select 数据库,没有的话,select 数据库,而后将数据插入redisspring

  • update或者delete数据库钱,查询redis是否存在该数据,存在的话先删除redis中数据,而后再update或者delete数据库中的数据sql

上面这种操做,若是并发量很小的状况下基本没问题,可是高并发的状况请注意下面场景:数据库

为了update先删掉了redis中的该数据,这时候另外一个线程执行查询,发现redis中没有,瞬间执行了查询SQL,而且插入到redis中一条数据,回到刚才那个update语句,这个悲催的线程压根不知道刚才那个该死的select线程犯了一个弥天大错!因而这个redis中的错误数据就永远的存在了下去,直到下一个update或者delete。数组

二:计数器缓存

诸如统计点击数等应用。因为单线程,能够避免并发问题,保证不会出错,并且100%毫秒级性能!爽。并发

命令:INCRBY分布式

固然爽完了,别忘记持久化,毕竟是redis只是存了内存!


三:队列

  • 至关于消息系统,ActiveMQ,RocketMQ等工具相似,可是我的以为简单用一下还行,若是对于数据一致性要求高的话仍是用RocketMQ等专业系统。

  • 因为redis把数据添加到队列是返回添加元素在队列的第几位,因此能够作判断用户是第几个访问这种业务

  • 队列不只能够把并发请求变成串行,而且还能够作队列或者栈使用


四:位操做(大数据处理)

用于数据量上亿的场景下,例如几亿用户系统的签到,去重登陆次数统计,某用户是否在线状态等等。

想一想一下腾讯10亿用户,要几个毫秒内查询到某个用户是否在线,你能怎么作?千万别说给每一个用户创建一个key,而后挨个记(你能够算一下须要的内存会很恐怖,并且这种相似的需求不少,腾讯光这个得多花多少钱。。)好吧。这里要用到位操做——使用setbit、getbit、bitcount命令。

原理是:

redis内构建一个足够长的数组,每一个数组元素只能是0和1两个值,而后这个数组的下标index用来表示咱们上面例子里面的用户id(必须是数字哈),那么很显然,这个几亿长的大数组就能经过下标和元素值(0和1)来构建一个记忆系统,上面我说的几个场景也就可以实现。用到的命令是:setbit、getbit、bitcount


五:分布式锁与单线程机制

  • 验证前端的重复请求(能够自由扩展相似状况),能够经过redis进行过滤:每次请求将request Ip、参数、接口等hash做为key存储redis(幂等性请求),设置多长时间有效期,而后下次请求过来的时候先在redis中检索有没有这个key,进而验证是否是必定时间内过来的重复提交

  • 秒杀系统,基于redis是单线程特征,防止出现数据库“爆破”

  • 全局增量ID生成,相似“秒杀”


六:最新列表

例如新闻列表页面最新的新闻列表,若是总数量很大的状况下,尽可能不要使用select a from A limit 10这种low货,尝试redis的 LPUSH命令构建List,一个个顺序都塞进去就能够啦。不过万一内存清掉了咋办?也简单,查询不到存储key的话,用mysql查询而且初始化一个List到redis中就行了。


七:排行榜

谁得分高谁排名往上。命令:ZADD(有续集,sorted set)

最近在研究股票,发现量化交易是个很是好的办法,经过臆想出来规律,用程序对历史数据进行验证,来判断这个臆想出来的规律是否有效,这玩意真牛!有没有哪位玩这个的给我留个言,交流一下呗。

相关文章
相关标签/搜索