redis学习小结(面试常见知识点)

Redis面试常见考点 ​ 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。一般都是一主多从,主节点负责写数据,从节点负责读数据。 阅读详情

是什么

redis是一个key-value的nosql数据库 常用作持久化数据库的缓存 数据都在内存(也可持久化)

数据结构

以下的key都以name作为例子

string

常用命令

set name a

set name a ex 60

set name a px 60000

setnx name a  分布式锁

get name 

实现底层结构

简单动态字符串

list

常用命令

lpush name a b c

lpop name

rpush name a b c

rpop name 

lrange name 1 3

实现底层结构

quicklist(代替了双向链表和压缩列表)

hash

常用命令

hset name a 1

hgetall name

hget name a 

实现底层结构

哈希表和listpack(代替压缩列表)

set

常用命令

sadd name a b c d 

srem name a b c 

smembers name

实现底层结构

哈希表和整数集合

zset

常用命令

zadd name 500 a 1000 b

zrem name  a b

zrange name 1 100

底层实现结构

listpack和跳表

bitmap

常用命令

setbit name 1 0

getbit name 1

bitcount name 1 100

底层实现结构

二进制数组

stream常用命令

xadd name * group 11

xread streams name msgid

底层实现结构

消息队列

底层实现结构

简单动态字符串

  1. len 保存了SDS保存字符串的长度
  2. alloc 分配给字符数组的空间长度
  3. flags 用来表示不同类型的sds
  4. buf[] 数组用来保存字符串的每个元素

双向链表

quicklist

双向链表+压缩列表的组合

listpack

压缩列表

压缩列表(ziplist)是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。

压缩列表的原理:压缩列表并不是对数据利用某种算法进行压缩,而是将数据按照一定规则编码在一块连续的内存区域,目的是节省内存

哈希表

解决哈希冲突 链地址法

 扩容和收缩  过程是渐进式rehash

什么叫渐进式 rehash?也就是说扩容和收缩操作不是一次性、集中式完成的,而是分多次、渐进式完成的。如果保存在Redis中的键值对只有几个几十个,那么 rehash 操作可以瞬间完成,但是如果键值对有几百万,几千万甚至几亿,那么要一次性的进行 rehash,势必会造成Redis一段时间内不能进行别的操作。所以Redis采用渐进式 rehash,这样在进行渐进式rehash期间,字典的删除查找更新等操作可能会在两个哈希表上进行,第一个哈希表没有找到,就会去第二个哈希表上进行查找。但是进行 增加操作,一定是在新的哈希表上进行的

整数数组

跳表

底层还是链表但是每个结点有多层

 链表中的每个节点都包含两个指针,一个指向同一层的下一个链表节点,另一个指向下一层的同一个链表节点

1. 搜索:

从最高层的链表节点开始,如果比当前节点要大和比当前层的下一个节点要小,那么则往下找,也就是和当前层的下一层的节点的下一个节点进行比较,以此类推,一直找到最底层的最后一个节点,如果找到则返回,反之则返回空。

2. 插入:

首先确定插入的层数,有一种方法是假设抛一枚硬币,如果是正面就累加,直到遇见反面为止,最后记录正面的次数作为插入的层数。当确定插入的层数k后,则需要将新元素插入到从底层到k层。

3. 删除:

在各个层中找到包含指定值的节点,然后将节点从链表中删除即可,如果删除以后只剩下头尾两个节点,则删除这一层。

比平衡树的优势

redis架构

redis不支持事务回滚 

网络模型使用Io复用

 线程模型命令的执行单线程无锁

加上都是在内存操作 这也是 redis很快的原因

redis的事务不太好用加上也是单线程 建议都有lua脚本

网络io模型(指用户进程读取socket数据时的交互模型)

同步阻塞模型(单个socket)

 检测socket 如果没有数据则阻塞 直到当前的socket有数据才返回

同步非阻塞(单个socket)

检测socket 如果当前sokcet无数据就返回error 有数据则返回数据 

io多用复用(同步 可阻塞和非阻塞)(多个socket)(redis使用这个)

select poll epoll

select/poll

轮询访问多个socket

内核空间如果有数据了 则把所有的socket拷贝到用户空间 然后轮询一遍所有socket 找到数据

