
面试题- redis
文章平均质量分 90
桃月十二_
这个作者很懒,什么都没留下…
展开
-
redis集群扩容
在电商项目双11期间,通常有更多的并发,对redis的请求压力激增,需要更多的redis对外提供服务,但是过了双11,redis压力骤降,为了节省成本,需要撤出部分redis服务!我们可以通过增加和删除redis集群节点来实现redis集群的动态扩容、缩容,增加redis集群的高可用性。原始集群(见下图)由6个节点组成,6个节点分布在三台机器上(本案例仅在一台机器演示!),采用三主三从的模式。转载 2023-05-04 13:44:35 · 1154 阅读 · 0 评论 -
Redis主从一致性保证
Redis之所以牛逼,一方面是因为他快,另一方面是因为高可靠性。所谓的高可靠性就是指,尽量的少丢数据,和服务端尽量少中断。AOF和RDB保证了前者,但是不能保证后者。后者是根据什么保证的呢?Redis 的做法就是增加副本冗余量,将一份数据同时保存在多个实例上。即使有一个实例出现了故障,需要过一段时间才能恢复,其他实例也可以对外提供服务,不会影响业务使用。这里就会产生主从数据一致性的问题。本文主要是研究了Redis 的主从库同步的基本原理,关于全量复制、基于长连接的命令传播,以及增量复制。转载 2023-03-29 16:21:18 · 372 阅读 · 0 评论 -
【redis面试题】如何实现秒杀
限流: 鉴于只有少部分用户能够秒杀成功,所以要,只允许少部分流量进入服务后端。异步处理:秒杀系统是一个高并发系统,采用,其实异步处理就是削峰的一种实现方式。削峰:对于秒杀系统瞬时会有大量用户涌入,所以在抢购一开始会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原因,所以如何也是设计秒杀系统很重要的思路。实现削峰的常用的方法有利用缓存和消息中间件等技术。内存缓存:秒杀系统最大的瓶颈一般都是数据库读写,由于数据库读写属于磁盘IO,性能很低,如果。转载 2022-10-29 16:06:15 · 605 阅读 · 0 评论 -
redis分布式锁失效的场景
使用相同的lockName和lockValue,尝试从N个节点获取锁。(在获取锁时,要求等待获取锁的时间远小于锁的释放时间,如锁的lease_time为10s,那么wait_time应该为5-50毫秒;当从N个节点获取锁结束后,如果客户端能够从多数节点(N/2 + 1)中成功获取锁,且获取锁的时间小于失效时间,那么可认为,客户端成功获得了锁。客户端成功获得锁后,那么锁的实际有效时间 = 设置锁的有效时间 - 获取锁的时间。客户端获取锁失败后,N个节点的redis实例都会释放锁,即使未能加锁成功。转载 2022-11-02 19:21:57 · 1296 阅读 · 0 评论 -
【面试题】Redis是单线程的为什么那么快
Redis使用单线程模型,没有了线程上下文切换和访问共享资源加锁的性能损耗,配合IO多路复用技术,可以完成多个连接的请求处理。而且正是由于它的使用定位是内存数据库,这样几乎所有的操作都在内存中完成,它的性能可以达到非常之高。原创 2022-10-21 16:55:14 · 1977 阅读 · 0 评论 -
Redis缓存和DB数据一致性
引入多个中间件,还有数据处理程序,比较复杂。方案松耦合,适合大公司高并发场景。原创 2022-10-13 19:34:14 · 571 阅读 · 0 评论 -
【面试题】redis的底层数据结构
数据类型该命令是用来显示那五大数据类型的底层数据结构。OBJECT ENCODING key 示例一:String类型示例二: List类型这里我们就不做过多的演示了,那么上次出现的 embstr 以及 int 还有 quicklist 是什么数据结构呢?下面我们就来介绍Redis中几种主要的数据结构。简单动态字符串Redis 是用 C 语言写的,但是对于Redis的字符串,却不是 C 语言中的字符串,它是自己构建了一种名为 简单动态字符串(simple dynamic string转载 2022-10-09 14:55:09 · 643 阅读 · 0 评论 -
【面试题】Redisson实现Redis分布式锁的底层原理
使用Lua脚本就可以解决这个问题,我们可以在Lua脚本中先判断锁(key)是否存在,如果存在则再判断持有这把锁的线程是否是当前线程,如果不是则加锁失败,否则当前线程再次持有这把锁,并把锁的重入次数+1。正常来说,如果线程1通过get操作从Redis中得到的value是123,那么就会执行删除锁的操作,但假如在执行删除锁的动作之前,系统卡顿了几秒钟,恰好在这几秒钟内,key自动过期了,线程2就顺利获取到锁开始执行自己的逻辑了,此时,线程1卡顿恢复了,开始继续执行删除锁的动作,那么此时删除的还是线程2的锁。原创 2021-04-16 15:26:05 · 982 阅读 · 0 评论 -
【面试题】Redis的四种模式,单机、主从、哨兵、集群
单机安装一个redis,启动起来,业务调用即可。优点:部署简单。高性能,单机不需要同步数据,数据天然一致性。缺点:可靠性保证不是很好,单节点有宕机的风险。主从主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。优点:一旦主节点宕机,从节点作为主节点的备份可以随时顶上来。扩展 主节点的读能力,分担主节点读压力。缺点:一旦 主节点宕机,从节点 晋升成 主节点,转载 2021-04-15 18:13:24 · 290 阅读 · 0 评论 -
【面试题】redis持久化
两个持久化方式优缺点RDB优点RDB对Redis的性能影响非常小,是因为在同步数据的时候他只是fork了一个子进程去做持久化的,而且他在数据恢复的时候速度比AOF来的快。缺点RDB都是快照文件,都是默认五分钟甚至更久的时间才会生成一次,这意味着你这次同步到下次同步这中间五分钟的数据都很可能全部丢失掉。AOF则最多丢一秒的数据,数据完整性上高下立判。AOF优点1.AOF是一秒一次去通过一个后台的线程fsync操作,那最多丢这一秒的数据。2.AOF在对日志文件进行操作的时候是以append-o原创 2021-03-05 11:44:52 · 357 阅读 · 0 评论 -
【面试题】Redis集群架构以及主从复制
redis集群原理redis中slot槽值的范围0-16383,一共是16384个槽值,可以将这些槽值分配给每组的机器。我们存入数据的时候,key通过crc16算法得到一个值,这个值%槽值得到这个key保存机器位置。集群高可用a、一个集群里面有M1、M2、M3三个节点,其中节点 M1包含 0 到 5500号哈希槽,节点M2包含5501 到 11000 号哈希槽,节点M3包含11001 到 16384号哈希槽。如果M2宕掉了,就会导致5501 到 11000 号哈希槽不可用,从而使整个集群不可用。原创 2021-03-05 10:34:06 · 459 阅读 · 1 评论 -
【面试题】redis雪崩、击穿、穿透(包含布隆过滤器原理分析)
Redis雪崩举个简单的例子:如果所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住,它会报一下警,真实情况可能DBA都没反应过来就直接挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。这就是我理解的缓存雪崩。解决方案:处理缓存雪崩简单原创 2021-03-04 15:58:55 · 897 阅读 · 1 评论 -
【面试题】redis五大数据类型、Bitmap
前言redis命令不区分大小写,但是key是区分大小写的。目前redis支持8种数据类型,最经典的还是前五种,本文只介绍前五种数据类型结构。string:最基本的数据类型,二进制安全的字符串,最大512M。hash:key-value对的一种集合。list:按照添加顺序保持顺序的字符串列表。set:无序的字符串集合,不存在重复的元素。sorted set:已排序的字符串集合。bitmap:更细化的一种操作,以bit为单位。hyperloglog:基于概率的数据结构。Geo:地理位置信息原创 2021-03-04 13:57:13 · 762 阅读 · 1 评论 -
【面试题】Redis SETEX /SETNX 的用法和区别
1.SETEXSETEX key seconds value该命令相当于将下面两行操作合并为一个原子操作SET key valueEXPIRE key seconds # 设置生存时间含义(setex = set expire)将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。如果 key 已经存在, SETEX 命令将覆写旧值。2.SETNXSETNX key value含义(setnx = SET if Not eXists):转载 2021-05-13 19:19:26 · 7719 阅读 · 0 评论 -
Redis面试题2022
这个时候你要回答redis关键的一个特性:redis的单线程的。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memcached 把数据全部存在内存之中。原创 2022-09-17 17:44:40 · 133 阅读 · 0 评论