本文主要是介绍Redis 由浅入深 (7) - 集群操作手册,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- Redis运维查询命令
- 登录redis集群(登录任意一台即可)
- 查询redis集群信息(登录之后)
- 通过客户端执行命令(redis-cli)
- 查询正则“pattern”所有的key
- redis 启动和创建的命令
- Redis 常用命令
- redis 手动命令设置过期key操作
- 设置 key "mykey" 过期时间为 60 秒
- 获取 key "mykey" 的剩余过期时间
- 等待 60 秒后,再次获取剩余过期时间
- redis 运维工具
- query在线分析
- 模拟oom
- 模拟宕机
- 模拟hang
- 慢日志查询
Redis运维查询命令
登录redis集群(登录任意一台即可)
redis-cli -h 127.0.0.1 -p 6379 -a 123456 -n [database, 0 - 16]
-h 跟host
-p 跟端口
-a 跟密码
-n 数据库 0 ~ 16 单机有效,集群默认都是0
查询redis集群信息(登录之后)
cluster nodes # 显示集群中的节点信息,包括节点 ID、IP 地址、端口号等。
cluster info # 显示有关集群的信息,如槽分配情况、节点数量等。
cluster meet <ip> <port> # 将当前节点与另一个节点连接成集群。
cluster addslots <slot> [slot ...] # 将槽分配给当前节点。
cluster delslots <slot> [slot ...] # 将槽从当前节点中删除。
cluster rebalance # 重新分配槽,使集群中的槽在节点之间平衡分布。
cluster failover [force|takeover] # 手动触发故障转移,将主节点切换到备份节点。
cluster forget <node_id> # 从集群中移除指定节点。
cluster replicate <node_id> # 将当前节点作为指定节点的备份节点。
cluster flushslots # 清空当前节点的所有槽。
cluster keyslot <key> # 返回给定键被分配到的槽号。
cluster countkeysinslot <slot> # 返回指定槽中包含的键的数量。
cluster getkeysinslot <slot> <count> # 返回指定槽中的键列表(不推荐在生产环境中使用,可能会导致性能问题)。
通过客户端执行命令(redis-cli)
redis-cli -h {host} -p {port} {command} # 直接得到命令的返回结果。
$redis-cli -h 127.0.0.1-p 6379 get hello # 输出world
redis-cli -r 3 ping # 表示重复执行3次
redis-cli -r 3 -i 1 ping # 每隔几秒(如果想用ms,如10ms则写0.01)执行一次命令,必须与-r一起使用。
redis-cli -r 10 -i 1 info|grep used_memory_human # 每隔1秒输出内存的使用量,一共输出10次。
redis-cli -h ip -p port info server|grep process_id # 获取redis的进程号999
-r
[times] 重复执行几次
-h
[host]
-i
几秒执行一次
-x
代表从标准输入读取数据作为该命令的最后一个参数。echo "world" |redis-cli -x set hello
-c
连接集群结点时使用,此选项可防止moved和ask异常。
-a
如配置了密码,可用a选项。
--scan
和--pattern
用于扫描指定模式的键,相当于scan命令。
--slave
当当前客户端模拟成当前redis节点的从节点,可用来获取当前redis节点的更新操作。合理利用可用于记录当前连接redis节点的一些更新操作,这些更新可能是实开发业务时需要的数据。
--rdb
会请求redis实例生成并发送RDB持久化文件,保存在本地。可做定期备份。
--pipe
将命令封装成redis通信协议定义的数据格式,批量发送给redis执行。
--bigkeys
统计bigkey的分布,使用scan命令对redis的键进行采样,从中找到内存占用比较大的键,这些键可能是系统的瓶颈。
--eval
用于执行lua脚本
--latency
有三个选项,–latency、–latency-history、–latency-dist。它们可检测网络延迟,展现的形式不同。
--stat
可实时获取redis的重要统计信息。info命令虽然比较全,但这里可看到一些增加的数据,如requests(每秒请求数)
--raw
和 --no-raw
–no-raw 要求返回原始格式。–raw 显示格式化的效果。
查询正则“pattern”所有的key
redis-cli -h hostname -p port -a password -n database --raw --scan --pattern "pattern"
redis 启动和创建的命令
要启动 Redis 集群,你需要先确保已经正确配置了 Redis 集群的配置文件,并且安装了 Redis 的相关软件。以下是启动 Redis 集群的一般步骤和命令:
- 准备配置文件: 确保已经创建了适当的 Redis 集群配置文件。在配置文件中,你需要指定集群的端口、节点 IP 地址、槽分配等信息。典型的配置文件名为 redis.conf。
- 启动节点: 对于每个 Redis 集群节点,你需要启动一个 Redis 服务器实例。在每个节点上,使用以下命令启动 Redis 服务器:
redis-server /path/to/redis.conf
确保每个节点都在不同的端口上运行,并且配置文件中的端口和节点信息正确匹配。
- 创建集群: 一旦所有节点都已启动并运行,你可以使用 Redis 提供的 redis-cli 工具来创建集群。在其中一个节点上,执行以下命令:
redis-cli --cluster create <node1_ip>:<port> <node2_ip>:<port> ... --cluster-replicas <replicas>
在这个命令中,将 <node1_ip>:, <node2_ip>: 等替换为你实际的节点 IP 地址和端口号。 是指每个主节点的备份节点数量。
- 等待集群创建完成: 在执行上述命令后,Redis 会开始创建集群。这个过程可能需要一些时间,取决于集群的规模和配置。一旦集群创建完成,你就可以开始向 Redis 集群发送命令了。
请注意,这里的步骤是一个简单的示例。在实际部署中,你可能需要更多的配置和管理操作,比如监控集群、调整节点配置等。确保在生产环境中小心谨慎地操作,以确保 Redis 集群的高可用性和稳定性。
Redis 常用命令
redis常用查询命令
以下是 Redis 常见数据结构的查询命令:
-
字符串(String)
当处理 Redis 中的字符串数据类型时,以下是一些常用的操作命令:- 设置字符串值
SET key value [EX seconds|PX milliseconds|NX|XX]
: 设置指定 key 的值。可选的参数包括设置过期时间、设置仅在 key 不存在时设置值(NX)、设置仅在 key 存在时设置值(XX)。
- 获取字符串值
GET key
: 获取指定 key 的值。
- 设置并获取旧值
GETSET key value
: 设置指定 key 的值,并返回旧值。
- 获取字符串长度
STRLEN key
: 获取指定 key 的字符串长度。
- 追加字符串
APPEND key value
: 在指定 key 的值后追加字符串值。
- 设置子字符串
SETRANGE key offset value
: 用给定值覆盖指定 key 所储存的字符串值的子字符串。
- 获取子字符串
GETRANGE key start end
: 获取指定 key 的字符串值的子字符串。
- 自增/自减
INCR key
: 将指定 key 的值增加 1。DECR key
: 将指定 key 的值减少 1。INCRBY key increment
: 将指定 key 的值增加指定的增量。DECRBY key decrement
: 将指定 key 的值减少指定的减量。
- 浮点数增加
INCRBYFLOAT key increment
: 将指定 key 存储的数值增加指定的浮点数增量。
- 比较并设置
SETNX key value
: 仅在指定 key 不存在时,设置 key 的值。
- 多个键操作
MSET key value [key value ...]
: 设置多个 key-value 对。MGET key [key ...]
: 获取多个 key 的值。
这些命令可以用于操作 Redis 中的字符串数据类型。在实际应用中,根据需要选择适当的命令来处理字符串数据。
-
哈希表(Hash)
Hash 是 Redis 中的一种数据结构,它类似于其他编程语言中的哈希表或字典,可以用来存储键值对的集合。以下是对 Hash 常见操作的详细说明:- 设置字段值
HSET key field value
: 在指定的哈希 key 中设置字段的值。HMSET key field1 value1 [field2 value2 ...]
: 在指定的哈希 key 中设置多个字段的值。
- 获取字段值
HGET key field
: 获取指定哈希 key 中指定字段的值。HMGET key field1 [field2 ...]
: 获取指定哈希 key 中一个或多个字段的值。
- 删除字段
HDEL key field [field ...]
: 删除指定哈希 key 中的一个或多个字段。
- 检查字段是否存在
HEXISTS key field
: 检查指定哈希 key 中是否存在指定字段。
- 获取所有字段名
HKEYS key
: 获取指定哈希 key 中所有字段的名字。
- 获取所有字段值
HVALS key
: 获取指定哈希 key 中所有字段的值。
- 获取字段数量
HLEN key
: 获取指定哈希 key 中字段的数量。
- 获取所有字段和值
HGETALL key
: 获取指定哈希 key 中所有字段和值。
- 自增/自减
HINCRBY key field increment
: 将指定哈希 key 中指定字段的值增加指定增量。如果字段不存在,则创建字段并将其设置为增量值。
这些命令允许你方便地操作 Redis 中的 Hash 数据结构,对于存储和检索键值对集合是非常有用的。在使用 Hash 数据结构时,请根据具体情况选择适当的命令,以实现所需的功能。
-
列表(List)
Redis 中的 List 是一个双向链表,它支持在列表的两端进行插入和删除操作,常用于实现队列、栈等数据结构。以下是 List 数据接口常用命令的详细说明:- 从左端插入元素
LPUSH key element [element ...]
: 将一个或多个值插入到列表头部。
- 从右端插入元素
RPUSH key element [element ...]
: 将一个或多个值插入到列表尾部。
- 从左端移除元素
LPOP key
: 移除并返回列表的第一个元素。
- 从右端移除元素
RPOP key
: 移除并返回列表的最后一个元素。
- 获取列表长度
LLEN key
: 获取列表的长度。
- 获取指定范围的元素
-LRANGE key start stop
: 获取列表中指定范围内的元素,范围从 start 到 stop。 - 设置指定位置的元素值
LSET key index value
: 设置列表中指定位置的元素值。
- 获取指定位置的元素值
LINDEX key index
: 获取列表中指定位置的元素值。
- 移除列表中指定值的元素
LREM key count value
: 从列表中删除指定数量的与给定值相等的元素。
- 修剪列表
LTRIM key start stop
: 对列表进行修剪,只保留指定范围内的元素。
- 阻塞式弹出元素
BLPOP key1 [key2 ...] timeout
: 阻塞式弹出列表的第一个元素,如果列表为空,则等待直到有元素被加入或达到超时时间。BRPOP key1 [key2 ...] timeout
: 类似于 BLPOP,但从列表尾部弹出元素。
- 阻塞式弹出元素并将其添加到另一个列表
BRPOPLPUSH source destination timeout
: 从列表 source 的尾部弹出一个元素并将其添加到列表 destination 的头部,如果 source 为空,则等待直到有元素被加入或达到超时时间。
这些命令可以方便地对 Redis 中的 List 进行操作,实现队列、栈等数据结构的功能。在使用 List 数据结构时,请根据具体需求选择合适的命令。
-
集合(Set)
- SMEMBERS key: 获取集合中的所有成员。
- SADD key member [member …]: 向集合添加一个或多个成员。
-
有序集合(Sorted Set)
- ZRANGE key start stop [WITHSCORES]: 根据索引范围获取有序集合中的成员。
- ZADD key score member [score member …]: 向有序集合添加一个或多个成员,或更新已存在成员的分数。
-
位图(Bitmap)
- GETBIT key offset: 获取位图指定偏移量上的位值。
- SETBIT key offset value: 设置位图指定偏移量上的位值。
7.地理空间(Geospatial) - GEOPOS key member [member …]: 获取指定地理空间 key 中一个或多个成员的地理位置。
-
HyperLogLog
- PFADD key element [element …]: 向 HyperLogLog 添加指定元素。
- PFCOUNT key [key …]: 获取 HyperLogLog 的基数估算值。
这些是 Redis 常见数据结构的查询命令,每种数据结构都有相应的查询方法来获取或操作数据。在使用这些命令时,请注意适当处理数据和异常情况,并根据具体情况选择适合的命令。
redis 手动命令设置过期key操作
在 Redis 中,可以通过设置过期时间来使 key 在一段时间后自动过期。一旦 key 过期,Redis 会自动删除它。以下是设置过期时间和处理过期 key 的一些命令:
- 设置过期时间:
EXPIRE key seconds
: 设置 key 的过期时间,单位为秒。PEXPIRE key milliseconds
: 设置 key 的过期时间,单位为毫秒。EXPIREAT key timestamp
: 设置 key 的过期时间戳,时间戳是一个 UNIX 时间戳,指定了 key 的过期时间点。
- 获取剩余时间:
TTL key
: 获取 key 的剩余过期时间,单位为秒。如果 key 不存在或没有设置过期时间,返回 -1;如果 key 已过期,返回 -2。
- 处理过期 key:
- Redis 在后台自动处理过期 key,无需手动操作。
- 可以使用
DEL
命令手动删除已经过期的 key。 - 也可以使用
SCAN
命令遍历所有的 key,并通过检查剩余过期时间来判断是否过期,然后删除已经过期的 key。
示例:
设置 key “mykey” 过期时间为 60 秒
127.0.0.1:6379> SET mykey "Hello"
OK
127.0.0.1:6379> EXPIRE mykey 60
(integer) 1
获取 key “mykey” 的剩余过期时间
127.0.0.1:6379> TTL mykey
(integer) 59
等待 60 秒后,再次获取剩余过期时间
127.0.0.1:6379> TTL mykey
(integer) -2
通过设置过期时间,Redis 能够自动管理 key 的生命周期,使得开发者无需手动处理 key 的过期和删除操作。
redis 运维工具
query在线分析
redis-cli MONITOR | head -n 5000 | ./redis-faina.py
监控正在请求执行的命令
在cli下执行monitor
,生产环境慎用。
模拟oom
redis-cli debug oom
模拟宕机
redis-cli debug segfault
模拟hang
redis-cli -p 6379 DEBUG sleep 30
慢日志查询
要在 Redis 集群中查询慢日志,你可以使用以下方法:
1.通过命令行查询:在任何一个 Redis 节点上,你可以使用 redis-cli 工具来查询慢日志。以下是基本的命令:
redis-cli -c -h <node_ip> -p <port> slowlog get <n>
其中, 是你想要查询的慢日志条目数量。你也可以使用其他参数和选项来调整查询结果,例如使用 slowlog len 命令查看慢日志的长度。
2.通过编程接口查询:如果你正在使用 Redis 的编程接口(如 Python 的 redis-py、Node.js 的 ioredis 等),你可以使用相应的客户端库来查询慢日志。这通常通过执行 SLOWLOG GET 命令来完成,具体实现方式会因语言和库而异。
3.使用监控工具:一些监控工具可以帮助你更方便地查询和分析 Redis 集群的慢日志,例如 RedisInsight、RedisStat 等。在执行慢日志查询时,你需要注意以下几点:
- 在生产环境中,建议定期查询慢日志,并根据查询结果进行优化。
- 对于生产环境,避免频繁查询慢日志,以免影响 Redis 服务器性能。
- 如果发现某个节点的慢查询频率较高,需要仔细分析具体的慢查询原因,并针对性地优化相关代码或查询。
参考文献
http://doc.redisfans.com/index.html
这篇关于Redis 由浅入深 (7) - 集群操作手册的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!