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. 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?
相关推荐
cxyxiaokui0015 分钟前
还在用 @Autowired 字段注入?你可能正在写出“脆弱”的 Java 代码
java·后端·spring
珹洺12 分钟前
Java-Spring入门指南(二十二)SSM整合前置基础
java·开发语言·spring
天天摸鱼的java工程师13 分钟前
Java IO 流 + MinIO:游戏玩家自定义头像上传(格式校验、压缩处理、存储管理)
java·后端
程序员小富14 分钟前
改了 Nacos 一行配置,搞崩线上支付系统!
java·后端
ʚ希希ɞ ྀ16 分钟前
用队列实现栈---超全详细解
java·开发语言·数据结构
洛克大航海29 分钟前
Ajax基本使用
java·javascript·ajax·okhttp
要一起看日出32 分钟前
数据结构-----栈&队列
java·数据结构··队列
Mr_Chester1 小时前
mybatis OGNL+优雅处理简单逻辑
java·tomcat·mybatis
道可到1 小时前
阿里面试原题 面试通关笔记05 | 异常、泛型与反射——类型擦除的成本与优化
java·后端·面试
神仙别闹1 小时前
基于Java(Spring Boot)+MySQL实现电商网站
java·spring boot·mysql