如果内核空间没有数据 则根据是否阻塞返回空或者阻塞

select受最大文件描述符影响1024 poll则没有

都是将fd(文件描述符)列表从用户空间拷贝到内核空间 内核空间检测到有socket有数据则给对应的socket标记 再从内核空间拷贝到用户空间 然后再遍历一遍检测有数据的sokcet  

epoll 

内核空间把有数据的socket放入到就绪队列 然后用户态下获取队列数据 

在内核空间申请内存 存入sokcet用红黑树保存 当有数据时会放入记录就绪事件队列 返回给用户空间

整个过程没有数据的时候根据是否阻塞 返回空或者阻塞 好处是少了数据的拷贝和sokcet的遍历

水平触发:在水平触发模式下,只要文件描述符对应的内核缓冲区中有数据可读,epoll_wait 就会持续将该文件描述符作为有事件发生的文件描述符返回。也就是说,即使应用程序在一次 epoll_wait 返回后只读取了部分数据,下次调用 epoll_wait 时,如果缓冲区中还有剩余数据,它依然会将该文件描述符标记为可读事件发生

边缘触发:在边缘触发模式下,只有当文件描述符的可读状态发生变化(例如从无数据可读变为有数据可读)时,epoll_wait 才会将该文件描述符作为有事件发生的文件描述符返回。如果应用程序在一次 epoll_wait 返回后没有一次性将缓冲区中的数据全部读取完,后续即使缓冲区中还有数据,epoll_wait 也不会再将该文件描述符标记为可读事件发生,直到有新的数据到达,缓冲区状态再次发生变化。

信号驱动io(同步)(单个socket)

内核空间有数据后 内核向用户进程发信号 用户进程再执行io的read取socket的数据

异步io

socket有数据后 直接拷贝数据到用户空间 再通知用户去读取数据 进程不需要操作io的read

持久化

redis持久化有两种 rdb和aof

RDB

rdb就是以生成快照的形式保存到硬盘

RDB的优点:

1、存储的快照是压缩格式,占用内存极小。

2、数据恢复的速度很快。

RDB的缺点:

1、不能实时

2、每次调用bgsave命令都会调用fork子进程,这是重量级操作,执行成本高。

AOF

每执行一次修改数据命令,都会将该命令追加到appendonly.aof文件中(先写入os cache,然后通过fsync刷盘)

redis的集群

主从复制 指将一台Redis服务器的数据,复制到其他的Redis服务器

全量复制、增量复制

全量复制 第一次同步的时候,复制全部的数据

在这里插入图片描述

增量复制

把主从库 网络断链 的时候,从库未收到的数据 同步给从库

在这里插入图片描述

1主从模式

可以一主多从

缺点是容灾不好 主机宕机了

脑裂问题

2哨兵模式

 Redis哨兵机制

在主从复制实现之后,如果想对master进行监控,Redis提供了一种哨兵机制,哨兵的含义就是监控Redis系统的运行状态,并做相应的响应。

 哨兵的功能

其主要的功能有以下两点:
(1)监控所有Redis节点是否正常运行;
(2)master故障后可以通过投票机制,从slave中选举出新的master,保证集群正常运行。
在一个一主多从的集群中,可以启用多个哨兵进行监控以保证集群足够稳健,这种情况下,哨兵不仅监控主从服务,哨兵之间也会相互监控,建议哨兵至少3个并且是奇数。

哨兵的任务

哨兵主要用于管理多个Redis服务器,主要有以下三个任务:
(1)监控:哨兵会不断的检测master和slave之间是否运行正常;
(2)提醒:当监控的某个Redis出现问题,哨兵可以通过API向管理员或其他应用程序发送通知;
(3)故障迁移:当一个master不能正常工作时,哨兵会开始一次自动故障迁移操作,它会将失效master的其中一个slave提升为master,并让失效master和其他slave该为复制新的master,当客户端试图连接失效的master时,集群也会向客户端返回新的master地址,使得集群可以使用新的master代替失效的master。

 Redis哨兵的工作原理

