目录
前言
刚学完redis,在此记录如何使用redis。redis有许多go语言的客户端包,都能实现对redis的操作。例如redigo、go-redis。
一、Redigo
1.redigo连接redis服务器
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
client, err := redis.Dial("tcp", "localhost:6379")
defer client.Close()
if err != nil {
fmt.Println("redis connect failed,", err)
return
}
fmt.Println("redis connect success")
}
2.set、get操作
- 设置值
_, err = client.Do("Set", "abc", 100)
if err != nil {
fmt.Println("set string failed", err)
return
}
_, err = client.Do("Set", "36D", "good")
if err != nil {
fmt.Println("set string failed", err)
return
}
- 获取值
// redigo 通过redis.Int()函数来获取整型
res, err := redis.Int(client.Do("Get", "abc"))
if err != nil {
fmt.Println("get string failed,", err)
return
}
fmt.Println(res)
// redigo 通过redis.String()函数来获取字符串
res1, err := redis.String(client.Do("Get", "36D"))
if err != nil {
fmt.Println("get string failed,", err)
return
}
fmt.Println(res1)
- 批量获取
res3, err := redis.Strings(client.Do("MGet", "36", "32"))
if err != nil {
fmt.Println("get string failed,", err)
return
}
fmt.Println(res3)
- 设置过期时间
// 设置过期时间
_, err = client.Do("setex" , "a", 2, "10")
if err != nil {
fmt.Println("set string failed", err)
return
}
res2, err := redis.String(client.Do("Get", "a"))
if err != nil {
fmt.Println("get string failed,", err)
return
}
fmt.Println(res2)
time.Sleep(5 * time.Second)
fmt.Println("5秒后")
res2, err = redis.String(client.Do("Get", "a"))
if err != nil {
fmt.Println("get string failed,", err)
return
}
fmt.Println(res2)
输出如下:
10
5秒后
get string failed, redigo: nil returned
2.List操作
- lpush key element1 element2:向列表左侧插入若干个元素
// 从左边放入元素
_, err = client.Do("lpush", "NBAplayer", "Jordon", "Kobe", "Lebron")
if err != nil {
fmt.Println("push element failed")
return
}
- lrange key start end:返回范围内的所有元素
// 取出所有元素
res4, err := redis.Strings(client.Do("lrange", "NBAplayer", "0", "-1"))
if err != nil {
fmt.Println("get element failed")
return
}
for _, v := range res4{
fmt.Println(v)
}
输出结果:
Lebron
Kobe
Jordon
3.Hash表
- hset key field value:添加或修改hash类型key的field的值
// 单个插入
_, err = client.Do("HSet", "DSB", "name", "SB")
if err != nil {
fmt.Println("hset failed")
return
}
- hmset key field1 value1 field2 value2:批量添加多个hash类型key的field值
_, err = client.Do("HmSet", "DSB", "age", "18", "addr", "usa")
if err != nil {
fmt.Println("hmset failed")
return
}
- hget key field:获取一个hash类型的key的field的值
// 单个获取
res5, err := redis.String(client.Do("Hget", "DSB", "name"))
if err != nil {
fmt.Println("hget element failed")
return
}
fmt.Println(res5)
- hmget key field1 field2:批量获取hash类型key多个field的value值
// 批量获取
res6, err := redis.Strings(c