Redis 常用运维命令
Redis常用运维命令
题外话
如需转载文章,请保留文章出处(knight.blog.csdn.net)。因为我的很多文章一般是会进行更新的。也避免百度搜出来一大推相似的文章,却找不到原创博主。
常用命令的官网参考
##
https://redis.io/docs/reference/clients/#client-timeouts
##
https://redis.io/commands/client-kill/
### Redis命令参考(比较全)
http://doc.redisfans.com/index.html
Redis slot理解
Redis中的插槽(slot)是用于实现集群分片(Cluster Sharding)的一种机制。Redis集群是由多个节点组成的分布式系统,每个节点可以处理一部分数据,插槽就是用来划分数据的单位,每个插槽(slot)可以存储一个键值对。
Redis使用了16384个插槽,每个节点可以负责处理其中的一部分插槽,一个插槽只会被分配给一个节点处理。当一个节点需要处理一个未分配的插槽时,它会向其他节点发送一个“槽迁移”请求,将该插槽从原节点迁移到自己的节点上。槽迁移的过程是自动的,不需要用户干预。
插槽的划分是由Redis集群的节点自动进行的。当一个新的节点加入集群时,它会接收一部分插槽,当一个节点从集群中移除时,它的插槽会被自动迁移到其他节点上。这种自动化的插槽管理机制,使得Redis集群具有较好的扩展性和容错性。
常用开发命令
# 查看键是否存在
exists namefdsaf
# 设置键过期
expire key_name
# 查看事件通知
xx:6379> config get notify-keyspace-events
1) "notify-keyspace-events"
2)
常用运维命令
(1)info命令
info
info all
info clients
## 列出所有的key
keys *
##
keys apple*
集群命令
## 查看集群模式
cluster nodes
查看主从关系:
info replication
查看哨兵关系
info Sentinel
(2)查看redis的连接
client list
(3)config get 命令查看信息
# 查看连结数限制
config get maxclients
## 查看数据路径
config get dir
# 开启键空间通知功能需要消耗一些 CPU,所以在默认配置下,该功能处于关闭状态
# 查看键空间通知
config get notify-keyspace-events
(4)查看timeout设置以及修改
CONFIG GET timeout
## 在线修改参数值
config set timeout 600
config rewrite
## 开启过期事件通知
192.168.0.36:6300> config set notify-keyspace-events Ex
OK
192.168.0.36:6300> config get notify-keyspace-events
1) "notify-keyspace-events"
2) "xE"
(5) 查看所有的限制
config get max*
(6) 导出到shell进行分析
redis-cli -h ip地址 -a 密码 -p 6301 client list > redis.txt
(7) 查看数据类型
type key # 查看数据类型
lrange key start end # 如果是list遍历打印
(8)模糊查看keys
ip:6301[1]> keys distributionRule:com_id_10029*
1) "distributionRule:com_id_10029:one_level_channel_id_553"
2) "distributionRule:com_id_10029:one_level_channel_id_1363"
3) "distributionRule:com_id_10029:one_level_channel_id_3108"
4) "distributionRule:com_id_10029:one_level_channel_id_1364"
5) "distributionRule:com_id_10029:one_level_channel_id_2815"
6) "distributionRule:com_id_10029:one_level_channel_id_1362"
shell操作redis:
# 切库查询
redis-cli -h localhost -a xx -p 6305 -n 1 "get" "sex" 2>/dev/null
(9) 批量删除keys
方法一:
127.0.0.1:6379> set aa_1 "tom"
OK
127.0.0.1:6379> set aa_2 "rose"
OK
127.0.0.1:6379> set aa_3 "knight"
OK
127.0.0.1:6379> keys aa_*
1) "aa_3"
2) "aa_1"
3) "aa_2"
127.0.0.1:6379> del aa_*
(integer) 0
127.0.0.1:6379> keys aa_*
1) "aa_3"
2) "aa_1"
3) "aa_2"
127.0.0.1:6379> exit
$ redis-cli keys aa_*
1) "aa_3"
2) "aa_1"
3) "aa_2"
$ redis-cli keys aa_*|xargs redis-cli del
(integer) 3
$ redis-cli keys aa_*
(empty list or set)
方法二:
redis-cli --scan |grep aa_|xargs redis-cli del
方法三:
redis-cli -p 6305 -n 0 -a password keys 'n*' | xargs redis-cli -p 6305 -a password del
(10) 哨兵操作相关
连接哨兵的端口,通过info命令查看,可以知道后端的真实的Redis地址。
# Sentinel
sentinel_masters:2
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=xxsrv_dev,status=ok,address=10.16.193.244:6300,slaves=1,sentinels=3
master1:name=xx_srv_stg,status=ok,address=10.16.193.244:6301,slaves=0,sentinels=3
(11) List 操作相关
# 遍历list
127.0.0.1:6301> lrange xx_list 0 -1
1) "a3"
2) "a2"
3) "a1"
# 写list
127.0.0.1:6301> rpush listkey a b c
(12) 查找Redis中比较大的key。
redis中的key如果超过10K,算比较大了,想查找大的key,因为大的key会影响Redis的性能我们可以通过以下方式实现:
pip install rdbtools
我们通过查找Redis的配置文件,找到数据文件位置。
# 其他内容省略
dbfilename "dump.rdb"
dir "/data/data/redis/6300"
slave-serve-stale-data yes
通过命令导出到csv文件:
rdb -c memory /data/data/redis/6300/dump.rdb >res.csv
然后我们通过 csv文件的 size_in_bytes 进行排序就可以了。
(13)设置key的失效时间
方式一:
127.0.0.1:6305> set site "www.baidu.com"
OK
# 设置过期时间为10s
127.0.0.1:6305> expire site 10
(integer) 1
# 查看剩余过期时间
127.0.0.1:6305> ttl site
(integer) 6
127.0.0.1:6305>
方式二:
127.0.0.1:6305> setex name 10 tom
OK
127.0.0.1:6305> ttl name
(integer) 7
127.0.0.1:6305>
(14)性能分析
--- 监控当前实时执行的命令操作
redis-cli -h 192.168.191.11 -p 6379 -a aaaaaa -i 0.1 monitor
--- 大key扫描,qps会上涨,cpu大概会涨10%,在从库进行分析
redis-cli -h 192.168.191.11 -p 6379 -a aaaaaa --bigkeys -i 0.1
大key:
(1) 什么是Redis的大key?
- 单个key 存储的 value 很大
- hash, set,zset,list 结构中存储过多的元素
(2)大key可以造成的危害
- 内存不均:单value较大时,可能会导致节点之间的内存使用不均匀,间接地影响key的部分和负载不均匀。
- 阻塞请求:redis为单线程,单value较大读写需要较长的处理时间,会阻塞后续的请求处理;
- 阻塞网络:单value较大时会占用服务器网卡较多带宽,可能会影响该服务器上的其他Redis实例或者应用。
- 主动删除、被动过期删除、数据迁移等,由于处理这一个KEY时间长,导致服务端发生阻塞;
查找key的大小:
##
pip install rdbtools
rdb -c memory /data/dump.rdb > /tmp/result.csv
更多推荐
所有评论(0)