一、概述
redis是现阶段程序员很熟悉的一个工具,人人都说它很强大,功能多,江湖上到处都流传着各种它的传说。而且,不论看哪个大牛的博客,还是牛B公司的设计架构,通通都有redis的身影。但是,在我工作经历当中,其实很多程序员并不会用redis,甚至很多时候是为了用而用,瞎JB用的比比皆是,让人唏嘘不已,悄悄的在背后不屑的说一句:臭SB。当然,笔者可能也是这些“臭SB”之中的一员,所以特此记录下我玩过的redis场景,为今后大家骂我提供文字依据。
PS : 我是个JAVA程序员,目前仅以JAVA语音进行记录。
二、使用场景
1、分布式session
瞎蛋逼:
web系统中session的重要性不言而喻,原本session这个东西,是放在后台通过容器进行管理,可是随着项目业务越来越大,单一节点已经不能满足业务需求,系统开始向着集群化,分布式化发展。为了保证每一个节点的高可用,目前流行的都是把服务器做成无状态的服务器。这个时候就要考虑分布式session的问题了。在此我们不讨论IP_HASH啊,通过容器共享session这些方式。我们就说把session放到redis里这种操作。原理其实老简单了,不管用户通过何种方式进行的登录,不管用户通过那个节点登录的系统,只需要把session放到redis里就好了,这样用户之后的操作,都可以通过统一的redis拿到所需要的数据了。
怎么做
感谢万能的spring,有个工具叫spring-session-data-redis,用它,没跑。
2、分布式定时任务
setnx + expire。后台两个线程,一个抢锁,一个更新消失时间。
3、分布式锁
setnx。redlock(有spring boot 配套插件)
4、热数据缓存
没啥说的,最常用
5、保存静态页面
秒杀系统中,常用来把页面通过字符串形式保存在redis中
6、预处理
高并发系统,把要处理的数据提前放到redis中,先做运算,再放入MQ里排队
7、接口限流
每个接口预设置时间,和流量
8、共同好友
set 操作,交集,并集等