Redis基础运维及问题排查

一、概述

Redis基础命令及运维文档。

二、基础命令

# 查看所有key值,慎用
127.0.0.1:6379> keys *
# 设置key
127.0.0.1:6379> set keyA valueB 
# 设置过期时间(单位:秒)
127.0.0.1:6379> expire keyA 60
# 删除key
127.0.0.1:6379> del keyA
# 清空当前库
127.0.0.1:6379> flushdb
# 清空所有库
127.0.0.1:6379> flushall

三、过期策略

策略说明

Redis内存满了,则按照maxmemory-policy策略对key进行过期。

maxmemory-policy 六种策略:

  • noeviction : (默认策略)永不过期,达到最大内存,返回错误。
  • allkeys-lru : (作用于所有key)优先删除最近最少使用的key。
  • volatile-lru :(作用于设置了expire的key)优先删除最近最少使用的key。
  • allkeys-random :(作用于所有key)随机删除key。
  • volatile-random :(作用于设置了expire的key) 随机删除key。
  • volatile-ttl :(作用于设置了expire的key)优先删除快过期的key。
策略修改
# 查看redis最大内存
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"
# 最大内存为1MB
127.0.0.1:6379> config set maxmemory 1mb
# 查看当前过期策略
127.0.0.1:6379> config get maxmemory-policy
1) "maxmemory-policy"
2) "noeviction"
# 设置过期策略
127.0.0.1:6379> config set maxmemory-policy allkeys-lru

四、性能测试

Redis自带的性能检测工具redis-benchmark,可以模拟 N 个客户端同时发出 Y 个请求。

# 执行1000个请求来检测性能
redis-benchmark -n 1000 -q
# 50个并发请求,10000个请求来检测性能
redis-benchmark -h localhost -p 6379 -c 50 -n 10000
  • -h:服务器IP
  • -p:端口
  • -n:请求数
  • -c:并发数
  • -q:强制退出

五、实时监控

monitor命令,该命令可以实时监控redis正在执行的命令。

# 实时查看正在执行的命令
192.168.0.39:6379> monitor
# 过滤hget命令
redis-cli -h 192.168.0.39 -p 6379 -a "adc" monitor|grep -v "hget"
# 写入到文件(-c:集群,-a:登录密码)
redis-cli -h 192.168.0.39 -p 6379 -a "adc" -c monitor > test.log

六、问题排查

# 查看操作系统日志
vim /var/log/messages
# 查看redis日志
tail -500f redis_6379.log
# 使用info查看redis相关信息
info

Redis提供了info指令,它会返回关于Redis服务器的各种信息和统计数值,可用于排查问题。

  • info server: 版本、端口等服务器信息。
  • info clients: 客户端连接信息。
  • info memory: 内存消耗相关信息
  • info persistence: RDB和AOF相关信息
  • info stats: 一般统计
  • info replication: 主/从复制信息
  • info cpu: 统计CPU的消耗
  • info commandstats: Redis命令统计
  • info cluster: Redis集群信息
  • info keyspace: 数据库的相关统计
info memory
# 登录redis客户端,本地:redis-cli
redis-cli -h 10.0.6.9 -p 6379
# 查看内存使用情况(单位是byte)
127.0.0.1:6379> info memory
# Memory
used_memory:871808          # Redis 保存数据申请的内存空间(单位 Byte)
used_memory_human:851.38K
used_memory_rss:7692288     # 操作系统分配给 Redis 进程的内存空间
used_memory_rss_human:7.34M
used_memory_peak:933584     # Redis 进程在运行过程中占用的内存峰值
used_memory_peak_human:911.70K
used_memory_peak_perc:93.38%
used_memory_overhead:830320
used_memory_startup:809824
used_memory_dataset:41488
used_memory_dataset_perc:66.93%
allocator_allocated:1056640
allocator_active:1273856
allocator_resident:3936256
total_system_memory:4127088640
total_system_memory_human:3.84G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0    # Redis 最大可用内存,0表示不限制,一般推荐为最大物理内存的四分之三
maxmemory_human:0B
maxmemory_policy:noeviction  # 当前策略
allocator_frag_ratio:1.21 
allocator_frag_bytes:217216
allocator_rss_ratio:3.09
allocator_rss_bytes:2662400
rss_overhead_ratio:1.95
rss_overhead_bytes:3756032
mem_fragmentation_ratio:9.26    # 内存碎片率,used_memory_rss / used_memory
mem_fragmentation_bytes:6861504
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:20496
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0
lazyfreed_objects:0
# memory help
info clients
192.168.0.39:6379> info clients
# Clients
connected_clients:1    # 已连接客户端的数量(不包括通过从属服务器连接的客户端)
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:24
client_recent_max_output_buffer:0
blocked_clients:0      # 阻塞客户端数量:最好应该为0
tracking_clients:0
clients_in_timeout_table:0
#################################
192.168.0.39:6379> client list  # 所有连接到服务器的客户端信息和统计数据
info keyspace