哨兵是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议来接收关于Master是否下线的信息,并使用投票协议来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。
每个哨兵会向其它哨兵、master、slave定时发送消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂。若“哨兵群”中的多数sentinel都报告某一master没响应,系统才认为该master"彻底死亡",通过一定的vote算法,从剩下的slave节点中,选一台提升为master,然后自动修改相关配置。
虽然哨兵释出为一个单独的可执行文件 redis-sentinel ,但实际上它只是一个运行在特殊模式下的 Redis 服务器,你可以在启动一个普通 Redis 服务器时通过给定 --sentinel 选项来启动哨兵

缺点不好扩容

raft分布式一致性算法

Raft 算法的领导者选举机制具有以下过程:

初始状态:当一个 Raft 集群启动时,所有节点都处于 Follower 状态。每个节点都等待接收来自 Leader 的心跳消息。
Follower 成为 Candidate:如果一个 Follower 在一段时间内未收到来自 Leader 的心跳消息,它将成为 Candidate,并开始发起选举。
发起选举:一旦成为 Candidate,节点将增加自己的当前任期号(term),然后发送包含该任期号和候选人 ID 的请求给其他节点。每个节点只能投一次票,因此在一次选举中只会有一个 Candidate 获胜。
投票过程:每个节点在收到来自 Candidate 的选举请求后,会根据以下条件进行投票决策:
如果该节点已经投过票给了其他 Candidate,并且该 Candidate 的任期号更大,则拒绝投票。
如果该节点的日志更新较新,没有落后于 Candidate 的日志,则支持该 Candidate 并重置自己的选举超时计时器。
选举胜出条件:一个 Candidate 可以成为新的 Leader,需要满足以下条件之一:
收到了大多数节点的选票,并且得票数超过了一半。
在选举过程中,其他节点成为了 Leader(新的 Leader 后来者居上)。
成为 Leader:当一个 Candidate 赢得选举后,它将成为新的 Leader。它会发送心跳消息给所有节点来维持自己的领导地位,并准备接收客户端的操作请求。
通过这样的领导者选举机制,Raft 算法保证了集群中只存在一个 Leader,使得整个系统能够稳定运行。而选举过程中使用的随机化和选举超时机制,确保了快速选出新的 Leader,从而减少系统的不可用时间。

3cluster模式

主要是解决扩容的文件 

对redis进行分片

   Redis3.0加入了Redis的集群模式,实现了数据的分布式存储,对数据进行分片,将不同的数据存储在不同的master节点上面,从而解决了海量数据的存储问题。

        Redis集群采用去中心化的思想,没有中心节点的说法,对于客户端来说,整个集群可以看成一个整体,可以连接任意一个节点进行操作,就像操作单一Redis实例一样,不需要任何代理中间件,当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node。

        Redis也内置了高可用机制,支持N个master节点,每个master节点都可以挂载多个slave节点,当master节点挂掉时,集群会提升它的某个slave节点作为新的master节点。

 如上图所示,Redis集群可以看成多个主从架构组合起来的,每一个主从架构可以看成一个节点(其中,只有master节点具有处理请求的能力,slave节点主要是用于节点的高可用)

Redis集群通过分布式存储的方式解决了单节点的海量数据存储的问题,对于分布式存储,需要考虑的重点就是如何将数据进行拆分到不同的Redis服务器上。常见的分区算法有hash算法、一致性hash算法

一致性hash算法:为每一个节点分配一个token,构成一个哈希环;查找时先根据key计算hash值,然后顺时针找到第一个大于等于该哈希值的token节点。优点是在加入和删除节点时只影响相邻的两个节点,缺点是加减节点会造成部分数据无法命中,所以一般用于缓存,而且用于节点量大的情况下,扩容一般增加一倍节点保障数据负载均衡
 

 Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作
 

redis与mysql一致性问题

redis和mysql数据保持一致的做法

1延迟双删   先删除缓存再把数据写入数据库过了一段时间(500ms)再删缓存

2使用canal开源 调用binlog来更新缓存

3使用消息队列kafka等

4直接修改缓存 缓存不过期 然后redis更新到数据库

5先更新数据库再删redis

但是删除redis可能失败 需要这样做

缓存穿透

不存在的数据 redis中找不到去找数据库

解决方法

1保存null值

2布隆过滤器 

