Java面试题-Redis缓存

文章目录

1.Redis 支持哪几种数据类型?

2.Redis的持久化机制是怎样的?

1.RDB

RDB机制就是把内存中的所有数据,记录到磁盘中,有两种触发方式,一种是save命令,由主进程来执行RDB,另一种是bgsave命令,fork主进程得到子进程,由子进程读取内存数据并写入到RDB文件,采用的是copy on write技术,当主进程进行读操作的时候,父子进程共享内存,但是如果主进程有写操作,那么就会拷贝一份数据,进行写操作。

2.AOF

AOF机制是将Redis的每一个写命令都记录在AOF文件,并且默认是关闭的,需要手动开启。

关于配置,可以配置AOF记录命令的频率,一般配置为每秒刷盘,并且由于AOF记录的是所有写操作,所以文件会被RDB文件大的多,通过执行bgrewriteaof命令,可以让aof文件执行重写功能,减少文件大小。

3.对比

3.双写一致性

1.问题
2.双写不一致的原因
3.延迟双删(有脏数据)
4.读写锁(强一致)
5.异步通知(最终一致性)
6.总结

4.缓存淘汰策略

一共有八种,包括对全体key和设置了ttl的key进行的操作。

默认是不淘汰,使用的话,优先还是使用lru(最近最少使用),如果有短时高频访问的数据,可以使用lfu(最小频率使用)。

5.缓存穿透、击穿、雪崩

1.缓存穿透
1.解决方案一:缓存空数据
2.解决方案二:布隆过滤器
2.缓存击穿
1.问题出现原因
2.分布式锁和逻辑过期
3.缓存雪崩
1.问题出现原因
2.解决方案

6.Redis是单线程的,但是为什么快?

1.快的原因

纯内存操作,单线程,IO多路复用。

2.IO多路复用?

IO多路复用,就是单线程同时监听多个socket,并在某个socket可读,可写时得到通知,避免无效的等待。目前的IO多路复用采用的都是epoll模式实现,他会在通知用户进程socket就绪的时候,把就绪的socket直接写入用户空间,不需要遍历socket来判断socket是否就绪,提升了性能。

7.幂等性控制解决方案

1.getAndDelete

在之前做过的商城项目里面,有一个下单的操作,就是为了防止重复下单,用户在进入页面时,会向后端发送请求,后端生成一个token存到redis中,然后前端在下单的时候携带token,后端就使用Redis的getAndDelete操作去进行判断,只有成功了才会下单,当然,要结合lua脚本去做。

2.setNx

在Club项目的点赞数据同步的时候,采用的是MQ异步同步,保障最终一致性,此时可能出现重复消费的情况,所以请求时携带messageId,然后使用Redis的setNx命令,去确保只消费一次。

相关推荐
Rain的Java大神之路7 分钟前
面了 50 个候选人,90% 都挂在 LeetCode 3 无重复字符的最长子串:滑动窗口的 5 个致命坑
java·后端·leetcode
西凉的悲伤8 分钟前
Jsoup 库 HTML 解析详解
java·前端·html·jsoup
十碗饭吃不饱20 分钟前
Apache POI 踩坑:setFontFamily 二次设置字体不生效、样式残留问题深度解析
java·word·apache
我命由我1234524 分钟前
6-2.Python 异常处理 - 异常捕获(捕获指定异常、常见异常类型、异常信息)
java·运维·开发语言·python·http·https·java-ee
小静AI工程实验室39 分钟前
AI 应用缓存键怎么设计?租户、模型、提示词与索引版本的 7 项离线验证
缓存
北京地铁1号线40 分钟前
后端开发:缓存(Cache)简介
后端·缓存·cache
zaizai100740 分钟前
STL深度剖析2
java·c++·算法
周厉1 小时前
WebSocket 使用场景与实现方法:Java + Vue3 全栈实战
java·websocket·vue3·websocket双向通讯
wdfk_prog1 小时前
lwip教程 38:从 `lwipopts.h` 到 Port Contract——lwIP 裁剪、构建选择、OS Port 与 Network Port
java·开发语言
吹什么轩1 小时前
MySQL 内置函数全景:日期 / 字符串 / 数学 / 其他,一次讲透(附索引杀手排查)
java·数据库·面试