Redis 由浅入深 (7) - 集群操作手册

目录

Redis运维查询命令

登录redis集群(登录任意一台即可)

bash 复制代码
redis-cli -h 127.0.0.1 -p 6379 -a 123456 -n [database, 0 - 16]

-h 跟host

-p 跟端口

-a 跟密码

-n 数据库 0 ~ 16 单机有效,集群默认都是0

查询redis集群信息(登录之后)

bash 复制代码
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)

bash 复制代码
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

bash 复制代码
redis-cli -h hostname -p port -a password -n database --raw --scan --pattern "pattern"

redis 启动和创建的命令

要启动 Redis 集群,你需要先确保已经正确配置了 Redis 集群的配置文件,并且安装了 Redis 的相关软件。以下是启动 Redis 集群的一般步骤和命令:

  1. 准备配置文件: 确保已经创建了适当的 Redis 集群配置文件。在配置文件中,你需要指定集群的端口、节点 IP 地址、槽分配等信息。典型的配置文件名为 redis.conf。
  2. 启动节点: 对于每个 Redis 集群节点,你需要启动一个 Redis 服务器实例。在每个节点上,使用以下命令启动 Redis 服务器:
    redis-server /path/to/redis.conf

确保每个节点都在不同的端口上运行,并且配置文件中的端口和节点信息正确匹配。

  1. 创建集群: 一旦所有节点都已启动并运行,你可以使用 Redis 提供的 redis-cli 工具来创建集群。在其中一个节点上,执行以下命令:
bash 复制代码
redis-cli --cluster create <node1_ip>:<port> <node2_ip>:<port> ... --cluster-replicas <replicas>

在这个命令中,将 <node1_ip>:, <node2_ip>: 等替换为你实际的节点 IP 地址和端口号。 是指每个主节点的备份节点数量。

  1. 等待集群创建完成: 在执行上述命令后,Redis 会开始创建集群。这个过程可能需要一些时间,取决于集群的规模和配置。一旦集群创建完成,你就可以开始向 Redis 集群发送命令了。
    请注意,这里的步骤是一个简单的示例。在实际部署中,你可能需要更多的配置和管理操作,比如监控集群、调整节点配置等。确保在生产环境中小心谨慎地操作,以确保 Redis 集群的高可用性和稳定性。

Redis 常用命令

redis常用查询命令

