Redis-Cli 的功能太强大了,你真的了解吗?

存储 存储软件 Redis
玩过redis的朋友应该都知道有一个叫做 redis-cli 的客户端小工具,在实际开发中相信很多人只知道用 redis-cli 进行 REPL 式的交互,其实这只是一个非常小的子集,比如利用它可以在test和develop环境下进行高效的模拟测试,接下来我逐一给大家演示下。

[[347938]]

 玩过redis的朋友应该都知道有一个叫做 redis-cli 的客户端小工具,在实际开发中相信很多人只知道用 redis-cli 进行 REPL 式的交互,其实这只是一个非常小的子集,比如利用它可以在test和develop环境下进行高效的模拟测试,接下来我逐一给大家演示下。

一:非REPL (Read Eval Print Loop) 模式

通常我们都是使用REPL模式,就是连接端口之后,发一条 request 再等待 response 这样一个loop的形式,如下所示:

  1. [root@localhost Desktop]# redis-cli -h 192.168.1.216 
  2. 192.168.1.216:6379> set username jack 
  3. OK 
  4. 192.168.1.216:6379> set password 12345 
  5. OK 
  6. 192.168.1.216:6379> 

其实我还可以直接在命令行中使用 redis-cli 再配合各种附加参数,效果和上面是一模一样的,比如下面这样:

  1. [root@localhost Desktop]# redis-cli -h 192.168.1.216 set username jack 
  2. OK 
  3. [root@localhost Desktop]# redis-cli -h 192.168.1.216 set password 12345 
  4. OK 
  5. [root@localhost Desktop]# 

看到没有,是不是有点意思哈~~~

二:从本地文件中执行命令导入

这功能还是挺酷的,你可以把本地文件中的一组redis命令直接导入到 redis-cli 中执行,免去了一行一行键入之苦,对不对,工作量可是大大的减轻了哈,参照下面流程。

1. 新建目录

在 /usr/ 下面新建一个txt文件,执行两个set操作。

 

然后用 < 命令导入就可以了,这里216的ip是本地局域网内的一台虚拟机,是不是有点像pipeline管道操作,🐂👃吧~~~ 如下所示:

  1. [root@localhost Desktop]# redis-cli -h 192.168.1.216 < /usr/1.txt 
  2. OK 
  3. OK 
  4. [root@localhost Desktop]# 

三:对指定的redis命令重复调用

乍一听貌似没啥业务场景,仔细想想还是有的,比如说不断的调用 info 命令,这就是一个好的监控,对不对?命令格式如下:

  1. redis-cli -r <countand -i <delay> command 

其中 -r 是 repeat 的次数,-i 是 delay 的 sencond 的秒数,接下来我演示一下,调用info命令10次,每次延迟1s,如下所示:

  1. [root@localhost Desktop]# redis-cli -h 192.168.1.216 -r 10 -i 1 INFO 
  2. # Server 
  3. redis_version:3.2.4 
  4. redis_git_sha1:00000000 
  5. redis_git_dirty:0 
  6. redis_build_id:fc9ad9a14d3a0fb5 
  7. redis_mode:standalone 
  8. os:Linux 3.10.0-327.el7.x86_64 x86_64 
  9. arch_bits:64 
  10. multiplexing_api:epoll 
  11. gcc_version:4.8.5 
  12. process_id:6171 
  13. run_id:8d1d5cffbf81e31c6c6e0bd144186e9df9fea482 
  14. tcp_port:6379 
  15. uptime_in_seconds:3536932 
  16. uptime_in_days:40 
  17. hz:10 
  18. lru_clock:5049094 
  19. executable:/etc/redis/redis-server 
  20. config_file:/etc/redis/6379.conf 
  21.  
  22. # Clients 
  23. connected_clients:7 
  24. client_longest_output_list:0 
  25. client_biggest_input_buf:0 
  26. blocked_clients:0 
  27.  
  28. # Memory 
  29. used_memory:1295512 
  30. used_memory_human:1.24M 
  31. used_memory_rss:10395648 
  32. used_memory_rss_human:9.91M 
  33. used_memory_peak:35199336 
  34. used_memory_peak_human:33.57M 
  35. total_system_memory:2099109888 
  36. total_system_memory_human:1.95G 
  37. used_memory_lua:37888 
  38. used_memory_lua_human:37.00K 
  39. maxmemory:0 
  40. maxmemory_human:0B 
  41. maxmemory_policy:noeviction 
  42. mem_fragmentation_ratio:8.02 
  43. mem_allocator:jemalloc-4.0.3 
  44.  
  45. # Persistence 
  46. loading:0 
  47. rdb_changes_since_last_save:0 
  48. rdb_bgsave_in_progress:0 
  49. rdb_last_save_time:1481443658 
  50. rdb_last_bgsave_status:ok 
  51. rdb_last_bgsave_time_sec:0 
  52. rdb_current_bgsave_time_sec:-1 
  53. aof_enabled:0 
  54. aof_rewrite_in_progress:0 
  55. aof_rewrite_scheduled:0 
  56. aof_last_rewrite_time_sec:-1 
  57. aof_current_rewrite_time_sec:-1 
  58. aof_last_bgrewrite_status:ok 
  59. aof_last_write_status:ok 
  60. ... 

