Redis面试题
文章平均质量分 92
分享一些Redis相关面试题。
i白
小白
展开
-
Redis面试题-一致性Hash
本文参考 嗨客网 Redis面试题一致性Hash什么是一致性Hash一致性哈希算法在 1997 年由麻省理工学院的 Karger 等人在解决分布式 Cache 中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和 CARP 十分类似。一致性哈希修正了 CARP 使用的简单哈希算法带来的问题,使得 DHT 可以在 P2P 环境中真正得到应用。一致性Hash现在一致性 hash 算法在分布式系统中也得到了广泛应用,研究过 memcached 缓存数据库的人都知道,memc.原创 2021-04-08 12:49:25 · 326 阅读 · 0 评论 -
Redis面试题-Hash算法
本文参考 嗨客网 Redis面试题Hash算法什么是HashHash 也称散列、哈希,对应的英文都是 Hash。基本原理就是把任意长度的输入,通过 Hash 算法变成固定长度的输出。这个映射的规则就是对应的 Hash 算法,而原始数据映射后的二进制串就是哈希值。活动开发中经常使用的 MD5 和 SHA 都是历史悠久的 Hash 算法。echo md5("嗨客网(www.haicoder.net)");// 输出结果:c039822701479838d74267c87495db39在这个.原创 2021-04-08 12:41:54 · 414 阅读 · 0 评论 -
Redis面试题-Redis压缩列表
本文参考 嗨客网 Redis面试题Redis压缩列表Redis 中的压缩列表不是基础数据结构,而是 Redis 自己设计的一种数据存储结构。它有点儿类似数组,通过一片连续的内存空间,来存储数据。不过,它跟数组不同的一点是,它允许存储的数据大小不同。压缩列表详解说明听到 “压缩” 两个字,直观的反应就是节省内存。之所以说这种存储结构节省内存,是相较于数组的存储思路而言的。我们知道,数组要求每个元素的大小相同,如果我们要存储不同长度的字符串,那我们就需要用最大长度的字符串大小作为元素的大小(假设.原创 2021-04-07 13:04:35 · 254 阅读 · 0 评论 -
Redis面试题-Redis整数集合
本文参考 嗨客网 Redis面试题Redis整数集合Redis 中的整数集合(intset)并不是一个基础的数据结构,而是 Redis 自己设计的一种存储结构,是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时, Redis 就会使用整数集合作为集合键的底层实现。整数集合实现整数集合(intset)是 Redis 用于保存整数值的集合抽象数据结构,它可以保存类型为 int16_t、int32_t 或者 int64_t 的整数值,并且保证集合中不会出现重复元素。结构.原创 2021-04-06 12:53:54 · 161 阅读 · 0 评论 -
Redis面试题-Redis跳跃表
本文参考 嗨客网 Redis面试题Redis跳跃表什么是跳跃表Redis 中的跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。为什么使用跳跃表首先,因为 zset 要支持随机的插入和删除,所以它不宜使用数组来实现,关于排序问题,我们也很容易就想到红黑树或者平衡树这样的树形结构,为什么 Redis 不使用这样一些结构呢?性能考虑: 在高并发的情况下,树形结构需要执行一些类似于 rebalance 这样的可能涉及整棵树的操作,相对来说跳跃.原创 2021-04-06 12:49:06 · 1173 阅读 · 0 评论 -
Redis面试题-Redis底层数据结构
本文参考 嗨客网 Redis面试题Redis底层数据结构Redis 的五大数据类型也称五大数据对象,即分别为 string、 list、 hash、 set 和 zset,但 Redis 并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统 redisObject。这个对象系统包含了五大数据对象,字符串对象(string)、列表对象(list)、哈希对象(hash)、集合(set)对象和有序集合对象(zset);而这五大对象的底层数据编码可以用命令 OBJECT ENCO.原创 2021-04-03 22:57:38 · 969 阅读 · 0 评论 -
Redis面试题-Redis分布式锁
本文参考 嗨客网 Redis面试题Redis分布式锁什么是分布式锁要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一 JVM 中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如 synchronized 是共享对象头,显示锁 Lock 是共享某个变量(state)。进程锁:为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个进.原创 2021-04-01 13:30:18 · 2768 阅读 · 2 评论 -
Redis面试题-Redis线程模型
本文参考 嗨客网 Redis面试题Redis线程模型Redis事件不是讲线程模型吗?和事件有什么关系?实际上 Redis 是一个事件驱动程序,大白话理解一下:就是通过事件的方式来运行 Redis 的。比如客户端向服务端发起一个 get 请求,在做好了建连、发送请求、响应请求、关闭连接等准备操作后,就触发了一个事件。所以在了解线程模型之前,先来看看事件。Redis 的事件分为两种,分别是文件事件和时间事件两种。文件事件文件事件是 socket 的一个抽象,客户端发送请求到服务端,会先建立连接.原创 2021-04-01 13:26:39 · 389 阅读 · 0 评论 -
Redis面试题-Redis内存碎片
本文参考 嗨客网 Redis面试题Redis内存碎片查看Redis内存碎片率在 Redis 使用过程中,经常会产生内存碎片,如果我们需要查看 Redis 的内存碎片率,我们可以使用 INFO 命令,具体命令如下:INFO Memory执行完毕后,如下图所示:其中,mem_fragmentation_ratio 显示的就是内存使用率,其具体的计算公式为:mem_fragmentation_ratio = used_memory_rss / used_memory其中,used_me.原创 2021-03-30 13:19:56 · 162 阅读 · 0 评论 -
Redis面试题-查看Redis内存使用
本文参考 嗨客网 Redis面试题查看Redis内存使用查看Redis内存使用在 Redis 使用过程中,如果我们需要查看 Redis 的内存使用情况,我们可以使用 INFO 命令,具体命令如下:INFO执行完毕后,如下图所示:我们可以看到,此时输出了所有的 Redis 的使用信息,如果我们仅仅需要查看内存的使用,我们还可以使用如下命令:INFO Memory执行完毕后,如下图所示:其中,具体每项解释如下:字段说明used_memory由 redis .原创 2021-03-30 13:16:13 · 228 阅读 · 0 评论 -
Redis面试题-Redis集群Twemproxy与Codis
本文参考 嗨客网 Redis面试题Redis集群Twemproxy与CodisRedis常见集群技术长期以来,Redis 本身仅支持单实例,内存一般最多 10~20GB。这无法支撑大型线上业务系统的需求。而且也造成资源的利用率过低——毕竟现在服务器内存动辄 100~200GB。为解决单机承载能力不足的问题,各大互联网企业纷纷出手,“自助式” 地实现了集群机制。在这些非官方集群解决方案中,物理上把数据 “分片”(sharding)存储在多个 Redis 实例,一般情况下,每一 “片” 是一个 R.原创 2021-03-29 13:17:45 · 471 阅读 · 4 评论 -
Redis面试题-Redis集群cluster
本文参考 嗨客网 Redis面试题Redis集群cluster什么是Redis clusterRedis cluster 是 Redis 官方提供的分布式解决方案,在 3.0 版本后推出的,有效地解决了 Redis 分布式的需求,当一个 Redis 节点挂了可以快速的切换到另一个节点。当遇到单机内存、并发等瓶颈时,可以采用分布式方案要解决问题。Redis cluster集群背景Redis 最开始使用 主从模式 做集群,若 master 宕机需要手动配置 slave 转为 master;后来为.原创 2021-03-29 13:13:06 · 977 阅读 · 0 评论 -
Redis面试题-Redis哨兵模式
本文参考 嗨客网 Redis面试题Redis哨兵模式什么是Redis哨兵模式Redis Sentinel 是一个分布式系统, 你可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来接收关于主服务器是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个从服务器作为新的主服务器。虽然 Redis Sentinel 释出为一个单独的可执行文件 redis-senti.原创 2021-03-26 13:23:10 · 1767 阅读 · 1 评论 -
Redis面试题-Redis主从模式
本文参考 嗨客网 Redis面试题Redis主从模式什么是Redis主从模式使用一个 Redis 实例作为主机,其余的作为备份机。主机和备份机的数据完全一致,主机支持数据的写入和读取等各项操作,而从机则只支持与主机数据的同步和读取。也就是说,客户端可以将数据写入到主机,由主机自动将数据的写入操作同步到从机。主从模式很好的解决了数据备份问题,并且由于主从服务数据几乎是一致的,因而可以将写入数据的命令发送给主机执行,而读取数据的命令发送给不同的从机执行,从而达到读写分离的目的。Redis 的主从.原创 2021-03-26 13:08:42 · 477 阅读 · 1 评论 -
Redis面试题-Redis变慢定位
本文参考 嗨客网 Redis面试题Redis变慢定位Redis变慢定位Redis 作为内存数据库,拥有非常高的性能,单个实例的 QPS 能够达到 10W 左右。但我们在使用 Redis 时,经常时不时会出现访问延迟很大的情况,如果你不知道 Redis 的内部实现原理,在排查问题时就会一头雾水。很多时候,Redis 出现访问延迟变大,都与我们的使用不当或运维不合理导致的。Redis变慢常见原因使用复杂度高的命令如果在使用 Redis 时,发现访问延迟突然增大,如何进行排查?首先,第一步,建.原创 2021-03-25 13:08:40 · 301 阅读 · 0 评论 -
Redis面试题-Redis为什么这么快
本文参考 嗨客网 Redis面试题Redis为什么这么快Redis有多快Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言 编写,官方提供的数据是可以达到 100000+ 的 QPS(每秒内查询次数)。这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 Memcached 差!Redis 具体 QPS 如下图所示:横轴是连接数,纵轴是 QPS。 此时,这张图反映了一个数量级!Redis为什么这么快完全基于内存,绝大部分请求是纯粹的内存操作,.原创 2021-03-25 13:04:40 · 257 阅读 · 0 评论 -
Redis面试题-Redis HyperLoglog
本文参考 嗨客网 Redis面试题Redis HyperLoglog什么是HyperLoglogHyperLoglog 是 Redis 新支持的两种类型中的另外一种(还有一种是位图类型 Bitmaps),主要适用场景是海量数据的计算。特点是速度快,占用空间小。HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12KB.原创 2021-03-25 13:00:34 · 291 阅读 · 0 评论 -
Redis面试题-Redis bitmap
本文参考 嗨客网 Redis面试题Redis bitmap什么是Redis bitmapRedis 的 bitmap 是通过一个 bit 位来表示某个元素对应的值或者状态,其中的 key 就是对应元素本身。Bitmaps 本身不是一种数据结构,实际上它就是字符串(key 对应的 value 就是上图中最后的一串二进制),但是它可以对字符串的位进行操作。Bitmaps 单独提供了一套命令,所以在 Redis 中使用 Bitmaps 和使用字符串的方法不太相同。可以把 Bitmaps 想象成一个以.原创 2021-03-25 12:55:28 · 414 阅读 · 0 评论 -
Redis面试题-Redis事务
本文参考 嗨客网 Redis面试题Redis事务什么是Redis事务Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。也就说说 redis 事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。Redis事务特性单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Re.原创 2021-03-19 13:03:14 · 489 阅读 · 0 评论 -
Redis面试题-Redis脚本
本文参考 嗨客网 Redis面试题Redis脚本Redis为什么引入LuaRedis 是高性能的 key-value 内存数据库,在部分场景下,是对关系数据库的良好补充。Redis 提供了非常丰富的指令集,官网上提供了 200 多个命令。但是某些特定领域,需要扩充若干指令原子性执行时,仅使用原生命令便无法完成。Redis 意识到上述问题后,在 2.6 版本推出了 lua 脚本功能,允许开发者使用 Lua 语言编写脚本传到 Redis 中执行。用户可以向 Redis 服务器发送 lua 脚本来执.原创 2021-03-19 12:53:13 · 206 阅读 · 0 评论 -
Redis面试题-Redis pipeline
本文参考 嗨客网 Redis面试题Redis pipeline什么是Redis pipelineRedis 中的 Pipeline 指的是管道技术,指的是客户端允许将多个请求依次发给服务器,过程中而不需要等待请求的回复,在最后再一并读取结果即可。为什么需要pipelineredis 客户端执行一条命令分 4 个过程:这个过程称为 Round trip time(简称 RTT, 往返时间),Redis 中的 mget 和 mset 有效节约了 RTT,但大部分命令(如 hgetall,并没.原创 2021-03-18 13:24:31 · 272 阅读 · 0 评论 -
Redis面试题-布隆过滤器
本文参考 嗨客网 Redis面试题布隆过滤器什么是布隆过滤器布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。哈希函数布隆过滤器离不开哈希函数,所以在这里有必要介绍下哈希函数的概念,哈希函数的性质:经典的哈希函数都有无限大的输入值域(无穷大)。经典的哈希函数的输出域都是固定的范围(有穷.原创 2021-03-18 13:17:34 · 1003 阅读 · 0 评论 -
Redis面试题-缓存穿透击穿与雪崩
本文参考 嗨客网 Redis面试题缓存穿透击穿与雪崩缓存穿透概念缓存和数据库中都没有的数据,可用户还是源源不断的发起请求,导致每次请求都会到数据库,从而压垮数据库。流程说明比如客户查询一个根本不存在的东西,首先从 Redis 中查不到,然后会去数据库中查询,数据库中也查询不到,那么就不会将数据放入到缓存中,后面如果还有类似源源不断的请求,最后都会压到数据库来处理,从而给数据库造成巨大的压力。解决办法业务层校验用户发过来的请求,根据请求参数进行校验,对于明显错误的参数,直接拦截返回.原创 2021-03-18 13:03:41 · 473 阅读 · 0 评论 -
Redis面试题-Redis数据持久化RDB与AOF
本文参考 嗨客网 Redis面试题Redis数据持久化RDB与AOFRedis数据持久化Redis 作为一个内存数据库,数据是以内存为载体存储的,那么一旦 Redis 服务器进程退出,服务器中的数据也会消失。为了解决这个问题,Redis 提供了持久化机制,也就是把内存中的数据保存到磁盘当中,避免数据意外丢失。Redis 提供了两种持久化方案:RDB 持久化和 AOF 持久化,一个是快照的方式,一个是类似日志追加的方式。RDB快照持久化概念RDB 持久化是通过快照的方式,即在指定的时间间隔.原创 2021-03-18 12:55:49 · 412 阅读 · 0 评论 -
Redis面试题-Redis内存淘汰机制
本文参考 嗨客网 Redis面试题Redis内存淘汰机制描述Redis 的用途非常广泛。作为一个高性能的内存数据库,它经常被用于缓存的业务场景。所谓缓存,即在第一次获取到数据的时候,把它暂存在内存中。这样下次需要这个数据的时候,就直接从内存中取,不用再去查询数据库或调用远程接口,这样可以极大地提高应用程序的性能。如果缓存中的数据永久存在,那占用的内存就会变得越来越大。而内存是有限的,所以缓存系统需要在需要的时候删除一些不必要的缓存数据以节约内存空间。Redis 提供了两种机制配合来达到上述目的.原创 2021-03-17 13:26:03 · 268 阅读 · 0 评论 -
Redis面试题-Redis 16个数据库
本文参考 嗨客网 Redis面试题Redis 16个数据库描述在实际项目中 Redis 常被应用于做缓存,分布式锁、消息队列等。但是在搭建配置好 Redis 服务器后很多朋友应该会发现和有这样的疑问,为什么 Redis 默认建立了 16 个数据库。查看Redis数据库我们在使用 redis-cli 连接到 Redis 服务器时,可以使用 SELECT 命令切换 Redis 的库,比如我们切换到第 16 号库,具体命令如下:SELECT 15执行完毕后,终端输出如下:我们看到,Red.原创 2021-03-17 13:21:15 · 202 阅读 · 2 评论 -
Redis面试题-Redis过期策略及实现原理
本文参考 嗨客网 Redis面试题Redis面试题 Redis过期策略及实现原理Redis过期策略及实现原理描述我们在使用 Redis 时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期。当我们设置了过期时间,Redis 是如何判断是否过期,以及根据什么策略来进行删除的。redis过期时间设置语法# 以秒为单位设置过期,这是最常用的方式EXPIRE KEY time# 字符串独有的方式SETEX KEY_NAME TIMEOUT VALUE说明除了 字.原创 2021-03-17 13:11:09 · 238 阅读 · 0 评论