Установить
существуетmoose-goразвиваться на основе
go get github.com/go-redis/redis/v8
Пакетная операция redis
redis_helper.go
- Создайте экземпляр Redis с помощью redis.NewClient.
- Инкапсуляция одноэлементного шаблона с помощью rsync
package engine
import (
"sync"
"time"
"github.com/go-redis/redis/v8"
)
type RedisHelper struct {
*redis.Client
}
var redisHelper *RedisHelper
var redisOnce sync.Once
func GetRedisHelper() *RedisHelper {
return redisHelper
}
func NewRedisHelper() *redis.Client {
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
DialTimeout: 10 * time.Second,
ReadTimeout: 30 * time.Second,
WriteTimeout: 30 * time.Second,
PoolSize: 10,
PoolTimeout: 30 * time.Second,
})
redisOnce.Do(func() {
rdh := new(RedisHelper)
rdh.Client = rdb
redisHelper = rdh
})
return rdb
}
использовать
Перед запуском приложения инициализируйте Redis и установите соединение Redis.
var (
ctx = context.Background()
)
...
rdb := engine.NewRedisHelper()
if _, err := rdb.Ping(ctx).Result(); err != nil {
log.Fatal(err.Error())
return
}
Написать два интерфейса с помощью gin
- Кэшировать информацию о пользователе в Redis
- Кэш хранится в redis и пользователь получает его через интерфейс
Инициализировать маршрут для получения RedisHelper
var ctx = context.Background()
var redisHelper *engine.RedisHelper
func (uc *UserController) RegisterRouter(app *gin.Engine) {
...
redisHelper = engine.GetRedisHelper()
...
}
кеширование пользовательского интерфейса
// 路由添加
group.GET("/cache", uc.CacheUser)
.....
// 缓存用户接口逻辑
func (uc *UserController) CacheUser(c *gin.Context) {
userInfo := &model.UserInfo{UserId: "56867897283718"}
name, err := redisHelper.Set(ctx, "moose-go", userInfo, 10*time.Minute).Result()
if err != nil {
log.Fatal(err)
common.Failed(c, "缓存用户失败")
return
}
common.Success(c, name, "缓存用户成功")
}
При сохранении объекта структуры требуется реализация структуры
MarshalBinary
метод, иначе он сообщит об ошибке[GIN-debug] Listening and serving HTTP on 0.0.0.0:8090 2021/03/29 22:55:37 redis: can't marshal *model.UserInfo (implement encoding.BinaryMarshaler) exit status 1
Сериализация в двоичный файл с использованием json
func (u *UserInfo) MarshalBinary() ([]byte, error) {
return json.Marshal(u)
}
Получить сохраненного пользователя из кеша
...
group.GET("/cache/get", uc.GetCacheUser)
...
func (uc *UserController) GetCacheUser(c *gin.Context) {
name, err := redisHelper.Get(ctx, "moose-go").Result()
if err != nil {
log.Fatal(err)
common.Failed(c, "获取缓存用户失败")
return
}
var userInfo model.UserInfo
json.Unmarshal([]byte(name), &userInfo)
common.Success(c, userInfo, "获取缓存用户成功")
}
- Данные, полученные от redis, десериализуются в структуру с помощью json
разное
- В процессе использования go-redis вам необходимо ознакомиться с командой redis
- go-redis инкапсулирует собственные команды Redis, предоставляет API и может использоваться напрямую
Адрес исходного кода демо:moose-go