这么多输出,有点眼花缭乱,大多时候我只关注 used_memory_human 字段,看看当前 redis 占用了多少内存,这里就可以用grep过滤一下:

  1. [root@localhost Desktop]# redis-cli -h 192.168.1.216 -r 10 -i 1 INFO | grep used_memory_human 
  2. used_memory_human:1.24M 
  3. used_memory_human:1.24M 
  4. used_memory_human:1.24M 
  5. used_memory_human:1.24M 
  6. used_memory_human:1.24M 
  7. used_memory_human:1.24M 
  8. used_memory_human:1.24M 
  9. used_memory_human:1.24M 
  10. used_memory_human:1.24M 
  11. used_memory_human:1.24M 
  12. [root@localhost Desktop]# 

可以清楚的看到,当前 memory_human 占用 1.24M,一个麻雀式的监控就来了!

四:--stat完整版监控

如果只有一个内存占用指标肯定不能满足大家的实际需求,比如你就看不到当前的redis中有多少的keys,有多少的clients,有多少被blocked,有多少requests等等信息,如果这些都有了,是不是有点像mongodb中的mongostats呢?哈哈,迫不及待的给大家来演示一下吧,非常的简单。。。

  1. [root@localhost Desktop]# redis-cli -h 192.168.1.216 --stat 
  2. ------- data ------ --------------------- load -------------------- - child - 
  3. keys       mem      clients blocked requests            connections           
  4. 27         1.24M    7       0       1198768 (+0)        2206         
  5. 27         1.24M    7       0       1198769 (+1)        2206         
  6. 27         1.24M    7       0       1198770 (+1)        2206         
  7. 27         1.24M    7       0       1198771 (+1)        2206         
  8. 27         1.24M    7       0       1198772 (+1)        2206         
  9. 27         1.24M    7       0       1198773 (+1)        2206         
  10. 27         1.24M    7       0       1198774 (+1)        2206         
  11. 27         1.24M    7       0       1198775 (+1)        2206         
  12. 27         1.24M    7       0       1198776 (+1)        2206         
  13. 27         1.24M    7       0       1198777 (+1)        2206         
  14. 27         1.24M    7       0       1198778 (+1)        2206         
  15. 27         1.24M    7       0       1198779 (+1)        2206         
  16. 27         1.24M    7       0       1198780 (+1)        2206         
  17. 27         1.27M    7       0       1198782 (+2)        2206         
  18. 27         1.24M    7       0       1198783 (+1)        2206         
  19. 27         1.24M    7       0       1198784 (+1)        2206         
  20. 27         1.24M    7       0       1198785 (+1)        2206 

本文转载自微信公众号「一线码农聊技术」,可以通过以下二维码关注。转载本文请联系一线码农聊技术公众号。

 

责任编辑:武晓燕 来源: 一线码农聊技术
相关推荐

2018-11-22 21:45:59

物联网卡运营商流量卡

2014-04-17 16:42:03

DevOps

2022-07-26 00:00:22

HTAP系统数据库

2021-11-09 09:48:13

Logging python模块

2021-01-15 07:44:21

SQL注入攻击黑客

2023-11-01 13:48:00

反射java

2021-11-26 08:07:16

MySQL SQL 语句数据库

2014-11-28 10:31:07

Hybrid APP

2019-09-16 08:40:42

2020-02-27 10:49:26

HTTPS网络协议TCP

2023-03-16 10:49:55

2023-10-24 08:53:24

FutureTas并发编程

2017-10-18 22:01:12

2012-05-31 09:56:54

云安全

2019-11-06 09:52:01

JavaScript单线程非阻塞

2022-03-14 07:53:27

ELTETL大数据

2015-07-31 10:35:18

实时计算

2022-12-12 08:46:11

2020-07-23 18:31:55

开源数据库PostgreSQL

2018-01-06 10:38:51

Ping抓包 ICMP协议
点赞
收藏

51CTO技术栈公众号