缓存击穿

一个记录过期了 大量访问这个数据 直接访问数据库

解决方法

1设置缓存不过期

2加锁 只有一个线程可以访问数据库 当数据回写到缓存后 其他线程访问缓存

缓存雪崩

同时大量的缓存过期 导致大量请求访问数据库

解决方法

1随机设置缓存过期的时间

2降级或者熔断

redis过期策略

惰性过期  访问这个key再判断是否过期

定期过期 过一段时间扫描一部分Key 判断是否过期

定时过期

redis使用的是惰性过期+定期过去

redis内存淘汰策略

1.noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)

2.allkeys-lru:从所有key中使用LRU算法进行淘汰(LRU算法:即最近最少使用算法)

3.volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰

4.allkeys-random:从所有key中随机淘汰数据

5.volatile-random:从设置了过期时间的key中随机淘汰

6.volatile-ttl:在设置了过期时间的key中,淘汰过期时间剩余最短的

当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和noeviction一样返回错误

常见问题

大key

拆key

分片 

热数据和冷数据分开

热key

多级缓存

主从复制

分片

一文搞定Redis面试,附Redis面试大纲+常见Redis面试题 本文转载自:一文搞定Redis面试,附Redis面试大纲+常见Redis面试题 一、基础篇 快速上手 ①. 什么是redis ②. 为什么使用redis ③. 安装 ④. 基本使用(常见数据结构的命令) Java操作redis ①. Jedis ②. SpringBoot 启动redis的方式 ①. 配置文件 ②. 生产环境启动方案 二、进阶篇 redis实现session共享 redi... 阅读详情

相关推荐

HyperLedger Fabric实战(一):基础环境构建

简介 本文将介绍从一台裸机上面如何构建出一个可用的Fabric网络(单机版,非测试网络)。 基础环境构建 Fabric组件安装

yindarui 1万+

Redis面试常问知识点总结

​ 缓存穿透指的是查询一个缓存和数据库内都不存在的数据,无法将查询数据存入缓存,所以每次查询都需要访问数据库,数据库在高并发的情况下可能会导致数据库宕机,这种情况大概率是遭到了攻击​ 缓存击穿指的是对于设置了过期时间的key,在这个key过期的恰好有大量的并发请求,这些请求会直接访问数据库,这些高并发的请求可能会瞬间让数据库宕机​ 缓存雪崩指的是设置缓存时,大量缓存设置了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到数据库,数据库瞬间压力激增导致雪崩。

Sabotd的博客 2523

解密美团外卖API:mtgsig和waimai_sign参数生成原理与Python实现

本文深入解析了美团外卖API中核心风控参数mtgsig和waimai_sign的生成原理与实现方法。文章详细拆解了waimai_sign作为业务数据签名、mtgsig作为请求环境签名的不同角色与生成逻辑,并通过Python代码示例演示了如何通过逆向工程、Frida动态Hook等技术手段模拟签名生成过程,为开发者理解移动端API安全机制提供了实战参考。

weixin_29325515的博客 550

Redis 常见面试知识点小结

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!部分截图:加入社区:https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。

2401_86402065的博客 929

Linux命令行入门:从零掌握服务器运维与Shell脚本基础

在信息化时代,操作系统是数字世界的基石,而终端命令行则是高效驾驭服务器的核心技能。无论是软件部署、服务监控还是故障排查,掌握基于Shell的指令操作都能大幅提升工程效率。从最基础的文件目录管理、文本处理,到权限控制、进程监控与网络调试,命令行提供了一套强大且可自动化的操作范式。尤其对于运维工程师和开发者而言,理解管道、重定向以及脚本化任务,意味着将重复劳动转化为可复用的自动化流程。本文从环境准备讲起,系统梳理常用Linux命令的实际场景与输出验证,并延伸至Shell脚本编写与定时任务,帮助初学者快速建立从操

weixin_30522983的博客 255

spoon工具的常用基础操作

