我们天天都在使用 Redis 内置的命令行工具 redis-cli,久而久之以为它就是一个简单的交互式 Redis 数据结构手工操作程序,但是它背后强大的功能绝大多数同学可能闻所未闻。...执行单条命令 平时在访问 Redis 服务器,一般都会使用 redis-cli 进入交互模式,然后一问一答来读写服务器,这种情况下我们使用的是它的「交互模式」。...在交互模式下也可以重复执行指令,形式上比较怪异,在指令前面增加次数 127.0.0.1:6379> 5 ping PONG PONG PONG PONG PONG # 下面的指令很可怕,你的屏幕要愤怒了...redis-cli 提供了 --bigkeys 参数可以很快扫出内存里的大 KEY,使用 -i 参数控制扫描间隔,避免扫描指令导致服务器的 ops 陡增报警。 $ ....采样服务器指令 现在线上有一台 Redis 服务器的 OPS 太高,有很多业务模块都在使用这个 Redis,如何才能判断出来是哪个业务导致了 OPS 异常的高。
redis-cli是一个终端程序,用于向redis服务器发送命令和读取响应。它包括两种模式:交互模式和命令模式。...PING # 指定数据库 redis-cli -n 1 INCR mycounter 输入流: redis-cli -x SET mykey < /etc/services 重复运行: redis-cli..., 23 切换主机: 127.0.0.1:6379> connect metal 6379 metal:6379> PING PONG 扫描大Key: redis-cli --bigkeys [00.00%...with 3 fields (00.20% of keys, avg size 3.00) 0 zsets with 0 members (00.00% of keys, avg size 0.00) 监控模式..."PING" "SELECT","0" "SET","last_name","Enigk" "PING" "INCR","mycounter" LRU模拟: 测试使用管道,会对服务器造成压力,不要在生产环境使用
除了上面的方式 还可以在交互模式中前面加数字用于重复执行命令 ? 随时间监视RSS内存大小 redis-cli -r -1 -i 1 INFO | grep rss_human ?...然后执行批量执行的命令 cat /tmp/commands.txt | /usr/local/bin/redis-cli --pipe > /tmp/batchout.tx 使用命令 --pipe使用管道模式...在这种模式下,每秒钟都会打印一条新行,其中包含有用的信息以及旧数据点之间的差异。您可以轻松了解内存使用情况,连接的客户端等情况 扫描大键 在这种特殊模式下,它redis-cli充当键空间分析器。...该模式通过该–bigkeys选项启用,并产生非常详细的输出: 先设置一个大值,将之前一个大文件设置为一个值 /usr/local/bin/redis-cli -x set bigkeyname 交互模式上去看看;keys 'lru:*' ?
---- 背景 诊断 内存使用分布监控 异常与正常实例内存使用对比 碎片率使用情况 Bigkeys 扫描分析 结论 背景 问题发生背景为某生产 Redis 集群(版本 Redis 5.0.10 ,架构为...info memory |grep -w used_memory ##内存使用 used_memory:104917416 ### 异常实例 redis-cli -p 6382 -h 10.186.62.5...info memory |grep -w used_memory ## 内存使用 used_memory:373672656 碎片率使用情况 异常实例内存碎片正常,排除碎片过多情况 redis-cli...扫描分析 前面分析未果,尝试通过 bigkeys 分析扫描(为避免影响业务操作,建议业务低峰进行) 扫描结果如下(截取关键部分) # redis-cli -p 6382 -h 10.186.62.56...不失为一种快速有效的排查方法,但是需要注意在低峰期执行 redis-cli -p {port} -h {host} --bigkeys BTW,如果大家需要模拟 Redis 的大键、大量数据、或阻塞可以通过一些好用的
scan 参数提供了三个参数,第一个是 cursor 整数值,第二个是 key 的正则模式,第三个是遍历的 limit hint。...那如何定位大 key 呢?...$redis-cli --bigkeys # Scanning the entire keyspace to find biggest keys as well as # average sizes...$redis-cli --bigkeys -i 0.1 # Scanning the entire keyspace to find biggest keys as well as # average...使用bigkeys一定要注意这一点。 slowlog命令 上面提到不能使用keys命令,如果就有开发这么做了呢,我们如何得知?
---- 如何发现BigKey 总结下无非几个点 应用异常日志 (没法直接从日志关键字中看出来,因为这个bigkey阻塞以后,会引发一些奇怪的问题,比如从连接池获取不到连接等等) redis-cli -...-bigkeys 监控系统上报 其他… redis-cli --bigkeys 先看下 redis-cli 都支持什么参数 [redis@artisan bin]$ ....--bigkeys Sample Redis keys looking for big keys..../redis-cli --bigkeys # Scanning the entire keyspace to find biggest keys as well as # average sizes...object命令: https://redis.io/commands/object ---- 如何优雅的删除BigKey (lazy delete) 传统的方式: DEL 呗 ?
诊断 内存使用分布监控 查看内存使用分布发现,该异常分片实例内存 Redis 使用为356M左右,单个 redis 最大可用内存512M 其它正常分片 redis 内存使用为100M 以内 图片 异常与正常实例内存使用对比...info memory |grep -w used_memory ##内存使用 used_memory:104917416 ### 异常实例 redis-cli -p 6382 -h 10.186.62.5...info memory |grep -w used_memory ## 内存使用 used_memory:373672656 碎片率使用情况 异常实例内存碎片正常,排除碎片过多情况 redis-cli...扫描分析 前面分析未果,尝试通过 bigkeys 分析扫描(为避免影响业务操作,建议业务低峰进行) 扫描结果如下(截取关键部分) # redis-cli -p 6382 -h 10.186.62.56...不失为一种快速有效的排查方法,但是需要注意在低峰期执行 redis-cli -p {port} -h {host} --bigkeys BTW,如果大家需要模拟 Redis 的大键、大量数据、或阻塞可以通过一些好用的
2、redis-cli --bigkeys命令。可以找到某个实例5种数据类型(String、hash、list、set、zset)的最大key。...3、自定义的扫描脚本,以Python脚本居多,方法与redis-cli --bigkeys类似。 4、debug object key命令。...redis-cli --bigkeys命令 Redis-cli --bigkeys是redis-cli自带的一个命令。它对整个redis进行扫描,寻找较大的key,并打印统计结果。...redis-cli --bigkeys的优点是可以在线扫描,不阻塞服务;缺点是信息较少,内容不够精确。扫描结果中只有string类型是以字节长度为衡量标准的。...未来,个推将会持续关注Redis 5.0及后续的Redis 6.0,与大家共同探讨如何更好地使用Redis。
连续输出,默认interval 1s 键数 | 内存 | 客户端数 | 阻塞数 | 累积请求(增加请求) | 连接数 二、--bigkeys 扫描大key 命令:redis-cli -h host -p...port --bigkeys 输出: ?...命令:redis-cli -h host -p port --latency 输出: ?...六、--lru-test 测试Redis的LRU实现的质量 模拟使用80-20%幂律分布来执行对GET和SET操作的模拟。...命令:redis-cli -h host -p port --lru-test 测试键数 输出: ?
--raw 返回结果必须是原始的格式 --noraw 返回格式化后的结果 --csv 输出使用 CSV 格式 --stat 滚动打印关于服务端中 内存、客户端等 统计信息 --latency 进入一个特殊模式连续显示客户端到目标...--pipe-timeout 类似 --pipe 只是添加了一个超时处理 --bigkeys 使用SCAN命令对 Redis 的键进行采样,从中找到内存占用比较大的键值。...--scan 使用 SCAN 命令查询所有 key --pattern 配合 –scan 命令扫描指定模式的键 --intrinsic-latency 运行一个测试来衡量内在的系统延迟...像 –ldb 采用同步的 Lua 调试器,在这种模式下,服务端将会阻塞,脚本改变的内容是不会从服务端内存回滚的。... 使用: --bigkeys 使用: coderknock:CMD>redis-cli -a admin123 --bigkeys # Scanning the entire keyspace
引言 在日常开发中,我们经常会遇到需要与远程服务器进行交互的场景。其中,SSH登录是一个经典的例子。但当这种登录逻辑变得复杂时,如何优雅地管理不同状态与交互呢?...在本文中,我们将使用Python的pexpect库作为实例,讨论如何通过结合状态模式和策略模式来解决这个问题。...在这种复杂的交互场景中,状态模式和策略模式可能单独使用时都不能完全满足需求,因为需要根据上下文来动态决定行为。这时,我们可以考虑使用状态模式和策略模式的结合。...这种设计模式的结合提供了一种优雅的方式来管理复杂的交互和状态转换,非常适用于SSH登录以及其他复杂的交互场景。 希望通过这篇文章,您能更深入地理解如何使用状态模式和策略模式来解决实际问题。...以上就是关于如何通过状态模式和策略模式优化复杂SSH登录逻辑的全部内容,谢谢您的阅读!
如何查找bigkey redis-cli --bigkeys 可以通过redis客户端提供的命令 redis-cli --bigkeys来查看 $ redis-cli --bigkeys # Scanning...members (00.00% of keys, avg size 0.0 好处:给出每种数据结构Top 1 bigkey,同时给出每种数据类型的键值个数+平均大小 不足:想查询大于10kb的所有key,–bigkeys...bigKey如何删除 如果一下子释放大量的内存,空闲内存块链表操作时间会增加,相应地就会造成Redis主线程阻塞,如果redis主线程发生了阻塞其他客户端的请求可能会超时,如果超时的连接越来越多会造成各自异常问题...list: 使用ltrim渐进式逐步删除,直到全部删除完成 set: 使用sscan每次获取部分元素,在使用srem命令删除每个元素 zset: 使用zscan每次获取部分元素,在使用zremrangebyrank...命令删除每个元素 hash使用hscan每次获取少量field-value,再使用hdel删除每个field unlink 对于string类型可以使用del也可以使用unlink unlink命令是
--bigkeys 命令 可以找到某个实例5种数据类型 String、hash、list、set、zset 的最大key [redis@olive bin]$ ..../redis-cli -h 127.0.0.1 -p 6379 --bigkeys # Scanning the entire keyspace to find biggest keys as well...scan 方式对 key 进行统计,所以使用时无需担心对 redis 造成阻塞。...0x03:自定义扫描脚本 以 Python 脚本居多,使用方式与 redis-cli --bigkeys类似。...memory usage 使用非常简单,直接按 memory usage key名字;如果当前key 存在,则返回 key 的 value 实际使用内存估算值;如果 key 不存在,则返回 nil。
不要使用kill -9强制杀死,这样不会做持久化,还会造成缓冲区等资源不能被优雅关闭,极端情况会造成AOF和复制丢失数据。...redis-cli shutdown #链接 Redis 服务器 -h 地址 -p 端口 -c 密码 表示去链接一个集群 redis-cli -h 127.0.0.1 -p 7000 #链接 Redis...服务器,非交互操作。...在最后面添加命令即可 redis-cli get name #显示大个的键值 redis-cli --bigkeys #查看统计信息 redis-cli --stat 二.sql命令 #查询显示所有key
当我们使用 Selenium 开发爬虫的时候,使用 Jupyter 写代码会比用 PyCharm 写代码更方便。...注意,其中有很长一段函数是使用async声明的,它是异步函数。在 Node.js 的交互环境里面,必须把整段函数全部写进去,一次性运行,不能一段一段运行。...这不是白白浪费了交互环境的优势吗? 但实际上,Node.js 与 Chrome 本身就有一个很好用的交互环境,但很多人可能并不知道。 要启动这个交互模式,实际上非常简单。我们从0开始来创建这个环境。...现在我们已经可以直接使用await了!...这才叫做交互环境。
近水楼台之GeoHash Redis3.2开始的Geo模块.可通过二维的经纬度表示.使用勾股定理算出元素之间的距离,通过矩形区域现定元素数量,然后按着距离排序。...但是大多数时候,只是想获取某个地理位置附近的其他地理位置,使用georadiusbymember则更为方便。...众里寻他千百度 scan 如何在成千上万个key中删除特定前缀的key或者修改呢。 ? ?...pattern - 匹配的模式。 count - 指定从数据集里返回多少元素,默认值为 10 。 ?...大key扫描 redis-cli -h 127.0.0.1 -p7001 --bigkeys 预防ops报警 redis-cli -h 127.0.0.1 -p7001 --bigkeys -i 0.1
持久化机制具体底层是如何实现的?...来看看如何远程备份 rdb 文件: # 远程服务器会执行bgsave操作,然后将 rdb 文件传输到当前客户端 $ redis-cli -host 192.168.x.x -port 6379 -a password...MONITOR 实时监控服务器的状态: redis-cli --stat ?...client list 扫描大 KEY:redis-cli --bigkeys -i 0.1 ?...redis-cli --bigkeys 欢迎关注我的个人公众号:超级码里奥 如果这对您有帮助,欢迎点赞和分享,转载请注明出处
强烈建议生产环境屏蔽keys命令(后面会介绍如何屏蔽)。 scan 既然keys命令不允许使用,那么有什么代替方案呢?有!那就是scan命令。...slowlog 上面提到不能使用keys命令,如果就有开发这么做了呢,我们如何得知?与其他任意存储系统例如mysql,mongodb可以查看慢日志一样,redis也可以,即通过命令slowlog。...我们如何检查生产环境上一些有问题的数据。...bigkeys就派上用场了,用法如下: redis-cli -p 6380 --bigkeys 执行结果如下: ... ... -------- summary ------- Sampled 526...使用bigkeys一定要注意这一点。 monitor 假设生产环境没有屏蔽keys等一些高危命令,并且slowlog中还不断有新的keys导致慢日志。那我们如何揪出这些命令是由谁执行的呢?
如何发现 Bigkey 使用 Redis 的内置命令行 $ redis-cli --bigkeys # Scanning the entire keyspace to find biggest keys...如果是主从,最好使用从节点执行。 # redis-cli 会没扫描 100 次暂停 0.1 秒 ..../redis-cli --bigkeys -i 0.1 使用 redis-cli --bigkey 不足: 这个方法只能返回每种类型中最大的那个 bigkey,无法得到大小排在前 N 位的 bigkey...#pattern - 匹配的模式。 #count - 可选,用于指定每次迭代返回的 key 的数量,默认值为 10 。...具体使用手册可以访问redis-rdb-tool 如何处理 Bigkey 当发现 Bigkey 的时候,不应该直接删除。而是通知调用方,让调用方去处理。选择数据结构、拆分大型字符串、压缩数据等。