Skip to content

Instantly share code, notes, and snippets.

@fieg
Last active October 10, 2022 23:09
Show Gist options
  • Star 16 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save fieg/e3b74fe9bed6ec1f2a1c to your computer and use it in GitHub Desktop.
Save fieg/e3b74fe9bed6ec1f2a1c to your computer and use it in GitHub Desktop.
Set expire on large set of keys using pattern in Redis
#!/bin/bash
if [ $# -ne 4 ]
then
echo "Usage: $0 <host> <port> <pattern> <seconds>"
exit 1
fi
cursor=-1
keys=""
ttl=0
expire="$4"
while [ $cursor -ne 0 ]; do
if [ $cursor -eq -1 ]
then
cursor=0
fi
reply=`redis-cli -h $1 -p $2 SCAN $cursor MATCH $3`
cursor=`expr "$reply" : '\([0-9]*[0-9 ]\)'`
keys=`echo $reply | cut -d' ' -f2-`
for key in ${keys// / } ; do
ttl=`redis-cli -h $1 -p $2 TTL $key`
act=""
if [ $ttl -eq -1 ]
then
result=`redis-cli -h $1 -p $2 EXPIRE $key $expire`
act=" -> $expire"
fi
echo "$key: $ttl$act"
done
done
@fieg
Copy link
Author

fieg commented Dec 2, 2015

@DevBrent
Copy link

640000 keys laitaire....

@jlnewton87
Copy link

This was a huge help...thanks for taking the time to put this together, and sharing it with the internet!

@epmallmann
Copy link

thanks for the script!

@chithanh89
Copy link

How to use with pattern '*' ? I get error [: -ne: unary operator expected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment