-
第十四章 【高级篇】Redis6.X服务端info+config实战和key淘汰算法
第1集 Redis6.x服务端配置 info命令介绍-生产监控知识
简介: Redis6.x服务端配置info命令介绍
-
info命令介绍
- 服务器的各种信息和统计数值
Server:有关redis服务器的常规信息
redis_mode:standalone # 运行模式,单机或者集群
multiplexing_api:epoll # redis所使用的事件处理机制
run_id:3abd26c33dfd059e87a0279defc4c96c13962ede # redis服务器的随机标识符(用于sentinel和集群)
config_file:/usr/local/redis/conf/redis.conf # 配置文件路径
Clients:客户端连接部分
connected_clients:10 # 已连接客户端的数量(不包括通过slave连接的客户端)
Memory:内存消耗相关信息
used_memory:874152 # 使用内存,以字节(byte)B为单位
used_memory_human:853.66K # 以人类可读的格式返回 Redis 分配的内存总量
used_memory_rss:2834432 # 系统给redis分配的内存即常驻内存,和top 、 ps 等命令的输出一致
used_memory_rss_human:2.70M # 以人类可读的格式返回系统redis分配的常驻内存top、ps等命令的输出一致
used_memory_peak:934040 # 内存使用的峰值大小
used_memory_peak_human:912.15K
total_system_memory:1039048704 # 操作系统的总内存 ,以字节(byte)为单位
total_system_memory_human:990.91M
used_memory_lua:37888 # lua引擎使用的内存
used_memory_lua_human:37.00K
maxmemory:0 # 最大内存的配置值,0是不限制
maxmemory_human:0B
maxmemory_policy:noeviction # 达到最大内存配置值后的策略
Persistence:RDB和AOF相关信息
rdb_bgsave_in_progress:0 # 标识rdb save是否进行中
rdb_last_bgsave_status:ok # 上次的save操作状态
rdb_last_bgsave_status:ok # 上次的save操作状态
rdb_last_bgsave_time_sec:-1 # 上次rdb save操作使用的时间(单位s)
rdb_current_bgsave_time_sec:-1 # 如果rdb save操作正在进行,则是所使用的时间
aof_enabled:1 # 是否开启aof,默认没开启
aof_rewrite_in_progress:0 # 标识aof的rewrite操作是否在进行中
aof_last_rewrite_time_sec:-1 # 上次rewrite操作使用的时间(单位s)
aof_current_rewrite_time_sec:-1 # 如果rewrite操作正在进行,则记录所使用的时间
aof_last_bgrewrite_status:ok # 上次rewrite操作的状态
aof_current_size:0 # aof当前大小
Stats:一般统计
evicted_keys:0 # 因为内存大小限制,而被驱逐出去的键的个数
Replication:主从同步信息
role:master # 角色
connected_slaves:1 # 连接的从库数
master_sync_in_progress:0 # 标识主redis正在同步到从redis
CPU:CPU消耗统计
Cluster:集群部分
cluster_enabled:0 # 实例是否启用集群模式
Keyspace:数据库相关统计
db0:keys=4,expires=0,avg_ttl=0 # db0的key的数量,带有生存期的key的数,平均存活时间
第2集 Redis6.x服务端配置config命令介绍和最大内存配置
简介: Redis6.x服务端配置config命令介绍
-
config命令介绍(都有默认值)
- 可以动态地调整 Redis 服务器的配置(configuration)而无须重启
- config get xxx、config set xxx
-
常用配置
daemonize #后端运行
bind #ip绑定
timeout #客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接
databases #设置数据库的个数,可以使用 SELECT 命令来切换数据库。默认使用的数据库是 0
save #设置 Redis 进行rdb持久化数据库镜像的频率。
rdbcompression #在进行镜像备份时,是否进行压缩
slaveof #设置该数据库为其他数据库的从数据库
masterauth #当主数据库连接需要密码验证时,在这里配置
maxclients #限制同时连接的客户数量,当连接数超过这个值时,redis 将不再接收其他连接请求,返回error
maxmemory #设置 redis 能够使用的最大内存,
-
maxmemory #设置 redis 能够使用的最大内存,
-
备注
- 防止所用内存超过服务器物理内存, maxmemory限制的是Redis实际使用的内存量, 也就是used_memory统计项对应的内存
- 由于内存碎片率的存在, 实际消耗的内存可能会比maxmemory设置的更大, 实际使用时要小心这部分内存溢出
- 默认无限使用服务器内存, 为防止极端情况下导致系统内存耗尽, 建议所有的Redis进程都要配置maxmemory
- 在64bit系统下,maxmemory设置为0表示不限制Redis内存使用,在32bit系统下,maxmemory不能超过3GB
-
注意:
- redis在占用的内存超过指定的maxmemory之后,通过maxmemory_policy确定redis是否释放内存以及如何释放内存
第3集 【面试核心】Redis6的key过期时间删除策略你知道多少
简介:Redis6的key过期时间删除策略你知道多少
-
背景
- redis的key配置了过期时间,这个是怎么被删除的
- redis数据明明过期了,怎么还占用着内存?
- Redis 就只能用 10G,你要是往里面写了 20G 的数据,会发生什么?淘汰哪些数据
-
redis key过期策略
-
定期删除+惰性删除。
-
-
Redis如何淘汰过期的keys: set name xdclass 3600
-
定期删除:
- 隔一段时间,就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除,
- 定期删除可能会导致很多过期 key 到了时间并没有被删除掉,那咋整呢,所以就是惰性删除
-
惰性删除 :
-
概念:当一些客户端尝试访问它时,key会被发现并主动的过期
-
放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键
-
-
- Redis服务器实际使用的是惰性删除和定期删除两种策略:通过配合使用这两种删除策略,服务器可以很好地在合理使用CPU时间和避免浪费内存空间之间取得平衡。
-
问题
- 如果定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?
- 如果大量过期 key 堆积在内存里,导致 redis 内存块耗尽了,就需要走内存淘汰机制
- 设计缓存中间件:可以参考redis的key过期淘汰方式和内存不足淘汰方式
第4集 【面试核心】内存不足时-Redis的Key淘汰策略你知道多少
简介:内存不足时-Redis的Key内存淘汰策略你知道多少
-
背景
- redis在占用的内存超过指定的maxmemory之后,
- 通过maxmemory_policy确定redis是否释放内存以及如何释放内存
- 提供多种策略
-
策略
-
volatile-lru(least recently used)
- 最近最少使用算法,从设置了过期时间的键中选择空转时间最长的键值对清除掉;
-
volatile-lfu(least frequently used)
- 最近最不经常使用算法,从设置了过期时间的键中选择某段时间之内使用频次最小的键值对清除掉;
-
volatile-ttl
- 从设置了过期时间的键中选择过期时间最早的键值对清除 (删除即将过期的)
-
volatile-random
- 从设置了过期时间的键中,随机选择键进行清除;
-
allkeys-lru
- 最近最少使用算法,从所有的键中选择空转时间最长的键值对清除;
-
allkeys-lfu
- 最近最不经常使用算法,从所有的键中选择某段时间之内使用频次最少的键值对清除;
-
allkeys-random
- 所有的键中,随机选择键进行删除;
-
noeviction
- 不做任何的清理工作,在redis的内存超过限制之后,所有的写入操作都会返回错误;但是读操作都能正常的进行;
-
-
config配置的时候 下划线_的key需要用中横线-
127.0.0.1:6379> config set maxmemory_policy volatile-lru
(error) ERR Unsupported CONFIG parameter: maxmemory_policy
127.0.0.1:6379> config set maxmemory-policy volatile-lru
OK
来源:https://www.cnblogs.com/Xd17324217006/p/14965735.html