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

相关推荐
二宝哥10 小时前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
ShiXZ21316 小时前
Redis docker-compose 部署指南
redis·docker·eureka
青山木19 小时前
Redis 缓存一致性全解:从 Cache Aside 到延迟双删、Canal+MQ 的进阶之路
java·数据库·redis·后端·缓存
YDS82919 小时前
大营销平台 —— 活动SKU库存扣减业务及其一致性处理
java·spring boot·redis·rabbitmq·ddd
爬也要爬着前进1 天前
redis主从搭建
数据库·redis·缓存
用户095367515832 天前
在系统的学习 redis 前的疑惑
redis·go
吴声子夜歌2 天前
Redis 3.x——集群故障转移
java·数据库·redis·集群
明豆2 天前
Redis 分布式缓存生产实战
redis·分布式·缓存
海兰2 天前
【高速缓存】RedisVL 指南:从向量搜索到 AI 应用落地
人工智能·redis
weixin_727535622 天前
双Token认证体系深度拆解:Spring Security + JWT + Redis
redis·spring·wpf