redis面试题笔记梳理

redis的数据类型

redis中有5种数据类型
string
list:相当于java中的linkedList,插入删除操作快,查询慢
hash:相当于java中的hashMap
set:相当于java中的hashSet,无序的
zset:相当于sortedSet,有序集合

redis的持久化

redis持久化有两种方式,AOF和RDB
RDB通过创建快照的方式保存某个时间点的全量数据,是redis默认的持久化方式。优点占用空间小,恢复速度快。缺点:不能做到实时的持久化,必定会有数据丢失的问题。

AOF(Append-Only-File)是通过以文件日志的形式来记录所有变更数据库状态的指令,以append形式追加到AOF文件中,在服务下次启动后就可以加载AOF文件来恢复服务器关闭时数据库原来的状态。
优点:相对于RDB来说,支持秒级的持久化,数据丢失很小。缺点:文件占用空间大,恢复速度慢,性能影响较大。

Redis从4.0之后就采用AOF和RDB混合的方式来进行持久化,定期由RDB进行持久化,在两次RDB快照期间内AOF完成数据的备份,尽可能减少数据的丢失,提高性能。缺点是旧版本不支持该混合持久化方式,并且RDB快照备份阅读性差。

缓存穿透、缓存击穿、缓存雪崩问题

缓存穿透

在短时间内,大量请求一个缓存和数据库中都不存在的数据,造成数据库短时间内承受大量请求而崩掉。
解决方案:
1)做接口校验,过滤掉已知的可能发生的这种请求
2)将已知的不存在的key在缓存中设置null值,可已设置过期时间,防止暴力请求
3)设置一个布隆过滤器,将所有可能存在的数据添加到bitMap中,一定不存在的key会被过滤掉,拦截此类请求发送到数据库

缓存击穿

缓存中可能没有数据但是数据库中有数据(也有可能是缓存过期的情况),短时内大量请求该key值,导致数据库压力过大崩掉。
解决方案:
1)延长热点key的过期时间
2)使用互斥锁,给热点key加锁,许多请求发到redis时,需要获取锁,只有一个请求可以获取到锁,没有获取到的进行等待,获取到锁的去访问数据库,查询回来数据并且更新缓存中的数据。

缓存雪崩

同一时间大量的key失效,并且在该时间段内有大量请求访问这些失效的key,导致大量请求转发到数据库致使数据库崩溃。
解决方案:设置缓存过期时间时可以加一个随机数,这样每个key的过期时间重复率就会降低,减少全部失效过期的情况。

Redis和数据库双写一致性问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值