使用docker安装redis
搜索redis镜像
$ docker search redis
拉取最新镜像
$ docker pull redis:latest
查看本地镜像
$ docker images
运行redis容器, 默认使用6379端口
$ docker run -itd --name redis-test -p 6379:6379 redis
查看容器运行消息
$ docker ps
测试使用redis
$ docker exec -it redis-test /bin/bash
$ redis-cli
设置一个10秒后过期的key
添加安全组并使用AnotherRedisDesktopManager远程访问redis
使用go操作redis
安装go-redis
$ go get -u github.com/go-redis/redis
建立连接
rdb := redis.NewClient(&redis.Options{
Addr: "server:6379",
Password: "",
DB: 0,
PoolSize: 100,
})
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
_, err := rdb.Ping(ctx).Result()
if err != nil {
fmt.Printf("connect err %v \n", err)
} else {
fmt.Printf("rdb %#v", rdb)
}
set和get
err = rdb.Set(ctx, "dev_bro_age", "35", 0).Err()
if err != nil {
panic(nil)
} else {
val, err := rdb.Get(ctx, "dev_bro_age").Result()
if err!= nil {
panic(err)
} else {
fmt.Printf("dev_bro_age: %s \n", val)
}
}
zset添加
zsetKey := "age_rank"
devbros := []*redis.Z{
&redis.Z{Score: 25, Member: "devbro0"},
&redis.Z{Score: 35, Member: "devbro1"},
&redis.Z{Score: 45, Member: "devbro2"},
}
num, err := rdb.ZAdd(ctx, zsetKey, devbros...).Result()
if err != nil {
panic(err)
} else {
fmt.Printf("add %d success", num)
}
zset修改
newScore, err := rdb.ZIncrBy(ctx, zsetKey, 10, "devbro0").Result()
if err != nil {
panic(err)
} else {
fmt.Printf("devbro0's new age is %v", newScore)
}
zset查询
ret, err := rdb.ZRevRangeWithScores(ctx, zsetKey, 0, 0).Result()
if err != nil {
fmt.Printf("zrevrange failed, err:%v\n", err)
return
} else {
for _, z := range ret {
fmt.Println(z.Member, z.Score)
}
}