Redis 总结(未完)

1.如何实现持久化

Redis提供了两种持久化机制RDB和AOF机制。
RDB(Redis DataBase):RDB保存某个时间点之前的快照数据
AOF(Append-Only File):以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作

2.如何执行RDB持久化

1.手动执行bgsave/save
bgsave:通过新生子进程将数据保存到磁盘,然后退出
save:同步保存,会阻塞进程,不推荐

2.在配置文件中找到如下内容

save 3600 1 --3600秒以内写入次数超过1次就生成
save 300 10 --300秒以内写入次数超过10次就生成
save 60 10000 --60秒以内写入次数超过10000次就生成

3.RDB快照过程中Redis是否会停止对外提供服务?

是允许对外提供服务的。
Redis会fork一个子进程出来,子进程来对

4.什么是缓存穿透

客户端请求的数据在缓存和数据库中都不存在,这样缓存永远不会生效,请求永远直接访问数据库,这样很可能会把数据库搞崩溃

解决方案:
1.缓存空对象:请求缓存与数据库都未命中后,将请求的空的值缓存,这样下一次请求就是对缓存进行取数据
优点:简单,维护方便
缺点:内存里会缓存很多这样的垃圾,会有额外的内存消耗(所以可以对其设置一个有效期)。
可能存在短期的不一致

2.布隆过滤:在客户端与redis之间又加了一层布隆过滤器,由布隆过滤器去判断请求是否要被拒绝
优点:内存占用较少,没有多余key
缺点:实现复杂,存在误判可能

5.缓存雪崩

在同一时段内有大量的缓存key同时失效或者redis宕机,导致大量请求到达数据库,带来巨大压力

解决方案:
1.给不同的key的过滤时间添加一个随机数
2.利用redis集群提高服务的可用性
3.给缓存业务添加降级限流策略
4.给业务添加多级缓存

6.缓存击穿

热点key问题,就是一个被并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击
1.互斥锁
线程1未命中,开始对缓存进行重建,同时上锁,此时线程2未命中后发现锁上了,就循环调用,直到释放锁了才会获取到数据,缺点:线程需要等待,性能受损,有死锁风险
2.逻辑过期:不用redis的过期,而是在缓存数据中加入一个可维护的过期时间,线程1获取数据发现逻辑时间过期了,线程1返回过期数据,此时获取互斥锁并开启一个新的线程3进行缓存的重建,重建完后释放锁,在加锁和释放锁时如果有线程2查询数据发现数据过期后,就直接返回过期数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值