以下是 Redis 常见数据结构的查询命令:

  1. 字符串(String)

    当处理 Redis 中的字符串数据类型时,以下是一些常用的操作命令:

    1. 设置字符串值
    • SET key value [EX seconds|PX milliseconds|NX|XX]: 设置指定 key 的值。可选的参数包括设置过期时间、设置仅在 key 不存在时设置值(NX)、设置仅在 key 存在时设置值(XX)。
    1. 获取字符串值
    • GET key: 获取指定 key 的值。
    1. 设置并获取旧值
    • GETSET key value: 设置指定 key 的值,并返回旧值。
    1. 获取字符串长度
    • STRLEN key: 获取指定 key 的字符串长度。
    1. 追加字符串
    • APPEND key value: 在指定 key 的值后追加字符串值。
    1. 设置子字符串
    • SETRANGE key offset value: 用给定值覆盖指定 key 所储存的字符串值的子字符串。
    1. 获取子字符串
    • GETRANGE key start end: 获取指定 key 的字符串值的子字符串。
    1. 自增/自减
    • INCR key: 将指定 key 的值增加 1。
    • DECR key: 将指定 key 的值减少 1。
    • INCRBY key increment: 将指定 key 的值增加指定的增量。
    • DECRBY key decrement: 将指定 key 的值减少指定的减量。
    1. 浮点数增加
    • INCRBYFLOAT key increment: 将指定 key 存储的数值增加指定的浮点数增量。
    1. 比较并设置
    • SETNX key value: 仅在指定 key 不存在时,设置 key 的值。
    1. 多个键操作
    • MSET key value [key value ...]: 设置多个 key-value 对。
    • MGET key [key ...]: 获取多个 key 的值。
      这些命令可以用于操作 Redis 中的字符串数据类型。在实际应用中,根据需要选择适当的命令来处理字符串数据。
  2. 哈希表(Hash)

    Hash 是 Redis 中的一种数据结构,它类似于其他编程语言中的哈希表或字典,可以用来存储键值对的集合。以下是对 Hash 常见操作的详细说明:

    1. 设置字段值
    • HSET key field value: 在指定的哈希 key 中设置字段的值。
    • HMSET key field1 value1 [field2 value2 ...]: 在指定的哈希 key 中设置多个字段的值。
    1. 获取字段值
    • HGET key field: 获取指定哈希 key 中指定字段的值。
    • HMGET key field1 [field2 ...]: 获取指定哈希 key 中一个或多个字段的值。
    1. 删除字段
    • HDEL key field [field ...]: 删除指定哈希 key 中的一个或多个字段。
    1. 检查字段是否存在
    • HEXISTS key field: 检查指定哈希 key 中是否存在指定字段。
    1. 获取所有字段名
    • HKEYS key: 获取指定哈希 key 中所有字段的名字。
    1. 获取所有字段值
    • HVALS key: 获取指定哈希 key 中所有字段的值。
    1. 获取字段数量
    • HLEN key: 获取指定哈希 key 中字段的数量。
    1. 获取所有字段和值
    • HGETALL key: 获取指定哈希 key 中所有字段和值。
    1. 自增/自减
    • HINCRBY key field increment: 将指定哈希 key 中指定字段的值增加指定增量。如果字段不存在,则创建字段并将其设置为增量值。
      这些命令允许你方便地操作 Redis 中的 Hash 数据结构,对于存储和检索键值对集合是非常有用的。在使用 Hash 数据结构时,请根据具体情况选择适当的命令,以实现所需的功能。
  3. 列表(List)

    Redis 中的 List 是一个双向链表,它支持在列表的两端进行插入和删除操作,常用于实现队列、栈等数据结构。以下是 List 数据接口常用命令的详细说明:

    1. 从左端插入元素
    • LPUSH key element [element ...]: 将一个或多个值插入到列表头部。
    1. 从右端插入元素
    • RPUSH key element [element ...]: 将一个或多个值插入到列表尾部。
    1. 从左端移除元素
    • LPOP key: 移除并返回列表的第一个元素。
    1. 从右端移除元素
    • RPOP key: 移除并返回列表的最后一个元素。
    1. 获取列表长度
    • LLEN key: 获取列表的长度。
    1. 获取指定范围的元素
      - LRANGE key start stop: 获取列表中指定范围内的元素,范围从 start 到 stop。
    2. 设置指定位置的元素值
    • LSET key index value: 设置列表中指定位置的元素值。
    1. 获取指定位置的元素值
    • LINDEX key index: 获取列表中指定位置的元素值。
    1. 移除列表中指定值的元素
    • LREM key count value: 从列表中删除指定数量的与给定值相等的元素。
    1. 修剪列表
    • LTRIM key start stop: 对列表进行修剪,只保留指定范围内的元素。
    1. 阻塞式弹出元素
    • BLPOP key1 [key2 ...] timeout: 阻塞式弹出列表的第一个元素,如果列表为空,则等待直到有元素被加入或达到超时时间。
    • BRPOP key1 [key2 ...] timeout: 类似于 BLPOP,但从列表尾部弹出元素。
    1. 阻塞式弹出元素并将其添加到另一个列表
    • BRPOPLPUSH source destination timeout: 从列表 source 的尾部弹出一个元素并将其添加到列表 destination 的头部,如果 source 为空,则等待直到有元素被加入或达到超时时间。
      这些命令可以方便地对 Redis 中的 List 进行操作,实现队列、栈等数据结构的功能。在使用 List 数据结构时,请根据具体需求选择合适的命令。
  4. 集合(Set)

    • SMEMBERS key: 获取集合中的所有成员。
    • SADD key member [member ...]: 向集合添加一个或多个成员。
  5. 有序集合(Sorted Set)

    • ZRANGE key start stop [WITHSCORES]: 根据索引范围获取有序集合中的成员。
    • ZADD key score member [score member ...]: 向有序集合添加一个或多个成员,或更新已存在成员的分数。
  6. 位图(Bitmap)

    • GETBIT key offset: 获取位图指定偏移量上的位值。
    • SETBIT key offset value: 设置位图指定偏移量上的位值。
      7.地理空间(Geospatial)
    • GEOPOS key member [member ...]: 获取指定地理空间 key 中一个或多个成员的地理位置。
  7. HyperLogLog

    • PFADD key element [element ...]: 向 HyperLogLog 添加指定元素。
    • PFCOUNT key [key ...]: 获取 HyperLogLog 的基数估算值。
      这些是 Redis 常见数据结构的查询命令,每种数据结构都有相应的查询方法来获取或操作数据。在使用这些命令时,请注意适当处理数据和异常情况,并根据具体情况选择适合的命令。

