redis批量删除指定pattern的keys
- 批量删除Key(仅测试)
redis-cli keys "*" | xargs redis-cli del
# 如果redis-cli没有设置成系统变量,需要指定redis-cli的完整路径
# 如:/opt/redis/redis-cli keys "*" | xargs /opt/redis/redis-cli del
- 指定 Redis 数据库访问密码(仅测试)
redis-cli -a password keys "*" | xargs redis-cli -a password del
- 访问 Redis 中特定的数据库,使用下面的命令
# 下面的命令指定数据序号为0,即默认数据库
redis-cli -n 0 keys "*" | xargs redis-cli -n 0 del
- 删除所有Key
# 删除当前数据库中的所有Key
flushdb
# 删除所有数据库中的key
flushall
python使用redis文档
http://redis-py.readthedocs.io/en/latest/
清除redis缓存数据sentinel
from redis import sentinel
cli = sentinel.Sentinel([["192.168.229.169", 29000], ["192.168.229.169", 29001], ["192.168.229.169", 29002],["192.168.229.169",29003]])
ms = cli.master_for("cluster_169-20000")
ms.delete("webcc:miccard_uids_live_key")
ms.delete("webcc:game_uids_live_key")
redis 同库迁移
# 命令说明
-h hostip,
-p 端口,
-a 密码,
-n db库,
--no-raw选项是要求命令的返回结果必须是原始的格式,
--raw恰恰相反,返回格式化后的结果,
-x 选项代表从标准输入(stdin)读取数据
perl -p(perl 命令可自行百度) 使 Perl 隐式地循环遍历指定的文件,同时打印所有的行。自动循环+自动输出,相当于 while(<>) { 脚本; print; }
# 复制全部一个库的key值
#!/bin/bash
src_ip=127.0.0.1
src_port=8090
src_db=14
src_pw='1234'
dest_ip=127.0.0.1
dest_port=8090
dest_db=15
desc_pw='1234'
redis-cli -h $src_ip -p $src_port -a $src_pw -n $src_db keys "*" | while read key
do
redis-cli -h $src_ip -p $src_port -a $src_pw -n $src_db --raw dump $key | perl -pe 'chomp if eof' | redis-cli -h $dest_ip -p $dest_port -a $desc_pw -n $dest_db -x restore $key 0
echo "migrate key $key"
done
#复制一个库的部分key
#!/bin/bash
src_ip=127.0.0.1
src_port=8090
src_db=14
src_pw='1234'
dest_ip=127.0.0.1
dest_port=6379
dest_db=2
desc_pw='1234'
#要遍历的key
k=(test ws we)
for loop in ${k[*]}
do
redis-cli -h $src_ip -p $src_port -a $src_pw -n $src_db --raw dump $loop | perl -pe 'chomp if eof' | redis-cli -h $dest_ip -p $dest_port -a $desc_pw -n $dest_db -x restore $loop 0
echo "The value is: $loop"
done
#只复制一个key
redis-cli -h 127.0.0.1 -p 8090 -a 1234 -n 14 --raw dump test | perl -pe 'chomp if eof' | redis-cli -h 127.0.0.1 -p 8090 -a 1234 -n 15 -x restore test 0
redis 迁移python实现
# coding=utf-8
import redis
redis_from = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)
redis_to = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)
if __name__ == '__main__':
cnt = 0
for k in redis_from.keys():
data_type = redis_from.type(k)
if data_type == 'string':
v = redis_from.get(k)
redis_to.set(k, v)
elif data_type == 'list':
values = redis_from.lrange(k, 0, -1)
redis_to.lpush(k, values)
elif data_type == 'set':
values = redis_from.smembers(k)
redis_to.sadd(k, values)
elif data_type == 'hash':
keys = redis_from.hkeys(k)
for key in keys:
value = redis_from.hget(k, key)
redis_to.hset(k, key, value)
else:
print 'not known type'
cnt = cnt + 1
print 'total', cnt
redis清理数据
./redis-stable/bin/redis-cli -h ip -n 0 -a $pass --scan --pattern ' haihui_items_offset*20220901*' >> keys.txt
## 编写清理脚本
count=0
keys=""
for key in $(cat keys.txt); do
keys="${keys}$key "
count=$(($count+1))
if [ $count -gt 5000 ]; then
#echo $keys
./redis-stable/bin/redis-cli -h ip -n db -a $pass unlink $keys
keys=""
count=0
fi
done
./redis-stable/bin/redis-cli -h ip -n db -a $pass unlink $keys