redis常见面试题

缓存更新策略 
1.内存淘汰:
说明  :不用自己维护,利用Redis的内存淘汰机制,当内存不足时自动淘汰部分数据,下次查询时更新缓存
一致性:差
维护成本:无
2.超时剔除:
说明  :给缓存数据添加TTL时间,到期后自动删除,下次查询时更新缓存。
一致性:一般
维护成本:低
3.主动更新:
说明  :编写业务逻辑,在修改数据库的同时,更新缓存
一致性:好
维护成本:高

业务场景:
低一致性需求:使用内存淘汰机制,例如店铺类型
高一致性需求:主动更新,并以超时剔除作为兜底方案,例如店铺详情查询的缓存

读操作: 
  缓存命中则直接返回
  缓存未命中则查询数据库,并写入缓存,设定超时时间

写操作:
先写数据库,然后在删除缓存
要确保数据库于缓存操作的原子性

缓存穿透 :缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会失效,这些请求都会打到数据库
常见的两种解决方案:
缓存空对象
 优点:实现简单 维护方便
 缺点:额外的内存消耗
            可能造成短期的不一致

布隆过滤器
优点:内存占用少 ,没有多余的key
缺点:实现复杂,存在误判的可能性

增强id的复杂度,避免被猜测id规律
做好数据的基础格式校验
加强用户权限校验
做好热点参数的限流


缓存雪崩
缓存雪崩是指在于同一时段大量的缓存key同时失效或者redsi服务宕机,导致大量请求到达数据库,达赖巨大压力

给不同的key的TTL添加随机值
利用redis集群提高服务的可用性
给缓存业务添加降级限流策略
给业务添加多级缓存

缓存击穿
缓存击穿问题也叫热点key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了 ,无数的请i去访问会在瞬间给数据库带来巨大的冲击。
常见的解决方案:
1.互斥锁

优点:没有额外的内存消耗  保证一致性  实现简单
缺点: 线程须要等待,性能收到影响    可能有死锁风险

2.逻辑过期

优点:线程无需等待 性能好
缺点:不能保证一致性  有额外的内存消耗    实现复杂 


redis锁知识

1.不可重入redis分布式锁:
原理:利用sentx的互斥性,利用ex避免死锁,释放锁时判断线程标识

缺陷:不可重入,无法重试,锁超时失效

2.可重入的redis分布式锁:
原理:利用hash结构,纪律线程标示和重入次数,利用watchDog延续时间,利用信号量控制锁重试等待

缺陷:redis宕机引起锁失效问题

3.Redisson的mulitiLock:
原理:多个独立的redis节点,必须在所有节点都获取重入锁,才算获取锁成功

缺陷:运维成本高,实现复杂


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值