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. 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?
相关推荐
一条破秋裤1 小时前
Linux 线程创建:pthread_create 与基本回收
java·linux·运维
布吉岛的石头2 小时前
Java 程序员第 49 阶段5:BERT 预训练目标 MLM+NSP 的工程含义
java·人工智能·深度学习·bert·transformer
饺子大魔王的男人2 小时前
Redis 内存和连接异常怎么排查?用 redis_exporter 搭一套可远程抓取的监控链路
数据库·redis·bootstrap
摇滚侠2 小时前
《On Java 中文版 基础卷》阅读笔记 对象无处不在 03
java·笔记·python
二十雨辰3 小时前
[学成在线]-01项目背景
java
夕除3 小时前
redis--RDB AOF
数据库·redis·缓存
弈栈录4 小时前
Java AI 应用的异步化与高并发设计
java·后端·架构
落魄实习生4 小时前
Agent Scope Java 2.x 系列【2】 ReActAgent
java·开发语言
艸肅4 小时前
Ubuntu 安装 JDK (含手动安装)
java·ubuntu·jdk
m0_734172424 小时前
Python字典计数怎样处理首次出现的键
java