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

2024-03-05 07:20

本文主要是介绍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 集群的一般步骤和命令:

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

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

  1. 创建集群: 一旦所有节点都已启动并运行,你可以使用 Redis 提供的 redis-cli 工具来创建集群。在其中一个节点上,执行以下命令:
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 秒

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) - 集群操作手册的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/775714

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 (3)免费开源。 (4)支持中文。 (5)自动发现。 (6)分布式监控。 (7)实时绘图。 3.zabbix的主要功能