怎么样批量实现Redis中key的持久化?一起来看看吧~
方法一
编写shell脚本:使用管道
redis-cli -h 127.0.0.1 -p 6379 keys "white:*" | xargs -i redis-cli -h 127.0.0.1 -p 6379 expire {} 86400
redis-cli keys "white:*" | xargs -i redis-cli expire {} 86400
redis-cli -h 127.0.0.1 -p 6379 keys "white:*" | xargs redis-cli -h 127.0.0.1 -p 6379 del
方法二
用Go写了一个脚本,buid为linux上的二进制文件后执行:
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println("Connect redis failed,", err)
return
}
defer conn.Close()
persist("rls:*", conn)
persist("white:*", conn)
persist("black:*", conn)
persist("grey:*", conn)
persist("breach:white*", conn)
persist("breach:black*", conn)
}
func persist(Key string, conn redis.Conn) {
scan, err := conn.Do("Scan", "0", "match", Key, "count", 2000000)
if err != nil {
fmt.Println("connect redis failed,", err)
return
}
dataList := scan.([]interface{})[1].([]interface{})
for _, item := range dataList {
itemStr := string(item.([]uint8))
_, err = conn.Do("PERSIST", itemStr)
if err != nil {
fmt.Println(err)
return
}
}
fmt.Printf("%s PERSIST done!\n", Key)
return
}