Redis常见知识点

ops/2025/1/12 7:52:59/

 1、什么是缓存穿透?

缓存穿透是指查询一定某个key是否存在,每次不存在都查询DB会把DB压垮。

解决方案的话,我们通常都会用布隆过滤器来解决。

布隆过滤器:在查找一个数是否在一个集合中使用的,通过对数组长度取模,判断其是否在数组中来判断一个数是否存在,比如用3个数组,这样查找成功的概率大概是95%,就不用这么多数来存。

2、什么是缓存击穿,如何解决?

指的是在某一个时间节点,有一个过期的key,突然有大量的访问,这样会因为没有设置缓存而全都去查询后端的DB了。这些请求发现缓存过期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把 DB 压垮。

解决方案:可以使用互斥锁:当缓存失效时,不立即去load db,先使用如 Redis 的 setnx 去设置一个互斥锁,当操作成功返回时再进行 load db的操作并回设缓存,否则重试get缓存的方法。

redis中,setnx的含义,就如下:

  • SETNX():含义就是SET if Not Exists,有两个参数 setnx(key, value),该方法是原子的,如果key不存在,则设置当前key成功,返回1;如果当前key已经存在,则设置当前key失败,返回0。

3、什么是缓存雪崩,如何解决?

击穿是指一个key击穿,雪崩是指某个时间段,有大量的请求到redis当中,redis当中这些key都失效了,然后都访问后端的DB。

解决方案:可以将缓存失效时间分散开,比如可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样key就不在某一个时刻上了。

 4、如何实现缓存数据与DB的数据一致性。

Redis通过多种策略和机制来保证缓存数据库的一致性。

Cache Aside模式‌:这是最常见的策略,读操作时先查询缓存,如果缓存命中则返回数据;如果缓存未命中,则从数据库读取数据并写入缓存。写操作时,先更新数据库,然后删除缓存,确保缓存中的数据无效化。‌

异步更新和同步机制‌:Redis可以通过异步更新机制减少对数据库性能的影响,但可能带来一定的延迟。使用Redis事务​​​​​​​可以将多个操作封装为一个原子操作,确保它们要么全部成功,要么全部失败。‌

分布式锁与事务‌:使用分布式锁确保操作的原子性和互斥性,防止多个客户端同时更新同一数据导致的冲突。

主从同步‌:在Redis Cluster中,主节点的数据变化会同步到从节点,保证数据的一致性。

实际项目中,当时采用的阿里的canal组件实现数据同步:不需要更改业务代码,部署一个canal服务。canal服务把自己伪装成mysql的一个从节点,当mysql数据更新以后,canal会读取binlog数据,然后在通过canal的客户端获取到数据,更新缓存即可。

5、Redis的持久化方式。

Redis有两种持久化的方式,RDB和AOF两种。一种是快照模式,一种是追加到文件上的模式。

6、什么是Redis的主从结构?

Redis主从结构是一种数据复制模式,其中一个Redis服务器(主节点)与其他Redis服务器(从节点)进行数据同步。主从结构可以提供以下功能:

数据冗余存储:主从结构可以用于数据冗余存储,以防止数据丢失。

读写分离:主节点负责处理写操作,从节点可以用于处理读操作,分担主节点压力。

高可用和故障转移:当主节点出现故障时,可以有一个或多个从节点提升为新的主节点,维护服务的可用性。

7、关于如何实现共享资源被互斥访问,就会用到分布式锁,什么是分布式锁?

在本地场景中,使用JDK自带的synchronized可以实现本地加锁。在商品抢购的场景中,一个商品为了防止超卖,就设定了分布式锁这么一个概念,多个线程中,只有一个线程可以拿到对应的锁。

8、redis如何实现分布式锁?

在 Redis 中, SETNX 命令是可以帮助我们实现互斥。基础命令,释放锁的话,直接通过 DEL 命令删除对应的 key。

9、Redis集群有几种方案。

主从复制、哨兵模式、Redis分片集群.

主从复制:一主多从,主负责写,从负责读。写后同步给从节点。

哨兵模式:定期检查主节点是否故障,如果故障,从节点升为主节点继续提供服务。

Redis分片集群:Redis集群引入了哈希槽,将数组分散在不同节点中,通过hash去找。

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

1、Redis是用C语言写的,比较快。

2、Redis是单线程服务,所以比较快。

11、Redis给缓存数据设置过期时间有什么用?

内存是很珍贵的资源,一般设置时间为1、5、15分钟的过期时间,具体视业务来定。

12、什么是Redis事务,保证一次执行的命令。

Redis 事务提供了一种将多个命令请求打包的功能。然后,再按顺序执行打包的所有命令,并且不会被中途打断,用得非常少。

​​​​​​​

13、什么是hotkey?

指有一些key,访问次数很多。通过拆分hotkey的方式,使得key落在不同的redis集群中,防止redis性能下降。

redis-给缓存数据设置过期时间有什么用">


http://www.ppmy.cn/ops/149385.html

相关文章

在php中,Fiber、Swoole、Swow这3个协程都是如何并行运行的?

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…

js装饰器模式

装饰器模式是一种结构型设计模式,它允许你在不改变对象结构的情况下,动态地给对象添加新的行为或职责。 装饰器模式通过创建一个装饰器类,来包装原始对象,并在不改变原始对象的基础上,为其添加新的功能。装饰器类和原始…

Win11 上使用 Qume 搭建银河麒麟V10 arm版虚拟机

安装全程需要下载3个文件,可在提前根据文章1.1、2.1、2.2网址下载。 1 QEMU软件简介与安装流程 QEMU(Quick Emulator)是一个开源软件,可以模拟不同的计算机硬件行为(如模拟arm架构),并可以创建…

Ceph分布式存储集群,不仅仅是一个简单的对象存储解决方案

Ceph 作为 OpenStack 的存储后端 块存储(Cinder 后端) Ceph 的 RBD(RADOS Block Device)模块作为 OpenStack Cinder 服务的后端,为虚拟机提供块级别的存储资源。RBD 支持快照、克隆和恢复等功能,能够满足虚…

Elasticsearch—索引库操作(增删查改)

Elasticsearch中Index就相当于MySQL中的数据库表 Mapping映射就类似表的结构。 因此我们想要向Elasticsearch中存储数据,必须先创建Index和Mapping 1. Mapping映射属性 Mapping是对索引库中文档的约束,常见的Mapping属性包括: type:字段数据类…

解决VMWare虚拟机“无法获取vmci驱动程序版本”的问题

打开虚拟机却提示“无法获得vmci驱动程序的版本:句柄无效”,导致虚拟机无法启动。 下面为大家详细介绍一下打开虚拟机提示“无法获得vmci驱动程序的版本:句柄无效”的解决方法。 找到虚拟机的存放路径,打开该路径,找到…

苹果手机(IOS系统)出现安全延迟进行中如何关闭?

苹果手机(IOS系统)出现安全延迟进行中如何关闭? 一、设置二、隐私与安全性三、失窃设备保护关闭 一、设置 二、隐私与安全性 三、失窃设备保护关闭

怎麼在iPhone iOS(Wi-Fi/蜂窩數據)上查找IP地址?

在排除網路故障和設置代理時,都需要查找iPhone的IP地址。本教程將介紹查找IP地址的步驟,包括連接到Wi-Fi和使用蜂窩數據。 IP地址是設備連接到網路時分配的唯一編號,允許iPhone與其他線上設備通信。 公共 IP 地址:由ISP分配並用…