[关闭]
@zhangsiming65965 2019-02-14T03:22:22.000000Z 字数 13388 阅读 220

Redis持久化存储

云计算

---Author:张思明 ZhangSiming

---Mail:1151004164@cnu.edu.cn

---QQ:1030728296

如果有梦想,就放开的去追;
因为只有奋斗,才能改变命运。


一、Redis概述

image_1d36uhp93nfe10spusk1v1pnnal.png-249.2kB

1.1概述

Redis是一种NoSQL(Not Only SQL),非关系型数据库;即数据和数据之间是没有关系的,使用内存空间作为存储,一般情况下作为数据库前端缓存,降低数据库的读取压力。

1.2Redis作为数据库缓存应用场景

Redis-sentinel高可用哨兵.png-84.7kB

一般企业的Web服务的读请求远远大于写请求;上图利用MySQL一主四从架构实现读写压力分离;主库负责接收PHP的写请求、其中一台服务器专用备份,另外3台MySQL从库,作为LVS后方节点,接收PHP的读请求。
但是读压力是非常大的,即使从库负载均衡了,仍然承受不住,这样就需要在读请求过来的时候加一个Redis数据库缓存,来降低MySQL从库的读压力。

1.2.1Redis作为数据库缓存是如何降低数据库读压力的?

1.每次写入数据的时候,双写,一个写到MySQL数据库,一个写到Redis;
2.用户请求过来,先去到Redis-Sentinel主,读取命中直接返回用户,降低了数据库的读取压力;
3.读取未命中再去后方LVS找MySQL从库拿数据,拿回来之后还是先给Redis一份数据方便下次访问,之后再返回用户。

1.3Redis的特点

二、Redis服务器源码编译安装过程

2.1实验环境

  1. [root@ZhangSiming ~]# cat /etc/redhat-release
  2. CentOS Linux release 7.5.1804 (Core)
  3. [root@ZhangSiming ~]# uname -r
  4. 3.10.0-862.el7.x86_64
  5. [root@ZhangSiming ~]# systemctl stop firewalld
  6. [root@ZhangSiming ~]# systemctl disable firewalld
  7. [root@ZhangSiming ~]# getenforce 0
  8. Disabled
  9. #使用CentOS7.5,关闭防火墙、Selinux

