Redis学习---05

一、Redis集群搭建,Redis主从复制,读写分离

默认情况下每台redis服务器都是主节点。

(1)  主从复制:是指将一台redis服务器的数据,复制道其他redis服务。前者成为主节点,后者成为从节点。默认情况下每一台redis服务器都是主节点。主机用来写,从机只能用来读。

(2) 配置从库:需要修改redis.conf的配置文件

配置从库的redis.conf的修改的内容:

端口号:

后台启动:

新建日志文件:

pid进程号文件:

dump.rdb文件名字

命令配置从机:salveof  ip  主机端口号(暂时配置)

info replaction :查看主机的信息;

文件配置:

(3):主机断开连接,主机不能写,从机还能读。主机一旦恢复,还是可以继续写。

(4) 复制原理:

全量复制:从机第一次连接到主机后,主机会进行一次全量的复制给到从机。

增量复制:后面增加一些东西给从机

(5)主机宕机后手动配置主机:

选择从机当作主机输入命令:salveof on one ;之后原来的主机从新启动,那原来的主机需要从新配置,原来的主机之前的从机不存在。

二、哨兵模式(面试重点)

(1) 自动选取主机的方式:自动将从机转为主机

(2) 配置哨兵文件: sentinel.conf (文件名不能错)

(3) 启动哨兵:redis-sentinel  redis_config/sentinel.conf

(4) 如果之前的主机从新启动,那也只能当作新的主机下的从机。

优缺点:

优点:可以主从切换容易,哨兵模式是主从模式的升级,更加健壮。

缺点:不可扩容。

三、缓存击穿、穿透和雪崩 (面试重点)

(1) 缓存击穿

缓存击穿: 一个并发访问量比较大的key在某个时间过期,导致所有的请求直接打在DB上。

 解决:

1) 加锁更新

查询缓存,发现缓存中不存在,加锁,让其它线程等待,只让一个线程去更新缓存。

 

2) 异步更新

还有一个可行的方案是把缓存设置永不过期。那缓存怎么更新呢?通过异步的方式去更新缓存。

比如后台设置一个守护线程定时更新缓存,但这种定时比较难以把握。异步更新机制实际上更适合用于缓存预热。

(2) 缓存穿透

缓存穿透缓存穿透指的查询缓存和数据库中都不存在的数据,这样每次请求直接打到数据库,就好像缓存不存在一样。

 解决:

1)缓存空值/默认值

一种方式是在数据库不命中之后,把一个空对象或者默认值保存到缓存,之后再访问这个数据,就会从缓存中获取,这样就保护了数据库。

 2) 布隆过滤器

除了缓存空对象,我们还可以在存储和缓存之前,加一个布隆过滤器,做一层过滤。

布隆过滤器里会保存数据是否存在,如果判断数据不在,就不会访问存储。

(3) 缓存雪崩

缓存雪崩: 当某⼀时刻发⽣⼤规模的缓存失效的情况,例如缓存服务宕机、大量key在同一时间过期,这样的后果就是⼤量的请求进来直接打到DB上,可能导致整个系统的崩溃,称为雪崩。

解决: 

1) 提高缓存可用性

  • 集群部署:通过集群来提升缓存的可用性,可以利用Redis本身的Redis Cluster或者第三方集群方案如Codis等。
  • 多级缓存:设置多级缓存,第一级缓存失效的基础上,访问二级缓存,每一级缓存的失效时间都不同。

2) 过期时间

  • 均匀过期:为了避免大量的缓存在同一时间过期,可以把不同的 key 过期时间随机生成,避免过期时间太过集中。
  • 热点数据永不过期。

3) 熔断降级

  • 服务熔断:当缓存服务器宕机或超时响应时,为了防止整个系统出现雪崩,暂时停止业务服务访问缓存系统。
  • 服务降级:当出现大量缓存失效,而且处在高并发高负荷的情况下,在业务系统内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的 fallback(退路)错误处理信息。暂停一些不重要的服务。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值