Redis面试题(五)

文章目录

  • 前言
  • [一、使用过 Redis 做异步队列么,你是怎么用的?有什么缺点?](#一、使用过 Redis 做异步队列么,你是怎么用的?有什么缺点?)
  • [二、 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?](#二、 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?)
  • 总结

前言

  1. 使用过 Redis 做异步队列么,你是怎么用的?有什么缺点?
  2. 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?

`

一、使用过 Redis 做异步队列么,你是怎么用的?有什么缺点?

一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep

一会再重试。

缺点:

在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如 rabbitmq 等。

能不能生产一次消费多次呢?

使用 pub/sub 主题订阅者模式,可以实现 1:N 的消息队列。


二、 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?

缓存穿透

一般的缓存系统,都是按照 key 去缓存查询,如果不存在对应的 value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的 key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。

如何避免?

  1. 对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该 key 对应的数据 insert 了之后清理缓存。
  2. 对一定不存在的 key 进行过滤。可以把所有的可能存在的 key 放到一个大的 Bitmap 中,查询时通过该 bitmap 过滤。
    缓存雪崩
    当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。
    如何避免?
  3. 在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个 key 只允许一个线
    程查询数据和写缓存,其他线程等待。
  4. 做二级缓存,A1 为原始缓存,A2 为拷贝缓存,A1 失效时,可以访问 A2,A1 缓存失效时间设置为短期,A2 设置为长期
  5. 不同的 key,设置不同的过期时间,让缓存失效的时间点尽量均匀

总结

  1. 使用过 Redis 做异步队列么,你是怎么用的?有什么缺点?
  2. 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?
相关推荐
天天摸鱼的java工程师几秒前
Java与AI:从业务场景到代码实现,构建人工客服系统实战
java·后端·面试
都叫我大帅哥2 分钟前
Redis中zset内存变形记
java·redis
slowlybutsurely9 分钟前
Cursor快速入门
java·ai编程·cursor
chanalbert13 分钟前
Spring 6 源码深度掘金:66+核心原理与高频面试攻坚指南
python·spring·面试
大只鹅14 分钟前
两级缓存 Caffeine + Redis 架构:原理、实现与实践
redis·缓存·架构
天天摸鱼的java工程师15 分钟前
假设你在开发订单系统时遇到高并发下库存扣减出错,如何解决?由浅入深分析
java·后端·面试
都叫我大帅哥16 分钟前
Redis的ZSet:从“青铜”到“王者”的排序神器
java·redis
肖笙XiaoSheng27 分钟前
使用Gemini2.5 pro 优化我的定时任务(二)
java·后端·代码规范
小小霸王龙!29 分钟前
互联网大厂Java面试实录:Spring Boot与微服务在电商场景中的应用
java·spring boot·redis·微服务·电商
深栈解码32 分钟前
JUC并发编程 CAS运行机制详解
java·后端