2.2源码编译安装Redis

  1. [root@ZhangSiming ~]# cat redis.sh
  2. #!/bin/bash
  3. #designed by ZhangSiming
  4. yum -y install wget gcc gcc-c++ make tar openssl openssl-devel cmake
  5. #安装支持包
  6. cd /tmp
  7. tar xf redis-4.0.11.tar.gz -C /usr/src/
  8. cd /usr/src/redis-4.0.11/
  9. make
  10. make MALLOC=jemalloc
  11. make PREFIX=/usr/local/redis install
  12. #编译安装redis
  13. cd /usr/local/redis
  14. mkdir -p /usr/local/redis/conf
  15. #创建redis配置文件目录,并把配置文件移动进来
  16. cp /usr/src/redis-4.0.11/redis.conf /usr/local/redis/conf/
  17. cp /usr/src/redis-4.0.11/sentinel.conf /usr/local/redis/conf/
  18. ln -s /usr/local/redis/bin/* /usr/local/bin/

部署结果

  1. [root@ZhangSiming ~]# redis-server --version
  2. Redis server v=4.0.11 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=86784b34d12465ce
  3. [root@ZhangSiming ~]# redis-cli --version
  4. redis-cli 4.0.11
  5. #成功安装4.0.11版本的redis

2.3优化Redis

2.3.1优化Redis配置文件

  1. [root@ZhangSiming ~]# cd /usr/local/redis/
  2. [root@ZhangSiming redis]# cp conf/redis.conf{,.bak}
  3. [root@ZhangSiming redis]# egrep -v "^$|^#" conf/redis.conf.bak > conf/redis.conf
  4. [root@ZhangSiming redis]# mkdir -p /data/redis/
  5. #创建Redis数据目录
  6. [root@ZhangSiming redis]# vim conf/redis.conf
  7. [root@ZhangSiming redis]# cat -n conf/redis.conf | sed -n '1p;3p;4p;7p;9p;11p;21p'
  8. 1 bind 0.0.0.0
  9. #监听任意来源IP
  10. 3 port 6379
  11. #监听端口6379
  12. 4 tcp-backlog 1024
  13. #TCP连接数为1024
  14. 7 daemonize yes
  15. #守护进程模式开启
  16. 9 pidfile /date/redis/redis.pid
  17. #PID文件
  18. 11 logfile "/data/redis/redis.log"
  19. #日志文件
  20. 21 dir /data/redis
  21. #数据目录

复制一份配置文件,换一个监听端口,在启动Redis的时候指向不同的配置文件,就可以实现Redis多实例

注意

Redis使用内存存储数据,读取极快;但是它是单进程单线程工作的。因此,同一时间Redis其实只能处理一个用户的请求,处理完毕再去处理另一用户的请求。这就导致了Redis本身对CPU没多大压力,但是会有一个TCP的连接队列,这就是为什么我们要适当加大TCP连接数来优化Redis(Redis一般在内网环境下,是绝对不能开放公网连接的,否则TCP很容易遭受攻击)

2.3.2系统参数优化调整

  1. [root@ZhangSiming redis]# vim /etc/security/limits.conf
  2. [root@ZhangSiming redis]# tail -1 /etc/security/limits.conf
  3. * - nofile 10240
  4. [root@ZhangSiming redis]# exit
  5. logout
  6. #退出登录之后重新登录使更改生效
  7. [root@ZhangSiming ~]# ulimit -n
  8. 10240
  9. #单个进程文件描述符备改为10240
  1. [root@ZhangSiming ~]# echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf
  2. [root@ZhangSiming ~]# sysctl -p
  3. net.core.somaxconn = 10240
  4. #调整TCP连接数为10240
  1. [root@ZhangSiming ~]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
  2. [root@ZhangSiming ~]# tail -1 /etc/sysctl.conf
  3. vm.overcommit_memory = 1
  4. [root@ZhangSiming ~]# sysctl -p
  5. net.core.somaxconn = 10240
  6. vm.overcommit_memory = 1
  7. #调整vm.overcommit_memory为1
  8. [root@ZhangSiming ~]# sysctl -a | grep commit
  9. sysctl: reading key "net.ipv6.conf.all.stable_secret"
  10. sysctl: reading key "net.ipv6.conf.default.stable_secret"
  11. sysctl: reading key "net.ipv6.conf.ens32.stable_secret"
  12. sysctl: reading key "net.ipv6.conf.lo.stable_secret"
  13. vm.nr_overcommit_hugepages = 0
  14. vm.overcommit_kbytes = 0
  15. vm.overcommit_memory = 1
  16. #调整生效
  17. vm.overcommit_ratio = 50
  1. [root@ZhangSiming ~]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
  2. [root@ZhangSiming ~]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
  3. [root@ZhangSiming ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
  4. [root@ZhangSiming ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
  5. [root@ZhangSiming ~]# tail -2 /etc/rc.local
  6. echo never > /sys/kernel/mm/transparent_hugepage/enabled
  7. echo never > /sys/kernel/mm/transparent_hugepage/defrag
  8. #根据日志中警告提示修改

2.4启动Redis,查看日志文件

  1. [root@ZhangSiming ~]# redis-cli shutdown
  2. #关闭Redis的命令
  3. [root@ZhangSiming ~]# redis-server /usr/local/redis/conf/redis.conf
  4. #根据配置文件启动redis的命令
  5. [root@ZhangSiming ~]# netstat -antup | grep redis
  6. tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1801/redis-server 0
  7. [root@ZhangSiming ~]# cat /data/redis/redis.log
  8. 1800:C 09 Feb 15:02:18.742 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  9. 1800:C 09 Feb 15:02:18.742 # Redis version=4.0.11, bits=64, commit=00000000, modified=0, pid=1800, just started
  10. 1800:C 09 Feb 15:02:18.742 # Configuration loaded
  11. _._
  12. _.-``__ ''-._
  13. _.-`` `. `_. ''-._ Redis 4.0.11 (00000000/0) 64 bit
  14. .-`` .-```. ```\/ _.,_ ''-._
  15. ( ' , .-` | `, ) Running in standalone mode
  16. |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
  17. | `-._ `._ / _.-' | PID: 1801
  18. `-._ `-._ `-./ _.-' _.-'
  19. |`-._`-._ `-.__.-' _.-'_.-'|
  20. | `-._`-._ _.-'_.-' | http://redis.io
  21. `-._ `-._`-.__.-'_.-' _.-'
  22. |`-._`-._ `-.__.-' _.-'_.-'|
  23. | `-._`-._ _.-'_.-' |
  24. `-._ `-._`-.__.-'_.-' _.-'
  25. `-._ `-.__.-' _.-'
  26. `-._ _.-'
  27. `-.__.-'
  28. 1801:M 09 Feb 15:02:18.746 # Server initialized
  29. 1801:M 09 Feb 15:02:18.746 * DB loaded from disk: 0.000 seconds
  30. 1801:M 09 Feb 15:02:18.746 * Ready to accept connections
  31. #启动成功,日志干净不报警告

2.5利用redis-cli命令来跟redis服务器进行交互

  1. [root@ZhangSiming ~]# redis-cli -h localhost -p 6379
  2. localhost:6379> exit
  3. [root@ZhangSiming ~]#
  4. #登录方式与MySQL类似,exit退出登录交互界面
  1. [root@ZhangSiming ~]# redis-cli -h localhost -p 6379
  2. localhost:6379> exit
  3. [root@ZhangSiming ~]# echo "requirepass '666666'" >> /usr/local/redis/conf/redis.conf
  4. #在配置文件中指定密码为666666
  5. [root@ZhangSiming ~]# tail -1 /usr/local/redis/conf/redis.conf
  6. requirepass '666666'
  7. [root@ZhangSiming ~]# redis-cli shutdown
  8. [root@ZhangSiming ~]# redis-server /usr/local/redis/conf/redis.conf
  9. #重启Redis
  10. [root@ZhangSiming ~]# redis-cli
  11. 127.0.0.1:6379> get name
  12. (error) NOAUTH Authentication required.
  13. 127.0.0.1:6379> auth 666666
  14. OK
  15. #交互模式用auth验证密码
  16. 127.0.0.1:6379> get name
  17. (nil)
  18. 127.0.0.1:6379> exit
  19. [root@ZhangSiming ~]# redis-cli -h localhost -a 666666 get name
  20. Warning: Using a password with '-a' option on the command line interface may not be safe.
  21. (nil)
  22. #非交互模式用-a验证密码
  1. [root@ZhangSiming ~]# vim /usr/local/redis/conf/redis.conf
  2. #删除配置文件里的密码
  3. [root@ZhangSiming ~]# redis-cli -a 666666 shutdown
  4. #此时删除密码操作因为还没有重启所以没有生效,我们仍然需要用密码才能关闭Redis服务
  5. Warning: Using a password with '-a' option on the command line interface may not be safe.
  6. [root@ZhangSiming ~]# redis-server /usr/local/redis/conf/redis.conf
  7. #重新启动,此时Redis已经没有密码
  8. [root@ZhangSiming ~]# redis-cli
  9. 127.0.0.1:6379> get name
  10. (nil)
  11. 127.0.0.1:6379> config set requirepass 666666
  12. #设置密码为666666
  13. OK
  14. 127.0.0.1:6379> config rewrite
  15. (error) NOAUTH Authentication required.
  16. #设置完密码,任何操作都需要先验证密码
  17. 127.0.0.1:6379> auth 666666
  18. OK
  19. 127.0.0.1:6379> config rewrite
  20. OK
  21. #验证密码之后,把密码重写到配置文件中
  22. 127.0.0.1:6379> exit
  23. [root@ZhangSiming ~]# tail -1 /usr/local/redis/conf/redis.conf
  24. requirepass "666666"
  25. #查看配置文件最后一行

在企业中,Redis切记要加密码,并且隔绝外网,否则很容易被攻击。

三、Redis持久化存储

什么是持久化存储?

持久化存储就是将数据保存到硬盘中,使得在应用程序或机器重启之后可以继续访问之前保存的数据;
Redis如果提供缓存服务,因为Redis存储是在内存中,重启服务器Redis数据会丢失;这就需要开启rdb或者aof持久化存储,把Redis中的数据持久化存储到硬盘中;
注意。rdb或者aof方式对数据都有一定影响,所以建议持久化的操作在Redis从库上进行。

3.1Redis的rdb存储

开启rdb存储的方法:

  1. [root@ZhangSiming ~]# sed -n "14p;15p;16p;18p;20p;21p" /usr/local/redis/conf/redis.conf
  2. save 900 1
  3. #900s改变1个key触发rdb存储
  4. save 300 10
  5. #300s改变10个key触发rdb存储
  6. save 60 10000
  7. #60s改变10000个key触发rdb存储
  8. rdbcompression no
  9. #关闭rdb压缩,否则影响性能
  10. dbfilename "dump.rdb"
  11. #rdb存储文件的名字dump.rdb,存储在工作目录中
  12. dir "/data/redis"
  13. [root@ZhangSiming ~]# redis-cli -a 666666 shutdown
  14. [root@ZhangSiming ~]# redis-server /usr/local/redis/conf/redis.conf
  15. [root@ZhangSiming ~]# redis-cli -a 666666 config set save ""
  16. OK
  17. #清空save值就是关闭rdb存储
  18. [root@ZhangSiming ~]# redis-cli -a 666666 config rewrite
  19. OK
  20. [root@ZhangSiming ~]# redis-cli -a 666666 config set save "180 1 120 10 60 10000"
  21. OK
  22. #设置save值就是开启rdb存储
  23. [root@ZhangSiming ~]# redis-cli -a 666666 config rewrite
  24. OK
  25. #记得交互式修改完成之后config rewrite

进行数据写入,观察rdb存储日志。

  1. [root@ZhangSiming ~]# > /data/redis/redis.log
  2. #清空日志文件
  3. [root@ZhangSiming ~]# for line in `seq -w 10000`; do redis-cli -a 666666 set key_${line} value_${line} ; done &>/dev/null
  4. #写入数据测试
  5. [root@ZhangSiming ~]# cat /data/redis/redis.log
  6. 17047:M 09 Feb 16:10:57.079 * 10000 changes in 60 seconds. Saving...
  7. #查看日志文件,10000改变发生在60s内,自动触发rdb存储
  8. 17047:M 09 Feb 16:10:57.079 * Background saving started by pid 28398
  9. 28398:C 09 Feb 16:10:57.136 * DB saved on disk
  10. 28398:C 09 Feb 16:10:57.136 * RDB: 0 MB of memory used by copy-on-write
  11. 17047:M 09 Feb 16:10:57.179 * Background saving terminated with success
  12. [root@ZhangSiming ~]# > /data/redis/redis.log
  13. #清空日志文件
  14. [root@ZhangSiming ~]# redis-cli -a 666666 save
  15. #手动进行rdb存储
  16. OK
  17. [root@ZhangSiming ~]# cat /data/redis/redis.log
  18. 17047:M 09 Feb 16:14:19.064 * DB saved on disk
  19. #查看日志文件,成功存储
  20. [root@ZhangSiming ~]# > /data/redis/redis.log
  21. #继续清空日志文件
  22. [root@ZhangSiming ~]# redis-cli -a 666666 bgsave
  23. #使用bgsave存储
  24. Background saving started
  25. [root@ZhangSiming ~]# cat /data/redis/redis.log
  26. 17047:M 09 Feb 16:14:30.489 * Background saving started by pid 38523
  27. #bgsave和save的区别是bgsave会启动一个新进程(38523)来进行rdb存储;而save会阻塞前端输入,所以推荐bgsave存储
  28. 38523:C 09 Feb 16:14:30.497 * DB saved on disk
  29. 38523:C 09 Feb 16:14:30.497 * RDB: 0 MB of memory used by copy-on-write
  30. 17047:M 09 Feb 16:14:30.504 * Background saving terminated with success

3.2Redis的aof存储

Redis的appendonly(aof)存储会把用户每次的操作都记录到文件中,类似mysqlbinlog。

开启aof存储的方法:

  1. [root@ZhangSiming ~]# redis-server /usr/local/redis/conf/redis.conf
  2. [root@ZhangSiming ~]# redis-cli config set appendonly yes
  3. OK
  4. #开启aof存储的方式
  5. [root@ZhangSiming ~]# redis-cli config rewrite
  6. OK
  7. [root@ZhangSiming ~]# redis-cli config set appendonly no
  8. OK
  9. #关闭aof存储的方式
  10. [root@ZhangSiming ~]# redis-cli config rewrite
  11. OK

开启了aof存储之后,一般的操作没有达到rdb存储的触发条件的时候,只会写入aof文件中,rdb文件大小不变。

  1. [root@ZhangSiming ~]# redis-cli config set appendonly yes
  2. OK
  3. [root@ZhangSiming ~]# redis-cli config rewrite
  4. OK
  5. [root@ZhangSiming ~]# du -sh /data/redis/dump.rdb
  6. 228K /data/redis/dump.rdb
  7. [root@ZhangSiming ~]# du -sh /data/redis/appendonly.aof
  8. 452K /data/redis/appendonly.aof
  9. [root@ZhangSiming ~]# for line in `seq -w 100` ;do redis-cli set key_${line} value_${line} &>/dev/null ;done
  10. #写入数据
  11. [root@ZhangSiming ~]# du -sh /data/redis/dump.rdb
  12. 228K /data/redis/dump.rdb
  13. [root@ZhangSiming ~]# du -sh /data/redis/appendonly.aof
  14. 960K /data/redis/appendonly.aof
  15. #只有aof文件增大了,aof文件类似mysqlbinlog,所有的操作语句都会记录其中

aof重写

  • 重写aof文件就是整理相同的key,写入最后的有效值;
  • 执行一个aof文件重写操作,会创建一个当前aof文件的体积优化版本。即使重写失败,也不会有任何的数据丢失,因为旧的aof文件在重写操作成功之前不会被修改;
  • 重写操作只会在没有其他持久化工作在后台执行时才会触发;
  • 从Redis2.4版本开始,aof重写由Redis自行触发,bgrewriteaof命令仅仅用于手动触发重写操作。

测试手动bgrewriteaof重写aof文件

  1. [root@ZhangSiming ~]# du -sh /data/redis/appendonly.aof
  2. 0 /data/redis/appendonly.aof
  3. [root@ZhangSiming ~]# for line in `seq -w 100` ;do redis-cli set key_${line} value_${line} &>/dev/null ;done
  4. #创建100个key
  5. [root@ZhangSiming ~]# for line in `seq -w 100` ;do redis-cli del key_${line} &>/dev/null ;done
  6. #再删除这100个key
  7. [root@ZhangSiming ~]# du -sh /data/redis/appendonly.aof
  8. 8.0K /data/redis/appendonly.aof
  9. #此时aof是8k大小
  10. [root@ZhangSiming ~]# redis-cli bgrewriteaof
  11. Background append only file rewriting started
  12. [root@ZhangSiming ~]# du -sh /data/redis/appendonly.aof
  13. 0 /data/redis/appendonly.aof
  14. #手动aof重写之后,两两相消,只有0k

测试aof自动重写(Redis2.4版本之后)

  1. [root@ZhangSiming ~]# redis-cli config get auto-aof-rewrite*
  2. 1) "auto-aof-rewrite-percentage"
  3. 2) "100"
  4. 3) "auto-aof-rewrite-min-size"
  5. 4) "67108864"
  6. #aof文件增加数量超过一半,且容量大于64M就自动触发aof重写
  7. [root@ZhangSiming ~]# redis-cli config set auto-aof-rewrite-min-size 100000
  8. OK
  9. [root@ZhangSiming ~]# redis-cli config get auto-aof-rewrite*
  10. 1) "auto-aof-rewrite-percentage"
  11. 2) "100"
  12. 3) "auto-aof-rewrite-min-size"
  13. 4) "100000"
  14. #修改为aof文件增加数量超过一半,且容量大于100k就自动触发aof重写
  15. [root@ZhangSiming ~]# for line in `seq -w 10000` ;do redis-cli set key_${line} value_${line} &>/dev/null ;done
  16. [root@ZhangSiming ~]# du -sh /data/redis/appendonly.aof
  17. 768K /data/redis/appendonly.aof
  18. #写入数据,已经超过了100k
  19. [root@ZhangSiming ~]# for line in `seq -w 10000` ;do redis-cli del key_${line} &>/dev/null ;done
  20. [root@ZhangSiming ~]# du -sh /data/redis/appendonly.aof
  21. 384K /data/redis/appendonly.aof
  22. #删除等量的数据,发现没有累加记录aof文件,而且容量已经变小,即自动触发了aof重写

四、Redis简单学习

4.1Redis的键设置有效期

  1. [root@ZhangSiming ~]# redis-cli flushall
  2. OK
  3. #删除所有数据库中的所有key;flushdb是删除当前数据库中的所有key。这两个命令十分危险,必须禁用
  4. [root@ZhangSiming ~]# redis-cli set key value
  5. OK
  6. [root@ZhangSiming ~]# redis-cli ttl key
  7. (integer) -1
  8. #查看过期时间,-1代表永远不过期
  9. [root@ZhangSiming ~]# redis-cli expire key 10
  10. (integer) 1
  11. #设置过期时间为10s
  12. [root@ZhangSiming ~]# redis-cli ttl key
  13. (integer) -2
  14. #等待10s,这个key已经不存在
  15. [root@ZhangSiming ~]# redis-cli get key
  16. (nil)
  17. #查看键值也没有了

4.2Redis的内存设置

4.2.1查看设置最大内存

  1. [root@ZhangSiming ~]# redis-cli config get maxmemory
  2. 1) "maxmemory"
  3. 2) "0"
  4. #Redis默认不限制内存
  5. [root@ZhangSiming ~]# redis-cli config set maxmemory 1M
  6. OK
  7. [root@ZhangSiming ~]# redis-cli config get maxmemory
  8. 1) "maxmemory"
  9. 2) "1000000"
  10. #设置最大内存为1M

4.2.2Redis内存清理算法

  1. [root@ZhangSiming ~]# redis-cli config get maxmemory-policy
  2. 1) "maxmemory-policy"
  3. 2) "noeviction"
  4. #默认的内存清理算法式报警
  5. [root@ZhangSiming ~]# redis-cli config set maxmemory-policy volatile-lru
  6. OK
  7. [root@ZhangSiming ~]# redis-cli config get maxmemory-policy
  8. 1) "maxmemory-policy"
  9. 2) "volatile-lru"
  10. #修改内存清理算法为清理有过期时间的key
  11. [root@ZhangSiming ~]# for line in `seq -w 10000` ;do redis-cli set key_${line} value_${line} &>/dev/null ;done
  12. [root@ZhangSiming ~]# redis-cli set zhansiming 111
  13. (error) OOM command not allowed when used memory > 'maxmemory'.
  14. #写入数据,已经超内存,不能再写入了
  15. [root@ZhangSiming ~]# redis-cli expire key_55 100
  16. (integer) 0
  17. [root@ZhangSiming ~]# redis-cli get key_55
  18. (nil)
  19. #随便给一个已经有的key设置过期时间,立马就被内存清理算法删除了

4.3Redis屏蔽三条危险的命令

  1. [root@ZhangSiming ~]# sed -n "28p;58p;59p;60p" /usr/local/redis/conf/redis.conf
  2. appendonly no
  3. rename-command flushall ""
  4. rename-command flushdb ""
  5. rename-command keys ""
  6. #在配置文件最后设置重命名命令为空,就可以屏蔽了;但是注意对于flushall命令,必须设置appendonly no ,否则服务器无法启动
  7. [root@ZhangSiming ~]# redis-server /usr/local/redis/conf/redis.conf
  8. [root@ZhangSiming ~]# redis-cli flushdb
  9. (error) ERR unknown command `flushdb`, with args beginning with:
  10. [root@ZhangSiming ~]# redis-cli flushall
  11. (error) ERR unknown command `flushall`, with args beginning with:
  12. [root@ZhangSiming ~]# redis-cli keys
  13. (error) ERR unknown command `keys`, with args beginning with:
  14. [root@ZhangSiming ~]# redis-cli get key
  15. (nil)
  16. #成功屏蔽掉敏感命令
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注