
Redis
系统研究Redis,请进。
姜秀丽
人一生中大部分时间都在工作,如果你的工作恰巧又是自己喜欢的,那么你的大部分时间就都在做喜欢的事情,何其乐哉!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
让你弄懂什么是缓存穿透,并轻松get布隆过滤器原理,快速上手。
一、什么是缓存穿透?一图胜千言,如下图,当访问到数据库中没有的数据的时候,每次访问同样的数据,都会绕过缓存系统(一般是Redis),直接访问到数据库层,这就是我们说的缓存穿透。解决办法:我们可以在缓存中将这样的数据也缓存起来,只是缓存的key的value为空。但是如果有特别多的key是这种情况的,我们的缓存中要缓存好多这样的key,比较占用缓存。另外如果这种key访问的次数比较少,我们缓存这种key的效果也不是很好。于是引出了一种办法:我们有什么办法可以让这样的数据在访问缓存之前,就可以被判断原创 2020-11-27 10:03:29 · 271 阅读 · 0 评论 -
Redis中的批量操作pipeline碰到了RedisCluster
以下是我们的业务需求,将多个key放到list中去,为了提高效率,使用了pipeline管道功能。cat list.txt | redis-cli -h 127.0.0.1 -p 26387 -a pwd --pipe单机中执行没有问题。遇到了RedisCluster就不可以了,因为pipeline不会自己去移动槽位,所以需要我们在运行命令的时候,就指定那个我们的list在那个ip上。于是我们需要先看list在哪个槽位上:cluster keyslot list-namecluster k原创 2020-06-16 17:03:36 · 437 阅读 · 0 评论 -
Redis被哪些系统调用?如何查询?
Redis的连接ip有哪些?最近在负责公司的Redis统一升级的工作:那么我们就需要将业务迁移到新版本的Redis上。关掉旧版本的Redis。那么问题来了,我们在关掉旧的Redis的时候,就需要排查哪些系统在调用这个Redis。方法一:lsof -i:portCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEredis-cli 5214 zhangjin 3u IPv4 3147120732原创 2020-06-10 16:37:38 · 1894 阅读 · 0 评论 -
Redis中的各种scan命令的区别与用法
前言Redis中的keys *的访问,容易引起Redis的阻塞。于是有了各种scan命令,它如同游标一样,逐渐的遍历Redis中的key。scan:用于迭代当前数据库中的数据库键。hscan:用于迭代哈希键中的键值对。sscan:用于迭代集合键中的元素。zscan:用于迭代有序集合中的元素(包括元素成员和元素分值)。以下是各命令的使用,其中<>中是参数,[]中是可选参数。scanscan <cursor> [match <pattern>] [cou原创 2020-06-05 14:52:24 · 1836 阅读 · 0 评论 -
Redis中的Hash类型的底层编码
一、命令的使用type <key>type:说明key是五种基本类型里的哪种。object encoding <key>object encoding:说明key的底层是使用Redis中的哪种数据结构。二、验证命令的情况今天我们就拿Hash类型来做下检验。当我们随便设置一个Hash类型的数据时:hmset user:1 name jxl age 20我们用type user:1,返回的是hash。type user:1hash我们用object enc原创 2020-06-05 11:51:12 · 540 阅读 · 0 评论 -
你想知道Redis中哪些key过期了?哪些key被淘汰了吗?—Redis中notify-keyspace-events的作用
一、配置意义Redis中默认的notify-keyspace-events的配置值为空。可以的配置值如下:notify-keyspace-events 的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知:字符发送的通知K键空间通知,所有通知以__keyspace@<db>__ 为前缀E键事件通知,所有通知以 __keyevent@<db>__ 为前缀gDEL 、 EXPIRE 、 RENAME 等类型无关的通用命令的通知原创 2020-06-04 18:41:24 · 8130 阅读 · 3 评论 -
Redis Cluster 中的slot槽位迁移
0.0、目标从from节点迁移槽位slot到to节点上。0.1、获取key所在槽位如果我们是针对big key的迁移。cluster keyslot <key>1、在目标节点上执行cluster setslot <slot> importing <from-nodeid>2、在源头节点上执行cluster setslot <slot> migrating <to-nodeid>3.0、获取槽位上的key获取分片上的数据:原创 2020-06-03 17:03:17 · 3769 阅读 · 0 评论 -
Redis内存淘汰策略(一图胜千言)
一、清除过期keyRedis中的key按照是否设置的了过期时间分为两类:没有过期时间的:正常不会被清理。设置了过期时间的:会有被动清除和主动清除那些已经过期了的数据的Redis的内部处理机制。二、内存淘汰策略那么还有什么情况下会清理Redis中的key呢?或者说没有设置了过期时间,是否可以被清除呢?当Redis的内存使用达到设置的maxmemory的时候,就会触发内存淘汰策略。那么有哪些淘汰策略呢?如下图,淘汰策略针对已经设置了过期时间的key和不区分是否设置了过期时间的可以,都有各自的原创 2020-05-29 10:55:59 · 283 阅读 · 0 评论 -
Redis中的scan命令的使用
scan cursor match key* count n如果是扫描库中所有的key,可以简化为:scan cursor count n其中:n是这次扫描出多少个key。cursor是从哪个游标开始扫描。match后面的key*是key的模糊表达式。原创 2020-05-28 17:34:43 · 640 阅读 · 0 评论 -
Redis的持久化机制—实战
Redis的持久化共有三种方式:RDBAOFRDB与AOF的混合模式下面我就将针对这几种模式,如何打开,关闭,持久化的文件形式,以及适用的场景来展开。一、RDBRDB,其实就是Redis的内存的dump文件,它的形式就是一堆二进制的东东。1、打开RDBRedis默认是打开RDB持久化的。以下配置文件的任何一条触发,就会发生RDB的持久化。save 900 1 # 900秒内发生一次键值变化,则发生持久化。save 300 10 # 300秒内发生十次键值变化,则发原创 2020-05-26 16:42:22 · 212 阅读 · 0 评论 -
Redis中设置了protected-mode模式,如何可以让其他机器正常访问呢?
报错情况我搭建了一个Redis实例,并把protected-mode设置为了yes。我在其他机器连接这台Redis服务:redis-cli -h 1.1.1.1 -p 6379结果报错如下:(error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requeste原创 2020-05-09 11:06:47 · 7138 阅读 · 0 评论 -
Redis中的连接池配置—别以为只有数据库中有连接池
以下是Redis中连接池配置的参数含义,以及建议配置:序号参数名含义默认值使用建议1maxTotal资源池中最大连接数8如我们想访问Redis的QPS达到1000,我们执行一个命令的平均耗时是10ms,那么一个连接的QPS就是100,所以我们需要的连接数就是1000 / 100 = 10,为了有一定富余,我们可以适当增大数目,如maxTotal设置为20。...原创 2020-05-07 14:32:32 · 3520 阅读 · 0 评论 -
Redis中的Stream实操:创建-消费-查看
一、什么是Redis中的Stream?支持多播的可持久化的消息队列,其作者也坦言借鉴了Kafka的设计。它其实是一个消息链表,每个消息都有唯一的消息id,消息是持久化的,Redis重启后消息仍在。每个Stream都可以挂载多给 消费组,每个消费组会有个游标,表示当前消费组已经消费到哪条消息了。同一个消费组可以挂接多个消费者,每个消费者之间是竞争关系,一个消费者消费了消息,游标就有向前移动。...原创 2020-03-30 19:46:59 · 5177 阅读 · 0 评论 -
让你轻松理解并记住Redis中的八种内存淘汰策略
当我们对Redis设置了maxmemory,那么当Redis的内存达到了这个阈值后,就可以对内存中的内容进行淘汰,直到Redis的内存控制在maxmemory内。一、淘汰策略ttl:设置了过期时间的key中,剩余时间更少的优先淘汰。lru:最近最少使用的key,优先被淘汰。lfu:最近访问频率最少的key,优先被淘汰。random:随机淘汰内存中内容。noeviction:无法再写入R...原创 2020-03-30 18:16:54 · 3456 阅读 · 0 评论 -
Redis中的安全问题
Redis中的安全问题从业生涯中,因为在内网,自己搭建的Redis,结果发生了莫名的问题,往Redis中放入的内容,总是被清空。查了好久,也没发现问题。后来呢,把外网访问的权限关了,一切都好了。所谓运维安全无小事,终于深刻的体会了,对于Redis,为了安全,我们可以做的事情:尽量不开外网可以访问的权限,bind绑定内网网卡IP。密码最好设置上,要相对复杂些。端口尽量不要用默认的637...原创 2020-03-27 14:28:03 · 338 阅读 · 0 评论 -
Redis中的各种info命令
Redis中的info命令连接上Redis后,想了解Redis的运行情况,你需要知道以下的命令,非常好用。命令功能info server服务器信息info clients客户端信息info memory内存信息info persistence持久化信息info stats全局统计信息info replication复制信息in...原创 2020-03-27 14:18:30 · 282 阅读 · 0 评论 -
Jedis如何感知Redis Sentinel中的主节点切换【源码分析】
Jedis中Redis Sentinel的客户端JedisSentinelPool的源码分析。JedisSentinelPool代码如下,其中的重点部分为initSentinels和initPool,其他判断略。public JedisSentinelPool(String masterName, Set<String> sentinels, GenericObjectPool...原创 2020-03-20 19:15:43 · 1164 阅读 · 1 评论 -
Redis Sentinel的客户端实现原理
客户端连接Sentinel集群,只需要两个参数:Sentinel的节点集合。master-name。实现一个Redis Sentinel客户端的步骤如下:第一步:遍历Sentinel节点集合,获取一个可用的Sentinel节点。第二步:通过sentinel get-master-addr-by-name master-name这个API获取对应主节点相关信息。第三步:验证当前获...原创 2020-03-20 17:19:12 · 844 阅读 · 0 评论 -
Redis Sentinel的定时监控
每个Sentinel节点会定期对数据节点和其余Sentinel节点进行监控,一套合理的监控机制是Sentinel节点判定节点不可到达的重要保证。定时任务一每隔10秒,每个Sentinel节点会向主节点和从节点发送info replication命令获取最新的拓扑结构,节点的故障、加入都可以及时的感知出来。定时任务二每隔2秒,每个Sentinel节点会向Redis数据节点的sentinle...原创 2020-03-20 17:14:14 · 444 阅读 · 0 评论 -
Redis Sentinel的故障转移过程
一、什么是Redis Sentinel?当主节点出现故障时,Redis Sentinel能自动完成故障发现和故障转移,并通知应用方,从而实现真正的高可用。Redis Sentinel是一个分布式架构,其中包含若干个Sentinel节点和Redis数据节点。Redis Sentinel的拓扑图如下:二、故障转移的步骤Redis Sentinel实现故障转移的四个步骤:监控:每个Sent...原创 2020-03-20 17:08:43 · 1629 阅读 · 0 评论 -
Redis Sentinel中Sentinel节点的API
sentinel masterssentinel master master-namesentinel slaves master-namesentinel sentinels master-namesentinel get-master-addr-by-name master-namesentinel reset pattern:对符合表达式的主节点的配置进行重置,如重新发现从节点以...原创 2020-03-20 16:16:48 · 670 阅读 · 0 评论 -
Redis Sentinel中的配置详解
一、配置样例Sentinel节点中的配置如下,注意里面的注释。port 26379daemonize yesprotected-mode nodir /opt/redislogfile "26379.log"sentinel monitor mymaster 10.10.11.146 6388 2 # 判定节点不可达的时间,单位是毫秒。sentinel down-aft...原创 2020-03-20 16:11:18 · 3260 阅读 · 0 评论 -
Redis中的Replication机制
开启复制复制的数据流是单向的,只能由主节点复制到从节点,配置复制的方式有以下三种:在从节点的配置文件中添加配置:slaveof ip port,随着Redis的启动而生效。在从节点的启动命令redis-server后加入–slaveof ip port,进而生效。直接在从节点的命令行中输入以下命令:slaveof ip port,从而生效。总之呢,slaveof命令既可以在运行期动态...原创 2020-03-17 22:30:00 · 801 阅读 · 0 评论 -
Redis中的AOF工作流程
Redis中的AOF工作流程AOF(append only file):以独立日志的方式记录每次写的命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。以下是AOF工作流程图:开启AOFRedis中默认不开启AOF,appendonly yes,是开启的配置。文件的名字默认为appendonly...原创 2020-03-16 21:12:16 · 3042 阅读 · 0 评论 -
一文讲透Redis中的RDB持久化机制
众所周知,Redis中的数据是存储到内存中的,如果因为什么原因Redis服务down了,那么里面的数据就丢失了。那么持久化对Redis就至关重要了,那么本文先来讲述下Redis中的RDB持久化机制。RDB持久化是把当前进程数据生成快照保存到硬盘的过程。触发RDB持久化过程分为手动触发和自动触发。手动触发手动执行save,或者bgsave,会触发RDB的持久化。save:会阻塞Redis服...原创 2020-03-15 23:16:03 · 471 阅读 · 0 评论 -
验证Redis的通信协议RESP
上文中已经对RESP,也就是Redis的序列化协议进行了分析,那么我们如何证明呢?我们可以通过如下命令来连接Redis服务器:nc 127.0.0.1 6379以下是测试的结果,我们可以对照之前的文章来验证。set name zsh+OKset age 18+OKincr age:19get name$3zshzadd myzset a b c d-ERR valu...原创 2020-03-13 22:16:09 · 304 阅读 · 0 评论 -
Redis客户端的通信协议RESP
Redis客户端的通信协议Redis客户端与Redis服务器之间的通信协议是在TCP协议之上构建的,Redis制定了RESP(Redis Serialization Protocol,Redis序列化协议)来实现客户端与服务端的正常交互。这种协议简单高效,又容易被人类识别。一、举个例子例如客户端想要发送一条命令:set name jxl给服务端,那么客户端需要将命令封装成如下格式,每行之间...原创 2020-03-13 22:03:00 · 445 阅读 · 0 评论 -
Bitmaps的常用命令
一个字节是8个位,例如data,是四个字节,也就是32个位,可以把Bitmaps想象成一个以位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量。设置值setbit key offset value获取值getbit key offset获取Bitmaps指定范围值为1的个数bitcount key start end获取key中从start字节...原创 2020-03-12 18:10:47 · 331 阅读 · 0 评论 -
Redis中发布订阅操作
Redis中的发布订阅,略显粗糙,无法实现消息堆积和回溯。但是胜在足够简单。发布消息publish channel message订阅消息subscribe channel channel1客户端在执行订阅命令之后进入了订阅状态,只能接受subscribe、psubscribe、unsubscribe、punsubscribe的四个命令。新开启的订阅客户端,无法收到该频道之前的消息...原创 2020-03-12 17:43:45 · 119 阅读 · 0 评论 -
Redis-Benchmark对Redis进行性能测试
redis-benchmark可以为Redis做基准性能测试,它提供了很多选项帮助开发和运维人员测试Redis的相关性能。redis-benchmark会对各类数据结构的命令进行测试,并给出性能指标。-c客户端的并发个数,默认50。-n代表客户单的并发的请求总量,默认是100000。-q此选项,会让结果中只显示requests per second信息,就是每秒的平均请求情况。-r...原创 2020-03-12 14:58:10 · 724 阅读 · 0 评论 -
Redis-Cli的各种参数用法
-r重复执行次数。-i间隔时间,单位是秒。-x代表从标准输入读取数据作为,redis-cli的最后一个参数。-c连接RedisCluster的参数,可以防止moved和ask异常。-aRedis的密码。–scan和–pattern用于扫描指定模式的键,相当于使用scan命令。–slave把当前客户端模拟成当前Redis节点的从节点,可以用来获取当前Redis节点的更新操作...原创 2020-03-12 14:21:02 · 3655 阅读 · 0 评论 -
一文说透Redis中的慢查询
一、什么是Redis中的慢查询?一条命令要经过如下的过程,客户端将命令通过网络发给Redis,因为Redis是单线程的,所以命令需要在Redis中排队,直到Redis有资源可以执行命令,然后将执行结果返回给客户端。如下图中的所以,我们所说的Redis中的慢查询,指的是第三步,也就是Redis真正执行命令的时间。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQ...原创 2020-03-11 14:44:13 · 514 阅读 · 0 评论 -
Redis监控运维平台-CacheCloud
文章目录一、CacheCloud1、出现问题2、CacheCloud3、CacheCloud主要功能4、本文思路二、部署与安装1、部署CacheCloud2、机器部署3、应用接入4、客户端接入5、本节小结三、用户功能1、应用统计信息2、实例列表3、应用详情4、命令曲线5、CacheCloud Redis Shell控制台6、慢查询7、应用拓扑四、运维功能1、应用运维2、接入已存在的Redis3、R...原创 2020-03-11 11:34:55 · 1385 阅读 · 3 评论 -
什么是Redis内存碎片率?碎片如何清理?
我们发现Redis服务器内存不够用了,但是我们的内存使用没有那么多呀,这是,就要看是否你的内存碎片率太大了。碎片率的计算我们登陆到Redis服务器上,执行以下命令:info memory我们会看到如下的信息:其中mem_fragmentation_ratio就是内存碎片率。mem_fragmentation_ratio = used_memory_rss / used_memory...原创 2020-02-28 11:49:22 · 12741 阅读 · 1 评论 -
Redis缓存命中率如何计算
我们登陆到Redis服务器上,运行命令info:里面会有如下两个参数:keyspace_hits:命中的次数keyspace_misses:没有命中的次数缓存命中率 = keyspace_hits / (keyspace_hits + keyspace_misses)当我们作如下操作时,以上两个参数的变化如下:我们get一个缓存中有效的key,keyspace_hits = key...原创 2020-02-26 17:55:30 · 6029 阅读 · 0 评论 -
Redis-Sentinel原理与实战
一、Sentinel总述Sentinel中文为哨兵的意思,它是用来监控Redis主从节点的,当Redis的主节点Down的时候,Sentinel会通过选举投票机制,使对应的Slave节点接管,成为新的Redis Master。我们使用Redis的客户端直接接入Sentinel,由Sentinel告诉我们使用哪个Redis节点作为主节点。接入Sentinel的代码,只需要配置Sentinel的...原创 2020-02-25 15:48:10 · 968 阅读 · 0 评论 -
RedisCluster集群FailOver的几个命令的区别
RedisCluster的故障转移,也就是FailOver分为两大类:第一类:自动FailOver集群状态下,Master发生Down的情况了,集群自动的选举,调整,成为一个新的完整的集群状态。第二类:手动FailOver我们手动的发送命令给集群,而且只能发送命令给集群中的Slave,迫使集群中这个Slave的Master发生故障转移。此文,我们关心的就是,手动FailOver的三种情况...原创 2020-02-24 17:15:45 · 2244 阅读 · 0 评论