dbsize=Keyspace中keys,建议所有的key都设置expire,那么info keyspace结果中dbsize=keys=expires。

# 当前库key的数量
127.0.0.1:6379> dbsize
(integer) 0
# 设置key
127.0.0.1:6379> set keyA valueB 
# 统计key的总数和设置了过期的key的总数
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=1,expires=0,avg_ttl=0
# 设置过期时间(单位:秒)
127.0.0.1:6379> expire keyA 60       # 单位:秒
# 统计key的总数和设置了过期的key的总数
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=1,expires=1,avg_ttl=23088   # 单位:毫秒
  • keys : 当前库的key总数

  • expires : 当前库设置了过期时间key总数

  • avg_ttl : 平均剩余时间(avg_ttl=0:0表示没有采样记录设置过期,单位:毫秒)

集群中使用info keyspace,出现数量偏差严重则有问题,如果写入OOM,或者 info memory 返回 used_memory 大于 maxmemory,则将maxmemory调大即可,maxmemory默认为0,不限制 。

# 节点1
192.168.0.39:6379> info keyspace
# Keyspace
db0:keys=1014,expires=1003,avg_ttl=293025000
# 节点2:少量keys差异可能是由于时间差导致的
192.168.0.53:6379> info keyspace
# Keyspace
db0:keys=1009,expires=998,avg_ttl=3027986
# 节点3:该节点keys明显少于其他节点,对节点进行分析
192.168.0.38:6379> info keyspace
# Keyspace
db0:keys=600,expires=580,avg_ttl=0

七、碎片整理

https://mp.weixin.qq.com/s/0U4ZOBYzJB1GVbD-3q-Z9w

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于 Redis Cluster 的运维,可以考虑以下几个方面: 1. 部署和配置:首先,你需要在多个节点上部署 Redis 服务器,并配置它们以形成一个集群。可以使用 Redis 官方提供的 redis-trib.rb 脚本来进行集群的创建和配置。确保节点之间的网络连接正常,并且节点之间的配置文件中包含正确的集群相关信息。 2. 监控和报警:定期监控 Redis Cluster 的状态是非常重要的。你可以使用监控工具来监控 Redis 节点的 CPU、内存、网络等指标,并设置报警规则以便及时发现和解决问题。一些常用的监控工具包括 Redis Sentinel、Prometheus、Grafana 等。 3. 数据备份和恢复:定期备份 Redis Cluster 的数据是保证数据安全的重要手段之一。可以使用 Redis 自带的持久化功能(如 RDB 和 AOF),也可以结合其他工具(如 rdbtools 或者 Redis 备份工具)来进行备份。在数据丢失或节点故障时,可以通过备份数据进行恢复。 4. 扩容和缩容:当集群需要扩容或缩容时,需要进行相应的操作。对于扩容,可以通过添加新的节点来增加集群的容量;对于缩容,可以将一个节点从集群中移除。在进行扩容和缩容操作时,需要注意数据迁移和集群重新平衡的过程。 5. 故障处理和恢复:在 Redis Cluster 运行过程中,可能会出现节点故障、网络故障等问题。当发生故障时,需要及时发现问题排查原因,并进行相应的修复操作,确保集群的可用性和稳定性。 以上是对 Redis Cluster 运维的一些基本方面的介绍,希望能对你有所帮助。如果你有具体的问题或者需要更多的信息,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上富贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值