Java后端开发面试题篇——Redis

Redis的数据持久化策略有哪些

RDB的执行原理?

bgsave开始时会fork主进程得到子进程,子进程共享主进程的内存数据。完成fork后读取内存数据并写入 RDB 文件。 fork采用的是copy-on-write技术: 当主进程执行读操作时,访问共享内存; 当主进程执行写操作时,则会拷贝一份数据,执行写操作。

因为是记录命令,AOF文件会比RDB文件大的多。而且AOF会记录对同一个key的多次写操作,但只有最后一次写操作才有意义。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。

什么是缓存穿透,怎么解决 什么是布隆过滤器

缓存穿透:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库

解决方案一:缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存

优点:简单 缺点:消耗内存,可能会发生不一致的问题

解决方案二:布隆过滤器

优点:内存占用较少,没有多余key

缺点:实现复杂,存在误判

误判率:数组越小误判率就越大,数组越大误判率就越小,但是同时带来了更多的内存消耗

用redisson实现布隆过滤器

什么是缓存击穿,怎么解决

缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮

解决方案一:互斥锁

解决方案二:逻辑过期

什么是缓存雪崩,怎么解决

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

解决方案: 给不同的Key的TTL添加随机值

利用Redis集群提高服务的可用性

给缓存业务添加降级限流策略

给业务添加多级缓存

redis双写问题

双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致

1、延迟双删

2、

3、

Redis分布式锁如何实现、Redis实现分布式锁如何合理的控制锁的有效时长

redisson实现的分布式锁-可重入

主从一致性

RedLock(红锁):不能只在一个redis实例上创建锁,应该是在多个redis实例上创建锁(n / 2 + 1),避免在一个redis实例上加锁

Redis的数据删除策略有哪些

惰性删除:设置该key过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key

优点 :对CPU友好,只会在使用该key时才会进行过期检查,对于很多用不到的key不用浪费时间进行过期检查

缺点 :对内存不友好,如果一个key已经过期,但是一直没有使用,那么该key就会一直存在内存中,内存永远不会释放

定期删除:每隔一段时间,我们就对一些key进行检查,删除里面过期的key(从一定数量的数据库中取出一定数量的随机key进行检查,并删除其中的过期key)

优点:可以通过限制删除操作执行的时长和频率来减少删除操作对 CPU 的影响。另外定期删除,也能有效释放过期键占用的内存

缺点:难以确定删除操作执行的时长和频率

Redis的过期删除策略:惰性删除 + 定期删除两种策略进行配合使用

Redis的数据淘汰策略有哪些

Redis集群有哪些方案, 知道嘛

主从复制

哨兵模式

分片集群

Redis是单线程的,但是为什么还那么快?

Redis是纯内存操作,执行速度非常快

采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题

使用I/O多路复用模型,非阻塞IO

相关推荐
儿时可乖了2 分钟前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
ruleslol4 分钟前
java基础概念37:正则表达式2-爬虫
java
简 洁 冬冬6 分钟前
046 购物车
redis·购物车
I_Am_Me_9 分钟前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
重生之我是数学王子20 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
xmh-sxh-131420 分钟前
jdk各个版本介绍
java
Ai 编码助手21 分钟前
使用php和Xunsearch提升音乐网站的歌曲搜索效果
开发语言·php
学习前端的小z25 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
神仙别闹33 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE34 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang