gin go 更新缓存_go语言web开发系列之九:gin框架中用bigcache做进程内缓存

一,安装用到的库

1,安装go-redis

liuhongdi@ku:~$ go get -u github.com/go-redis/redis

2,安装bigcache

liuhongdi@ku:~$ go get -u github.com/allegro/bigcache

说明:刘宏缔的go森林是一个专注golang的博客,

地址:https://blog.csdn.net/weixin_43881017

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,演示项目的相关信息

1,项目地址:

2,项目功能:演示redis+bigcache两级缓存,

通过订阅redis消息更新进程内缓存bigcache

3,项目结构:如图:

0125beb3d824f6128ad6693a508ed4bb.png

三,go代码说明

1,config/config.yaml

Database:

DBType: mysql

UserName: root

Password: password

Host: 127.0.0.1:3306

DBName: dig

Charset: utf8

ParseTime: True

MaxIdleConns: 10

MaxOpenConns: 30

Server:

RunMode: debug

HttpPort: 8000

ReadTimeout: 60

WriteTimeout: 60

Redis:

Addr: 127.0.0.1:6379

Password:

2,controller/setController.go

package controller

import (

"github.com/gin-gonic/gin"

"github.com/liuhongdi/digv10/global"

"github.com/liuhongdi/digv10/pkg/result"

)

type SetController struct{}

//new

func NewSetController() SetController {

return SetController{}

}

//发布一条消息到redis

func (u *SetController) Pub(c *gin.Context) {

resultRes := result.NewResult(c)

data:=c.Query("id")

err := global.RedisDb.Publish("articleMsg", data).Err()

if err != nil {

resultRes.Error(400,err.Error())

return

} else {

resultRes.Success("发送成功")

}

}

3,bigcache/article.go

package bigcache

import (

"encoding/json"

"fmt"

"github.com/liuhongdi/digv10/global"

"github.com/liuhongdi/digv10/model"

"strconv"

)

//bigcache中索引的名字

func getArticleCacheName(articleId uint64) (string) {

return "article_"+strconv.FormatUint(articleId,10)

}

//从bigcache得到一篇文章

func GetOneArticleBigCache(articleId uint64) (*model.Article,error) {

fmt.Println("bigcache:GetOneArticleBigCache")

key := getArticleCacheName(articleId);

val,err := global.BigCache.Get(key)

if (err != nil) {

return nil,err

} else {

article := model.Article{}

if err := json.Unmarshal([]byte(val), &article); err != nil {

return nil,err

}

return &article,nil

}

}

//向bigcache保存一篇文章

func SetOneArticleBigCache(articleId uint64,article *model.Article) (error) {

key := getArticleCacheName(articleId);

content,err := json.Marshal(article)

if (err != nil){

fmt.Println(err)

return err;

}

errSet := global.BigCache.Set(key,[]byte(content))

if (

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值