需求:取出所有前缀为g.at.ga.的string类型的key及其value
实现:
1. 取出key
redis-cli -p 26379 -a 123456 -n 0 keys g.at.ga.* > a.txt
2. 拼出取value的命令
sed ‘s/^/get &/g’ a.txt > b.txt
3. 取value
cat b.txt | redis-cli -p 26379 -a 123456 -n 0 --pipe > c.txt
4. 将key、value 拼成一个文件
paste a.txt c.txt > d.txt
需求2:批量删除key(要删除的key已经导出到一个文件中)
实现:
1. key文件改名
mv vsp_article_watch_add_score.log vsp_article_watch_add_score.log.1
2. 拼接删除key的命令
sed ‘s/^/unlink &/g’ vsp_article_watch_add_score.log.1 > vsp_article_watch_add_score.log
3. 执行批量删除
cat vsp_article_watch_add_score.log | redis-cli -p 26379 -a 123456 -n 0 --pipe
需求3:一键批量删除指定key
/home/redis/redis-5.0.3/src/redis-cli -h 192.168.1.36 -p 26379 -a 123456 -n 1 keys "g.at.ga.*" | xargs /home/redis/redis-5.0.3/src/redis-cli -h 192.168.1.36 -p 26379 -a 123456 -n 1 unlink
需求4:批量修改特征key的过期时间为一个1-3600秒之间的随机数
实现:
# 方法1,用循环逐行拼命令,很慢
rm -f c.txt
/home/redis/redis-5.0.3/src/redis-cli -h 192.168.1.36 -p 26379 -a 123456 -n 1 keys room_onmic_photo:* > a.txt
cat a.txt|while read line
do
r=`expr $RANDOM % 3600`
echo "expire ${line} $r" >> c.txt
done
cat c.txt | /home/redis/redis-5.0.3/src/redis-cli -h 192.168.1.36 -p 26379 -a 123456 -n 1 --pipe
# 方法2,用awk拼命令,很快。通过管道一句执行,不需要临时文件。
/home/redis/redis-5.0.3/src/redis-cli -h 192.168.1.36 -p 26379 -a 123456 -n 1 keys room_onmic_photo:* | awk -v seed=$RANDOM 'BEGIN{srand(seed);} {print "expire "$0" " int(rand()*10000%3600+1) }' | /home/redis/redis-5.0.3/src/redis-cli -h 192.168.1.36 -p 26379 -a 123456 -n 1 --pipe