这是坚持技术写作计划(含翻译)的第19篇,定个小目标999,每周最少2篇。
如果因为历史原因,导致redis里存在无用且没有设置ttl的key,会造成浪费。本文主要讲如何在不阻塞redis的情况下批量修改redis的ttl和使用通配符删除key。
通配符删除key
redis-cli [-a password] [-h localhost] [-p 6379] --scan --pattern pattern* | xargs redis-cli [-a password] [-h localhost] [-p 6379] del
复制代码
其中 []
包裹的都是可选项
- -p 端口
- -h 是redis主机
- -a 是密码
- pattern* 是通配符
SCAN,SSCAN,HSCAN,ZSCAN四个命令都支持增量式迭代, 它们每次执行都只会返回少量元素, 所以这些命令可以用于生产环境, 而不会出现像 KEYS 命令、 SMEMBERS 命令带来的问题 —— 当 KEYS 命令被用于处理一个大的数据库时, 又或者 SMEMBERS 命令被用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久。
批量打印或者修改TTL
使用方式
$ pip install redis
$ python keys.py --help
usage: keys.py [-h] [-p PORT] [-d DB_LIST] [--host HOST] [--password PASSWORD]
[--expire EXPIRE] [--random_upper RANDOM_UPPER]
[--max_ttl MAX_TTL]
optional arguments:
-h, --help show this help message and exit
-p PORT port of redis
-d DB_LIST ex : -d all / -d 1,2,3,4
--host HOST ex : --host 127.0.0.1
--password PASSWORD ex : --password password
--expire EXPIRE unit: sec ,ex 1 days = 86400 sec: --expire 86400
--random_upper RANDOM_UPPER
unit: sec ,ex 1 mins = 60 sec: --random_upper 60
--max_ttl MAX_TTL unit: sec ,ex 1 mins = 60 sec: --max_ttl 60
复制代码
# encoding: utf-8