![](https://img-blog.csdnimg.cn/e7926f513aea4fefb471436cb1da7cb2.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Redis 面试题分享
文章平均质量分 80
在Redis的面试中,面试官通常会考察候选人对Redis的理解、应用经验以及问题解决能力。以下是一个Redis面试的分享介绍,帮助你了解在Redis面试中可能会遇到的问题和考察点。
之乎者也·
机车疾驰在路上,代码飞舞在指尖,热血与逻辑交织,创造属于我的数字世界。
展开
-
JAVA面试题分享五百六十五:为啥Redis用哈希槽,不用一致性哈希?
虚拟节点可以理解为逻辑节点,不是物理节点。假设在hash环上,引入 32 个虚拟 reids节点。如何找到物理节点呢?办法是增加一次映射:虚拟节点到物理节点的映射。假设加上一层 32 个虚拟 redis节点到 4个 redis 物理节点映射。一种非常简单的map参考映射方案假设物理节点 redis 3被移除,那么,把redis 3负责的逻辑节点,二次分配到其他三个物理节点就行了无论如何,通过虚拟节点,就会大大减少了 一致性hash 算法的数据倾斜/数据不平衡。原创 2024-02-22 19:56:15 · 1683 阅读 · 0 评论 -
JAVA面试题分享五百五十七:Redis大key多key拆分方案
使用bitmap或布隆过滤器的场景,往往是数据量极大的情况,在这种情况下,Bitmap和布隆过滤器使用空间也比较大,比如用于公司userid匹配的布隆过滤器,就需要512MB的大小,这对redis来说是绝对的大value了。一:key 本身就有很强的相关性,比如多个key 代表一个对象,每个key是对象的一个属性,这种可直接按照特定对象的特征来设置一个新Key——Hash结构, 原先的key则作为这个新Hash 的field。这样算出三个key 的桶分别是 1 , 2, 2。原创 2024-02-20 23:00:23 · 1063 阅读 · 0 评论 -
JAVA面试题分享四百七十九:Redis优雅键值设计与BigKey处理指南
使用 DEL 命令:尽管 DEL 命令是同步的,可能会对性能产生一些影响,但它仍然是删除键的一种方法。原创 2024-02-06 12:43:05 · 854 阅读 · 0 评论 -
JAVA面试题分享四百七十四:探究Redis监控
当下互联网业务愈加庞大,Redis作为时下被运用的最频繁的技术中间件之一,其各性能指标的稳定性对现实业务的影响不言而喻。本文通过代码和图片示例,首先介绍了Redis监控的背景,然后介绍了Redis的主要监控指标,紧接着又介绍了三种当下流行的Redis监控方式,希望能够对Redis实现高性能、高效率的监控,进而使我们的产品或业务既安全又稳定,以便更好的服务消费者,服务大众。原创 2024-02-05 18:12:40 · 894 阅读 · 0 评论 -
JAVA面试题分享四百三十:AOP+Redisson 延时队列,实现缓存延时双删策略
关于缓存和数据库中的数据保持一致有很多种方案,但不管是单独在修改数据库之前,还是之后去删除缓存都会有一定的风险导致数据不一致。而延迟双删是一种相对简单并且收益比较高的实现最终一致性的方式,即在删除缓存之后,间隔一个短暂的时间后再删除缓存一次。这样可以避免并发更新时,假如缓存在第一次被删除后,被其他线程读到旧的数据更新到了缓存,第二次删除还可以补救,从而时间最终一致性。睡眠的方式做延时,也有借助第三方消息中间件做延时消息等等,本文基于。实现延时双删的方案也有很多,有本地用。中的延时队列进行实验。原创 2024-02-03 00:00:45 · 653 阅读 · 0 评论 -
架构设计内容分享(五十九):Redis怎么做高可用、高并发架构?
让我们回顾一下,我们是如何演进一个稳定且高性能的 Redis 集群的。首先,在使用最简单的单机版 Redis 时,我们遇到了 Redis 故障宕机后数据无法恢复的问题,因此我们引入了「数据持久化」,将内存中的数据保存到磁盘上,以便 Redis 重启后能快速恢复数据。在进行数据持久化时,我们面临如何更高效地将数据保存到磁盘的问题。后来我们发现 Redis 提供了 RDB 和 AOF 两种方案,分别对应数据快照和实时命令记录。当对数据完整性要求不高时,可以选择 RDB 持久化方案;原创 2023-12-24 09:53:55 · 796 阅读 · 0 评论 -
JAVA面试题分享三百五十四:当Redis碰上@Transactional
现象:每天早上客服人员在后台创建客服事件时,都会创建失败。当我们重启这个微服务后,后台就可以正常创建了客服事件了。到第二天早上又会创建失败,又得重启这个微服务才行。初步排查:创建一个客服事件时,会用到 Redis 的递增操作来生成一个唯一的分布式 ID作为事件 id。而恰巧每天早上这个递增操作都会返回null,进而导致后面的一系列逻辑出错,保存客服事件失败。当重启微服务后,这个递增操作又正常了。那么排查的方向就是 Redis 的操作为什么会返回 null 了,以及为什么重启就又恢复正常了。原创 2024-01-27 10:39:38 · 1034 阅读 · 0 评论 -
架构设计内容分享(一百七十四):Redis支付交易系统应用实践
在服务端业务中,当我们想要以准实时的速度访问快速变动的数据流时,Redis这样的键值数据库是非常好选择。通过字符串、列表等多种数据类型,Redis对键值对模式进行了扩展,它既提供了极其快速的内存数据集操作,又可以在运行时轻松地将这些数据持久化到磁盘上面,本文主要介绍了一些在网易支付的业务场景中Redis的使用。Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。原创 2024-01-29 22:13:21 · 996 阅读 · 0 评论 -
JAVA面试题分享三百三十四: Redis 延时毛刺问题定位
下次遇到同步调用场景下的延迟毛刺,就可以选择合适的工具根据函数执行耗时快速定位。然而采用 streaming 模式的异步请求/响应的延迟问题,仍然需要再深入学习探索。原创 2024-01-25 23:03:06 · 885 阅读 · 0 评论 -
架构设计内容分享(一百五十五):Redis 异地多活的演进历程
第二代多活基于 Kedis 架构,对 Redis-server 进行改造,可以把增量数据从 Redis 直接写入本机房的 MQ 中,由对端机房的 consumer 来消费 MQ,consumer 将数据写入对端 Redis 中。如果业务层做了单元化部署,则不会出现这种问题。为了解决这个问题,我们对 Redis 的 aof 机制进行了改造,可以在网络故障时,增量数据都堆积在 Redis 的磁盘上,在网络恢复后,syncer 从 Redis 里拉取增量 aof 数据发送到对端机房,避免数据丢失。原创 2024-01-24 09:05:29 · 948 阅读 · 0 评论 -
JAVA面试题分享三百零二:同一份数据,Redis为什么要存两次?
在 Redis 中,有一种数据类型,当在存储的时候会同时采用两种数据结构来进行分别存储,那么 Redis 为什么要这么做呢?这么做会造成同一份数据占用两倍空间吗?原创 2023-12-18 18:20:10 · 818 阅读 · 0 评论 -
JAVA面试题分享二百九十一:如何保障 MySQL 和 Redis 数据一致性?
Cache-Aside Pattern(旁路缓存)模式,又叫旁路路由策略,在这种模式中,读取缓存、读取数据库和更新缓存的操作都是在应用程序中完成。此模式是业务系统最常用的缓存策略。旁路缓存又模式分为读缓存和写缓存。旁路缓存模式在读的时候,先读缓存,缓存命中的话,直接返回数据;如果缓存没有命中的话,就去读数据库,从数据库取出数据,放入缓存后,同时返回响应。Cache-Aside Pattern(旁路缓存)模式读操作流程,具体如下:step 1:应用程序接收用户的数据查询的请求;原创 2023-12-18 11:55:52 · 1046 阅读 · 0 评论 -
JAVA面试小结十七:redis的三种集群方式原来简介
当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。原创 2023-10-24 19:29:05 · 82 阅读 · 0 评论 -
JAVA面试题分享二百三十九:Redis-缓存三兄弟(穿透、击穿、雪崩)总结
bitmap(位图):相当于是一个以(bit)位为单位的数组,数组中每个单元只能存储二进制数0或1布隆过滤器作用:布隆过滤器可以用于检索一个元素是否在一个集合中。布隆过滤器是一种用于快速判断一个元素是否属于某个集合的数据结构,它通过牺牲一定的准确性来换取高效的查询速度。初始化:创建一个长度为m的位数组(bit array),并将所有位都初始化为0。同时选择k个不同的哈希函数。插入元素:对于要插入的元素x,使用k个哈希函数分别计算出k个哈希值(h1(x), h2(x), ..., hk(x))。原创 2023-12-14 11:58:24 · 1011 阅读 · 0 评论 -
JAVA面试题分享二百三十七:内存耗尽后Redis会发生什么?
作为一台服务器来说,内存并不是无限的,所以总会存在内存耗尽的情况,那么当 Redis 服务器的内存耗尽后,如果继续执行请求命令,Redis 会如何处理呢?原创 2023-12-14 09:51:30 · 861 阅读 · 0 评论 -
JAVA面试题分享二百三十四:Redis 经典业务问题
缓存击穿指的是缓存中没有但数据库中有的数据(一般是热点数据)在缓存失效的瞬间,同时有大量并发请求这个数据点,这些请求会直接穿透缓存,全部落到数据库上,造成数据库短时间内的高压力。使用互斥锁:对于同一个数据点,在缓存失效时,通过加锁或同步机制,保证不管有多少并发请求,只允许一个请求去数据库查询数据,并更新缓存,其他请求等待缓存被更新后直接从缓存中获取数据。缓存延迟双删:更新数据库数据后,先删除缓存,然后延迟一小段时间再次删除缓存,以确保请求在这段时间内若读取了旧数据,也会再次删除缓存,从而读到最新数据。原创 2023-12-14 09:10:40 · 972 阅读 · 0 评论 -
JAVA面试题分享二百三十三:SpringBoot AOP + Redis 延时双删功能实战
一、业务场景1、此时存在的问题2、解决方案3、为何要延时500毫秒?4、为何要两次删除缓存?二、代码实践三、测试验证四、代码工程及地址在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。请求一:A修改数据库数据 B修改Redis数据请求二:C修改数据库数据 D修改Redis数据并发情况下就会存在A —> C —> D —> B的情况❝。原创 2023-12-14 09:05:15 · 1004 阅读 · 0 评论 -
Redis面试题分享四十五:使用过 Redis 做异步队列么,你是怎么用的?
Redis 提供了多种数据结构,如 List、Pub/Sub 和 Sorted Set,这些数据结构都可以用于实现异步队列。原创 2023-11-14 11:27:52 · 104 阅读 · 0 评论 -
Redis面试题分享四十四:如果有大量的key 需要设置同一时间过期,一股需要注意什么?
总的来说,设置大量的 key 同时过期需要谨慎操作,并结合实际场景和需求进行合理的规划和调整。在实施过程中,保持对 Redis 的密切监控,确保其稳定性和性能。原创 2023-11-14 11:21:57 · 298 阅读 · 0 评论 -
Redis面试题分享四十三:假如 Redis 里面有1亿个key,其中有10w 个key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?
今天爱分享给大家带来假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?【解决办法】,希望能够帮助到大家。原创 2023-11-14 11:18:09 · 196 阅读 · 0 评论 -
Redis面试题分享四十二:MySQL 里有 2000w数据,redis 中只存 20w的数据,如何保中的数据都是热点数据?
其实这道题目考察的是大家对Redis的淘汰策略的掌握程度,在一个就是你的解题思想。原创 2023-11-14 11:12:43 · 398 阅读 · 0 评论 -
Redis面试题分享四十一:一个 Redis 最多能存放多少的 keys? List、Set、Sorted Set 他最多能存放多少元素?
在理论上,Redis 可以存储的 keys 的数量是受限于可用内存的大小的。然而,Redis 的数据结构会占用一些额外的内存,所以可用的 keys 的数量通常会比单纯的内存大小要少一些。总的来说,Redis 的数据结构可以非常灵活地支持大量的数据和元素,但是具体的限制会根据你的数据大小和你的使用方式而变化。如果你需要存储大量的数据,那么最好在实际使用中对你的数据进行基准测试,以确保你的使用方式可以满足 Redis 的性能要求。但实际上,最大的限制因素取决于服务器的物理内存大小和操作系统的限制。原创 2023-11-14 11:07:23 · 233 阅读 · 0 评论 -
Redis面试题分享三十五:使用过 Redlock 嘛?说说它的原理
RedlockRedlock:全名叫做 Redis Distributed Lock;即使用redis实现的分布式锁;使用场景:多个服务间保证同一时刻同一时间段内同一用户只能有一个请求(防止关键业务出现并发攻击);这个锁的算法实现了多redis实例的情况,相对于单redis节点来说,优点在于 防止了 单节点故障造成整个服务停止运行的情况;并且在多节点中锁的设计,及多节点同时崩溃等各种意外情况有自己独特的设计方法;原创 2023-11-12 15:39:23 · 456 阅读 · 0 评论 -
Redis面试题分享四十:都有哪些办法可以降低Redis 的内存使用情况呢?
Redis是一款高性能、非关系型的键值存储数据库。在使用Redis时,随着数据量的不断增长,需要考虑如何降低Redis的内存占用情况。下面将介绍Redis降低内存使用的常见方法。原创 2023-11-13 14:52:39 · 94 阅读 · 0 评论 -
Redis面试题分享三十九:什么是渐进式hash?
在Redis的具体实现中,使用了一种叫做。原创 2023-11-13 14:45:18 · 346 阅读 · 0 评论 -
Redis面试题分享三十八:什么是布隆过滤器?
这个元素可能存在于这个集合当中。这个元素一定不存在于这个集合当中。布隆过滤器(Bloom Filter)是1970年由布隆提出的。它用一个二进制向量和一些哈希计算函数来实现的。布隆过滤器可以用于检索一个元素是否在一个集合中。布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。原创 2023-11-13 11:31:20 · 290 阅读 · 0 评论 -
Redis面试题分享三十七:聊聊 Redis 的bitmap?
大家都知道redis的五种常用类型string、hash、list、set、zset 那除此之外,redis还有一些特殊类型,bitmap就属于其中一种,接下来就对bitmap做一下详细说明。Redis 的位图不是实际的数据类型,而是在字符串类型上定义的一组面向位的操作。因为字符串是二进制安全的blob,它们的最大长度为512 MB,所以可以设置2^32个不同的位。原创 2023-11-13 11:09:29 · 56 阅读 · 0 评论 -
Redis面试题分享三十六:怎么测试 Redis 的连通性?
Redis是一种开源的非关系型数据库,它提供了丰富的持久化特性,拥有高速访问和快速响应,因此被广泛应用于缓存、队列、分布式系统、基础架构等场景中。要进行系统测试,必须先验证Redis的连接性,以确保Redis能满足服务的要求。原创 2023-11-13 10:56:34 · 454 阅读 · 0 评论 -
Redis面试题分享三十四:使用过 Redisson 嘛?说说它的原理
分布式锁的整体实现很巧妙,借助lua脚本的原子性,实现了很多功能,当然redisson还有其它很多功能,比如为了解决主从集群中的异步复制会导致锁丢失问题,引入了redlock机制,还有分布式下的可重入锁等。原创 2023-11-12 15:25:24 · 441 阅读 · 0 评论 -
Redis面试题分享三十三:使用Redis分布式锁有哪些注意点呢?
Redis分布式锁,顾名思义,是一种基于Redis实现的分布式锁,主要解决分布式系统下多个节点同时访问同一资源时可能造成的数据竞争问题。Redis分布式锁可以在多个节点之间保证原子性、可重入性、互斥性等特性。本文介绍了Redis分布式锁的实现原理、优势,以及在使用过程中的要点和注意事项,希望能对大家在实际应用时有所帮助。Redis分布式锁尽管使用便捷、性能优越、功能强大,但也有诸多注意事项需要遵循,使用时需要谨慎,相信通过注意这些问题,大家在使用Redis分布式锁时一定能够事半功倍。原创 2023-11-12 13:29:33 · 77 阅读 · 0 评论 -
Redis面试题分享三十二:使用过 Redis 分布式锁嘛?
分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。「互斥性」: 任意时刻,只有一个客户端能持有锁。「锁超时释放」:持有锁超时,可以释放,防止不必要的资源浪费,也可以防止死锁。「可重入性」:一个线程如果获取了锁之后,可以再次对其请求加锁。「高性能和高可用」:加锁和解锁需要开销尽可能低,同时也要保证高可用,避免分布式锁失效。原创 2023-11-12 13:25:39 · 69 阅读 · 0 评论 -
Redis面试题分享三十一:Redis 事务相关的命令有哪几个?
如果发生宕机,进程奔溃等情况,可以使用redis-check-aof tool 修复append-only file,使服务正常启动,并恢复部分操作。------MULTI,EXEC,DISCARD才是显式开启并控制事务的常用命令,可类比关系型数据库中的 BEGAIN,COMMIT,ROLLBACK(事实上,差距很大);EXEC命令触发事务中所有命令的执行,因此,当客户端在事务上下文中失去与。------WATCH命令的使用是为了解决 事务并发 产生的不可重复读和幻读的问题(简单理解为给Key加锁);原创 2023-11-12 12:58:01 · 75 阅读 · 0 评论 -
Redis面试题分享三十:Redis 事务机制?
事务是指一个完整的动作,要么全部执行,要么什么也没有做。Redis 事务不是严格意义上的事务,只是用于帮助用户在一个步骤中执行多个命令。单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。Redis 事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。Redis 通过MULTI 、 DISCARD 、 EXEC 和 WATCH。原创 2023-11-11 15:36:40 · 51 阅读 · 0 评论 -
Redis面试题分享二十九:Redis 回收进程如何工作的?
Redis 使用了一种基于引用计数的内存回收机制,当一个对象需要被回收时,Redis 会遍历所有对象的引用计数,将引用计数为 0 的对象回收。当 Redis 的内存达到了指定的内存使用限制时,Redis 可以根据一些指标(例如对象访问时间、访问次数等)来判断哪些对象应该被清除,以释放更多的内存。惰性删除的优点是在Redis访问时才开始进行删除操作,可以保证Redis的高性能和低延迟,但也有缺点,因为只有在客户端尝试读取过期键时才会执行删除操作,导致一些数据可能会长时间占用着Redis的内存,影响性能。原创 2023-11-11 15:15:18 · 94 阅读 · 0 评论 -
Redis面试题分享二十八:Redis 如何做内存优化?
Redis是一款高性能的 key-value 存储系统,广泛被用于构建各种实时应用。在这些应用中,内存往往是Redis最重要的资源。因为Redis中的每一个key,以及它所相关联的值都需要在内存中保存。如果不小心使用过多的内存会导致Redis服务器停掉并且应用程序崩溃。Redis本身提供了一系列配置、算法和工具来实现内存优化。原创 2023-11-11 15:02:19 · 75 阅读 · 0 评论 -
Redis面试题分享二十七:Redis key 的过期时间和永久有效分别怎么设置?
Redis中有个设置时间过期的功能,即对存储在redis数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的token或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。redis对存储值的过期处理实际上是针对该值的键(key)处理的,即时间的设置也是设置key的有效时间。Expires字典保存了所有键的过期时间,Expires也被称为过期字段。四种处理策略。原创 2023-11-11 12:49:18 · 2214 阅读 · 0 评论 -
Redis面试题分享二十六:Redis 大 key 要如何处理?
大 key 并不是指 key 的值很大,而是 key 对应的 value 很大。String 类型的值大于 10 KB;Hash、List、Set、ZSet 类型的元素的个数超过 5000个当 AOF 写回策略配置了 Always 策略,如果写入是一个大 Key,主线程在执行 fsync() 函数的时候,阻塞的时间会比较久,因为当写入的数据量很大的时候,数据同步到硬盘这个过程是很耗时的。AOF 重写机制和 RDB 快照(bgsave 命令)的过程,都会分别通过fork()原创 2023-11-11 12:37:30 · 123 阅读 · 0 评论 -
Redis面试题分享一:Redis是什么?
它支持多种类型的数据结构,如字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询,bitmaps,hyperloglogs 和地理空间(geospatial)索引半径查询。2. 多种数据结构:除了基本的键值对(字符串)之外,Redis还支持哈希表(类似于关联数组)、列表(有序的字符串集合)、集合(无序且不重复的字符串集合)和有序集合(类似于集合但每个元素都关联一个分数)等多种数据结构。原创 2023-11-09 15:21:14 · 45 阅读 · 0 评论 -
Redis面试题分享二:Redis的基本数据类型是什么?
Redis没有直接复用C语言的字符串,而是新建了属于自己的结构-----SDS。在Redis数据库里,包含字符串值的键值对都是由SDS实现的(Redis中所有的键都是由字符串对象实现的即底层是由SDS实现,Redis中所有的值对象中包含的字符串对象底层也是由SDS实现)。表示 SDS 的长度,使我们在获取字符串长度的时候可以在 O(1)情况下拿到,而不是像 C 那样需要遍历一遍字符串。原创 2023-11-09 16:00:26 · 58 阅读 · 0 评论 -
Redis面试题分享三:Redis为什么这么快?
综上所述,Redis之所以如此快速主要得益于内存存储、单线程模型、非阻塞I/O、异步持久化以及数据结构优化等关键特性的综合作用。虽然单线程看起来效率较低,但由于Redis主要进行内存操作,而不是计算密集型任务,因此单线程足以应对大多数场景。Redis提供了丰富的数据结构(如字符串、哈希表、列表、集合等),并对每种数据结构进行了优化。例如,在哈希表中使用了散列表来实现O(1)时间复杂度的查找和插入操作,在列表中使用了双向链表来支持快速插入和删除操作等。Redis将数据存储在内存中,而不是磁盘上。原创 2023-11-09 16:05:44 · 59 阅读 · 0 评论