题外话

如需转载文章,请保留文章出处(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

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