1、redis发布订阅
角色: 发送者 、 订阅者
定义:发送者发送消息,订阅者接受消息
命令
subscribe channel # 订阅一个频道 channel
publish channel "hello,world" # 发布者发布消息到指定频道
应用:
- 聊天室
- 微信公众号文章的发布
- 实时提醒
2、redis主从复制
- 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。
- 前者称为主节点
(master/leader),后者称为从节点(slave/follower); - 数据的复制是单向的,只能由主节点到从节点。
- Master以写为主,Slave 以读为主。
注意:
- 默认情况下,每一台redis都是主节点
- 主机可以写,从机不能写只能读!主机中的所有信息和数据,都会自动被从机保存!
- 一个主节点可以有很多从节点,但是从节点只能有一个主节点
- 要将redIs运用在项目中,只有一台redis时不能宕机
作用:
- 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务
- 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现故障恢复;
- redis用作存储缓存,单台Redis最大使用内存不应该超过20G。
3、哨兵( Sentinel)模式
1.为什么要使用哨兵模式?
redis的主从复制下,一旦主节点故障不能提供服务时,需要人工将从节点提升为主节点,并通知应用方更新主节点的地址。 使用Sentinel机制完成动态选举,避免人工更新。
2.作用:
- 监控redis集群中master主服务器的工作状态
- 在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用
- 当一个master不能正常工作时,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;
3.优点:
- 主节点和从节点可以切换,解决系统故障
- 哨兵是基于主从复制模式,即包含主从复制的所有优点
4.缺点
- 扩容麻烦,集群容量一旦上限,在线扩容麻烦
- 配置哨兵过程繁杂
4、redis缓存穿透和雪崩
1、缓存穿透(查不到数据)
定义:
按照key值在缓存中查询对应的value,缓存的value值为空,大量并发数据访问DB
产生原因:
- 黑客恶意的攻击,造成数据库压力过大
解决方案:
- 布隆过滤器
将所有可能查询的参数以hash形式存储,在控制层进行校验,不符合的数据丢弃,从而避免无用和请求数据的干扰
- 缓存空对象
将返回的空对象缓存起来,同时会设置一个过期时间,之后再访问这个数据将会从缓存中获取,保护了后端数据源
2、缓存雪崩
定义:
在某个时间段,缓存集中过期失效,缓存失效时,大量的数据会直接访问db(数据库),此时,造成数据库压力过大。
解决方案:
- redis 高可用
多设置几台redis,当其中一台宕机后其他还可以继续工作。(搭建redis集群)
- 限流降级
在缓存失效后,通过加锁或者队列来控制数据库写缓存的线程数量(当其他key只允许一个线程查询数据和写缓存,其他线程等待)
3、缓存击穿(数据量太大,造成缓存过期)
定义:
一个key非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个key在失效的瞬间,大量的请求就会击穿缓存,直接请求数据库。
解决方案:
- 将热点数据设置永不过期
- 加互斥锁(使用分布式锁,保证对于每个key同时只有一个线程去查询后端服务,其他线程没有获得分布式锁的权限,因此只需要等待即可)