redis 手动命令设置过期key操作

在 Redis 中,可以通过设置过期时间来使 key 在一段时间后自动过期。一旦 key 过期,Redis 会自动删除它。以下是设置过期时间和处理过期 key 的一些命令:

  1. 设置过期时间:
  • EXPIRE key seconds: 设置 key 的过期时间,单位为秒。
  • PEXPIRE key milliseconds: 设置 key 的过期时间,单位为毫秒。
  • EXPIREAT key timestamp: 设置 key 的过期时间戳,时间戳是一个 UNIX 时间戳,指定了 key 的过期时间点。
  1. 获取剩余时间:
  • TTL key: 获取 key 的剩余过期时间,单位为秒。如果 key 不存在或没有设置过期时间,返回 -1;如果 key 已过期,返回 -2。
  1. 处理过期 key:
  • Redis 在后台自动处理过期 key,无需手动操作。
  • 可以使用 DEL 命令手动删除已经过期的 key。
  • 也可以使用 SCAN 命令遍历所有的 key,并通过检查剩余过期时间来判断是否过期,然后删除已经过期的 key。
    示例:

设置 key "mykey" 过期时间为 60 秒

bash 复制代码
127.0.0.1:6379> SET mykey "Hello"
OK
127.0.0.1:6379> EXPIRE mykey 60
(integer) 1

获取 key "mykey" 的剩余过期时间

bash 复制代码
127.0.0.1:6379> TTL mykey
(integer) 59

等待 60 秒后,再次获取剩余过期时间

bash 复制代码
127.0.0.1:6379> TTL mykey
(integer) -2

通过设置过期时间,Redis 能够自动管理 key 的生命周期,使得开发者无需手动处理 key 的过期和删除操作。

redis 运维工具

query在线分析

bash 复制代码
redis-cli MONITOR | head -n 5000 | ./redis-faina.py   

监控正在请求执行的命令

在cli下执行monitor,生产环境慎用。

模拟oom

bash 复制代码
redis-cli debug oom

模拟宕机

bash 复制代码
redis-cli debug segfault

模拟hang

bash 复制代码
redis-cli -p 6379 DEBUG sleep 30

慢日志查询

要在 Redis 集群中查询慢日志,你可以使用以下方法:

1.通过命令行查询:在任何一个 Redis 节点上,你可以使用 redis-cli 工具来查询慢日志。以下是基本的命令:

bash 复制代码
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

相关推荐
BergerLee10 小时前
对不经常变动的数据集合添加Redis缓存
数据库·redis·缓存
huapiaoy10 小时前
Redis中数据类型的使用(hash和list)
redis·算法·哈希算法
【D'accumulation】11 小时前
令牌主动失效机制范例(利用redis)注释分析
java·spring boot·redis·后端
Cikiss11 小时前
微服务实战——SpringCache 整合 Redis
java·redis·后端·微服务
一休哥助手12 小时前
Redis 五种数据类型及底层数据结构详解
数据结构·数据库·redis
盒马盒马13 小时前
Redis:zset类型
数据库·redis
Jay_fearless15 小时前
Redis SpringBoot项目学习
spring boot·redis
Wang's Blog15 小时前
Redis: 集群环境搭建,集群状态检查,分析主从日志,查看集群信息
数据库·redis
wclass-zhengge21 小时前
Redis篇(最佳实践)(持续更新迭代)
redis·缓存·bootstrap
Dylanioucn21 小时前
【分布式微服务云原生】探索Redis:数据结构的艺术与科学
数据结构·redis·分布式·缓存·中间件