go-redis库设置incr 过期时间使用Multi/exec,Redis是单线程的,因此单个命令始终是原子的,但是来自不同客户端的两个给定命令可以依次执行,例如在它们之间交替执行。但是,Multi/exec能够确保在multi/exec两个语句之间的命令之间没有其他客户端正在执行命令。
package main
import (
"fmt"
"github.com/go-redis/redis"
_ "github.com/jinzhu/gorm/dialects/mysql"
"time"
)
var rdb *redis.Client
func main(){
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
_,err := rdb.Ping().Result()
if err != nil {
fmt.Println(err)
}
pipe := rdb.TxPipeline()
incr := pipe.Incr("key")
pipe.Expire("key", time.Hour)
_, exer := pipe.Exec()
if exer != nil {
fmt.Println(exer)
}
fmt.Println(incr.Val())
}