97 lines
1.9 KiB
Plaintext
97 lines
1.9 KiB
Plaintext
|
fork from https://github.com/liyuan1125/gorm-cache
|
||
|
|
||
|
```go
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"github.com/go-redis/redis/v8"
|
||
|
"github.com/liyuan1125/gorm-cache"
|
||
|
redis2 "github.com/liyuan1125/gorm-cache/store/redis"
|
||
|
"gorm.io/driver/mysql"
|
||
|
"gorm.io/gorm"
|
||
|
"os"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
db *gorm.DB
|
||
|
|
||
|
redisClient *redis.Client
|
||
|
|
||
|
cachePlugin *cache.Cache
|
||
|
)
|
||
|
|
||
|
func newDb() {
|
||
|
dsn := "root:123456@tcp(127.0.0.1:3306)/gorm?charset=utf8&parseTime=True&loc=Local"
|
||
|
var err error
|
||
|
|
||
|
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
||
|
if err != nil {
|
||
|
fmt.Println(err.Error())
|
||
|
return
|
||
|
}
|
||
|
|
||
|
redisClient = redis.NewClient(&redis.Options{Addr: ":6379"})
|
||
|
|
||
|
cacheConfig := &cache.Config{
|
||
|
Store: redis2.NewWithDb(redisClient), // OR redis2.New(&redis.Options{Addr:"6379"})
|
||
|
Serializer: &cache.DefaultJSONSerializer{},
|
||
|
}
|
||
|
|
||
|
cachePlugin = cache.New(cacheConfig)
|
||
|
|
||
|
if err = db.Use(cachePlugin); err != nil {
|
||
|
fmt.Println(err.Error())
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func basic() {
|
||
|
var username string
|
||
|
ctx := context.Background()
|
||
|
ctx = cache.NewExpiration(ctx, time.Hour)
|
||
|
|
||
|
db.Table("users").WithContext(ctx).Where("id = 1").Limit(1).Pluck("username", &username)
|
||
|
fmt.Println(username)
|
||
|
// output gorm
|
||
|
}
|
||
|
|
||
|
func customKey() {
|
||
|
var nickname string
|
||
|
ctx := context.Background()
|
||
|
ctx = cache.NewExpiration(ctx, time.Hour)
|
||
|
ctx = cache.NewKey(ctx, "nickname")
|
||
|
|
||
|
db.Table("users").WithContext(ctx).Where("id = 1").Limit(1).Pluck("nickname", &nickname)
|
||
|
|
||
|
fmt.Println(nickname)
|
||
|
// output gormwithmysql
|
||
|
}
|
||
|
|
||
|
func useTag() {
|
||
|
var nickname string
|
||
|
ctx := context.Background()
|
||
|
ctx = cache.NewExpiration(ctx, time.Hour)
|
||
|
ctx = cache.NewTag(ctx, "users")
|
||
|
|
||
|
db.Table("users").WithContext(ctx).Where("id = 1").Limit(1).Pluck("nickname", &nickname)
|
||
|
|
||
|
fmt.Println(nickname)
|
||
|
// output gormwithmysql
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
newDb()
|
||
|
basic()
|
||
|
customKey()
|
||
|
useTag()
|
||
|
|
||
|
ctx := context.Background()
|
||
|
fmt.Println(redisClient.Keys(ctx, "*").Val())
|
||
|
|
||
|
fmt.Println(cachePlugin.RemoveFromTag(ctx, "users"))
|
||
|
}
|
||
|
|
||
|
```
|