先创建一个作业,这个作业流程,包括进行设置变量转换,查询结果输出转换,方便后续循环。整个流程写完后,执行作业5_执行整个流程,成功后,可以在数据库查看结果。,新建一个转换,excel表输入然后复制记录到结果,保存转换文件。这三个用户下 都有一张emp表 分别是 三个部门的用户信息。,新建一个数据库连接,变量命名用户名和密码。成功执行后,可以到保存的excel位置进行查看。emp表输入,可以进行预览查看数据有没有过来。输出到一直excel表,运行结果输出。,新建一个转换,拖拽。

qq_43583887的博客 5831

【面试题】Redis篇-常见面试题p1

【面试题】Redis篇-常见面试题p1 ????备战实习,会定期的总结常考的面试题,大家一起加油! ???? ???? ???? ????往期文章: ????【面试题】计算机网络篇-10道常见面试题p1 ????【面试题】JVM篇-10道常见面试题p1 ????【面试题】Java并发篇-10道常见面试题p1 ????【面试题】Java基础篇-常见面试题总结p1 ????【面试题】Java基础篇-常见面试题总结p2 ????【面试题】MySQL常见面试题合集 ????【面试题】Java基础篇-常见面试题总

小皮皮LL的博客 3692

杰理外挂flash使用教程(四):制作fat32文件系统格式的资源文件

本文档提供了FAT文件系统镜像生成与资源打包的完整指南,包含两种实现方案:推荐的WSL/Ubuntu环境方案和Windows原生方案。详细说明了从创建空白镜像、格式化、资源文件复制到最终打包为设备可用的res.bin文件的完整流程,并对比了FAT32与FAT16的特性差异。文档还包含关键文件说明、使用注意事项和典型应用场景,适用于嵌入式系统开发、固件升级等场景。

qq_42014563的博客 1339

Redis常见面试问题总结

Redis常见面试问题及分析

雨田说码 5920

ABAP 7.40 新语法介绍系列之六:使用 FILTER 关键字对 ABAP 内表进行过滤

笔者之前写过的关于 ABAP 740 新语法的文章:本文介绍另一个新的关键字:FILTER.FILTER 是 ABAP 740 中引入的一个关键字,用于简化数据操作,它能够将内部表(Internal Table)中的数据按特定的条件进行过滤,并生成一个新的内部表。FILTER 的引入旨在使代码更加现代化和高效,尤其是在面对大量数据需要过滤的情况下。传统上,开发人员可能需要使用 LOOP AT 结合条件判断来实现,但使用 FILTER 关键字后,代码显得更加简洁且易于维护。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1167

交通仿真软件:SUMO_(13).Python脚本与TraCI接口

通过TraCI接口,用户可以实现与SUMO仿真器的实时交互,获取和控制交通数据。本文档详细介绍了如何使用Python脚本与TraCI接口进行交互,包括基本的设置、数据获取和控制方法。此外,还展示了几个高级应用示例,如交通流优化、多代理系统、车辆路径规划和车辆行为模拟。这些示例可以帮助用户更好地理解如何利用TraCI接口进行复杂的交通仿真和分析。希望这些内容对您有所帮助,如果您有任何问题或需要进一步的帮助,请参考SUMO的官方文档或社区支持。

kkchenjj的博客 990

常见 Redis 面试题

面试时回答要有思路先定义概念(什么是 X,X 有什么作用)。然后阐述原理(原理模型、实现思路)。最后给出工程实践(常见配置、常用命令、注意事项、场景案例)。切忌空讲概念,一定要结合“Redis 在生产中怎样使用”来落地回答,才更能打动面试官。祝你面试顺利,通过率飙升!

chenxuefeng_accp的专栏 3284

【DaVinci Configurator专题】-2-将CAN 2.0或CANFD Matrix的Arxml/DBC文件导入到CFG

共9页 目录 1 打开DaVinci Configurator,导入Arxml文件 2 解决导入Arxml文件后可能会出现的一些错误 3 验证CFG的配置 4 根据CFG的配置生成代码 5 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: Open the Input Files Assistant Complete update process Update ECU configurati

「汽车电子助手」的博客 6122

【面试】Redis 常见面试题

Redis 常见面试题

Elena's Blog 1599

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Redis面试知识点总结

Redis知识点总结

m0_65558082的博客 1043

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Redis 面试核心知识点总结,一文读懂 Redis!

