在 Gorm 中使用 Redis 需要引入相应的 Redis 驱动库,可以使用 go-redis 或 redigo 等。
以 go-redis 为例,首先需要在项目中引入该库:
go get github.com/go-redis/redis
然后在代码中初始化 Redis 客户端并连接到 Redis 服务器:
import "github.com/go-redis/redis"
func main() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
pong, err := client.Ping().Result()
fmt.Println(pong, err)
}
接下来就可以使用 Gorm 操作 Redis 数据库了。注意,由于 Redis 是键值数据库,与关系型数据库不同,因此 Gorm 中的操作会有所不同。
例如,插入一条数据:
import (
"github.com/jinzhu/gorm"
"github.com/go-redis/redis"
)
type User struct {
ID uint `gorm:"primary_key"`
Name string
Age int
}
var db *gorm.DB
var rdb *redis.Client
func init() {
var err error
db, err = gorm.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic(err)
}
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
}
func main() {
u := User{Name: "hello", Age: 18}
b, err := json.Marshal(u)
if err != nil {
panic(err)
}
err = rdb.Set("user_1", b, 0).Err()
if err != nil {
panic(err)
}
}
查询一条数据:
b, err := rdb.Get("user_1").Bytes()
if err == redis.Nil {
fmt.Println("key does not exist")
} else if err != nil {
panic(err)
} else {
var u User
err := json.Unmarshal(b, &u)
if err != nil {
panic(err)
}
fmt.Printf("%+v\n", u)
}
更新一条数据:
u.Age = 20
b, err = json.Marshal(u)
if err != nil {
panic(err)
}
err = rdb.Set("user_1", b, 0).Err()
if err != nil {
panic(err)
}
删除一条数据:
err = rdb.Del("user_1").Err()
if err != nil {
panic(err)
}