Java面试题-Redis缓存

news/2025/2/13 1:48:09/

文章目录

    • 1.**Redis 支持哪几种数据类型?**
    • 2.**Redis的持久化机制是怎样的?**
        • 1.RDB
        • 2.AOF
        • 3.对比
    • 3.双写一致性
        • 1.问题
        • 2.双写不一致的原因
        • 3.延迟双删(有脏数据)
        • 4.读写锁(强一致)
        • 5.异步通知(最终一致性)
        • 6.总结
    • 4.缓存淘汰策略
    • 5.缓存穿透、击穿、雪崩
        • 1.缓存穿透
          • 1.解决方案一:缓存空数据
          • 2.解决方案二:布隆过滤器
        • 2.缓存击穿
          • 1.问题出现原因
          • 2.分布式锁和逻辑过期
        • 3.缓存雪崩
          • 1.问题出现原因
          • 2.解决方案
    • 6.Redis是单线程的,但是为什么快?
        • 1.快的原因
        • 2.IO多路复用?
    • 7.**幂等性控制解决方案**
        • 1.getAndDelete
        • 2.setNx

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

CleanShot 2024-08-20 at 09.56.27@2x

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

1.RDB

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

CleanShot 2024-08-10 at 09.51.57@2x

2.AOF

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

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

3.对比

CleanShot 2024-08-10 at 09.57.40@2x

3.双写一致性

1.问题

CleanShot 2024-08-10 at 09.22.20@2x

2.双写不一致的原因

CleanShot 2024-08-10 at 09.28.38@2x

3.延迟双删(有脏数据)

CleanShot 2024-08-10 at 09.23.48@2x

CleanShot 2024-08-10 at 09.30.22@2x

4.读写锁(强一致)

CleanShot 2024-08-10 at 09.35.53@2x

5.异步通知(最终一致性)

CleanShot 2024-08-10 at 09.37.52@2x

CleanShot 2024-08-10 at 09.38.19@2x

6.总结

CleanShot 2024-08-10 at 09.41.20@2x

4.缓存淘汰策略

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

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

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

1.缓存穿透
1.解决方案一:缓存空数据

CleanShot 2024-08-10 at 09.00.54@2x

2.解决方案二:布隆过滤器

CleanShot 2024-08-10 at 09.06.06@2x

CleanShot 2024-08-10 at 09.03.35@2x

CleanShot 2024-08-10 at 09.04.56@2x

CleanShot 2024-08-10 at 09.05.06@2x

CleanShot 2024-08-10 at 09.05.39@2x

2.缓存击穿
1.问题出现原因

CleanShot 2024-08-10 at 09.09.13@2x

2.分布式锁和逻辑过期

CleanShot 2024-08-10 at 09.14.42@2x

3.缓存雪崩
1.问题出现原因

CleanShot 2024-08-10 at 09.20.30@2x

2.解决方案

CleanShot 2024-08-10 at 09.21.11@2x

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命令,去确保只消费一次。


http://www.ppmy.cn/news/1571576.html

相关文章

C++基础知识学习记录—构造函数

1、构造函数(constructor) 作用:用于创建对象时给属性值进行初始化 构造函数是一个特殊的函数: 1、构造函数与类同名 2、如果没有显式给出构造函数,编译器会给出默认的构造函数(参数为空,并且函数体也为空),并没有…

Android studio怎么创建assets目录

在Android Studio中创建assets文件夹是一个简单的步骤,通常用于存储不需要编译的资源文件,如文本文件、图片、音频等 main文件夹,右键new->folder-assets folder

22.3、IIS安全分析与增强

目录 IIS安全威胁分析iis安全机制iis安全增强 IIS安全威胁分析 iis是微软公司的Web服务软件,主要提供网页服务,除此之外还可以提供其他服务,第一个最主要的是网页服务,第二个是SMTP邮件服务,第三个是FTP文件传输服务。…

DeepSeek-R1技术革命:用强化学习重塑大语言模型的推理能力

引言:低成本高性能的AI新范式 在2025年1月,中国AI公司DeepSeek发布了两个标志性模型——DeepSeek-R1-Zero与DeepSeek-R1,以仅600万美元的训练成本实现了与OpenAI O1系列(开发成本约5亿美元)相当的推理性能&#xff0c…

集成方案 | Docusign + 纷享销客,自动化合同签署,加速业务增长!

本文将详细介绍 Docusign 与纷享销客的集成步骤及其效果,并通过实际应用场景来展示 Docusign 的强大集成能力,以证明 Docusign 集成功能的高效性和实用性。 在数字化转型过程中,企业依赖高效的 CRM 系统来优化业务流程和客户关系管理。纷享销…

c# OpenCvSharp 16位转8位图

通过OpenCvSharp,将16位图转8位图,代码如: public static Mat Convert16BitTo8Bit(Mat src16, double max, double min){if (src16.Depth() 0){//已经是8位了return src16;}Mat dst8 Mat.Zeros(src16.Rows, src16.Cols, MatType.CV_8UC1);i…

Anaconda Navigator 与 Conda:GUI 和 CLI 的对比与使用

1. 引言 Anaconda 提供了两种主要的管理工具: Anaconda Navigator(GUI 界面)Conda(命令行工具 CLI) 这两种工具各有优劣,适用于不同类型的用户。本文将详细介绍它们的功能、使用方法及对比分析&#xff…

【前端】【面试】ref与reactive的区别

ref 与 reactive 的区别笔记 一、概述 在 Vue 3 的组合式 API 中,ref 和 reactive 是两个非常重要的响应式工具,它们都用于创建响应式数据,但在使用方式、适用场景和内部实现上存在一些区别。 二、基本使用方式 1. ref ref 用于创建一个…