不同的数据类型适用于不同的应用场景,如 String 常用于存储简单的键值对,List 适用于实现队列和栈,Hash 适合存储对象等。这种方式主要用于解决在更新数据库后,缓存中的旧数据可能导致的数据不一致问题。通过数据分片将数据存储在不同的节点上,节点间通过 Gossip 协议进行通信和数据同步,实现了集群的水平扩展和高可用性。Redis 事务是一组命令的集合,它可以保证这组命令在执行过程中不会被其他客户端的命令打断,即这些命令要么全部执行,要么全部不执行。(本文大部分内容也总结于这篇文章)

2403_85207115的博客 1270

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Redis常见面试题总结

listpack 中每个节点不再像压缩列表一样包含前一个节点的长度,但还是用一块连续的内存空间来紧凑地保存数据,并且为了节省内存的开销,listpack 节点会采用不同的编码方式保存不同大小的数据。当我们向 listpack 加入一个新元素的时候,不会影响其他节点的长度字段的变化,从而避免了压缩列表的连锁更新问题。避免额外的检查开销,AOF 记录日志不会对命令进行语法检查;在命令执行完之后再记录,不会阻塞当前命令的执行。这样也带来了风险如果刚执行完命令 Redis 就宕机会导致对应的修改丢失;

夏日 の blog 2978

程序员面试必备之Java面试题:Redis常见面试题汇总!

掌握这些面试题能帮助您在Java面试中脱颖而出。重点复习数据类型、持久化、事务和缓存问题,结合实际项目经验(如使用Redis优化电商缓存)。练习时,可搭建本地Redis环境,用Java代码模拟场景。记住,面试中突出解决实际问题的能力,如如何用Redis降低数据库负载。祝您面试顺利!如有具体问题,欢迎进一步提问。另外,给大家分享一个220万字面试题题库,希望大家能够加油学习一下。

程序员高级码农的博客 1268

Redis常见面试题

从集合里面随机获取元素交集、并集、差集的操作,比如交集,可以把两个人的粉丝列表整一,或者是用户的喜好标签等。key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮,也就是一个key过期,一直访问数据库。一个一定不存在缓存及查询不到的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。

2403_87486006的博客 2005

redis常见原理面试

redis核心机制及面试一、面试1 Redis有哪些数据结构?2 使用过Redis分布式锁么,它是什么回事?3 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?4 使用过Redis做异步队列么,你是怎么用的?5 如果有大量的key需要设置同一时间过期,一般需要注意什么?6 Redis如何做持久化的?7 Pipeline有什么好处,为什么要...

weixin_35720385的博客 1602

目前最全的Redis知识点及面试题汇总

Redis(全称为REmote DIctionary Server)是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map),...

shuningzhang的专栏 6153

Redis常见面试题总结(上)

Redis是一款基于内存的NoSQL数据库,以其高性能和丰富的数据类型著称。它支持多种数据结构(String、Hash、List等)、持久化、事务和集群方案,采用单线程事件循环和I/O多路复用技术实现高并发处理。相比Memcached,Redis功能更全面,支持数据持久化和集群模式。Redis广泛应用于分布式缓存、限流、消息队列等场景,还能通过Module机制扩展功能(如RediSearch实现搜索)。虽然内存成本较高,但其出色的性能和丰富的应用场景使其成为分布式系统的首选缓存方案。

tym3125536957的博客 1762

Redis(十二)拓展:Redis的面试题整理和解答

前言 关于Redis的学习到此就告一段落,其中关于特别的点,如:布隆过滤器、分布式锁 我会另开两篇文章来讲解的! 学了新的知识,肯定要立马使用起来,我个人的习惯是:看面试题,查漏补缺! 事先申明,以下所有面试题和答案都是网上找的,只推荐一些比较好的供大家自己查阅! 面试题 ①Redis常见面试题点击跳转 ②Redis面试题(2020最新版)点击跳转 ③2021年最新redis面试题大全及答案(收藏)点击跳转 ④Redis面试题总结点击跳转 ⑤《进大厂系列》系列-Redis常见面试题点击跳转 Redis扩展:

大鱼的博客 3万+
上一篇: mysql学习总结
下一篇: golang学习小结
卜睵·-嗳
博客等级 码龄5年 76粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值