golang 基于mysql到内存map的缓存库

Bulesxz · 2019-09-08 15:22:34 · 2983 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2019-09-08 15:22:34 的文章,其中的信息可能已经有所发展或是发生改变。

golang 基于mysql到内存map的缓存库

背景

  • 很多业务上需要读取db里面的数据详情,这些数据已经存在db,会修改但不会删除,程序为了加速访问需要缓存到内存,业务上也允许内存和db 不一致,设计一个通用的dbcache 由此而来

最佳实践

    cache := NewCache(24*time.Hour, 10*time.Minute, 10, 10, "root:test@tcp(127.0.0.1:3306)/test?parseTime=True&loc=Local&multiStatements=true&charset=utf8")
    c := Cri{}
    cache.RegisterType("cri", &c)
    data, err := cache.Get("1", "cri")
    fmt.Println(data, err, "=======================")
  • . 首先new 一个cache

  • . 需要实现 Model 接口

SqlTemplate() string 返回查询sql 语句模板 UnmarshalField() Model 对象里面有些字段可能不是db直接查出而是序列号而来

  • . 注册model

    func (c *Cache) RegisterType(typeName string, m Model) typeName 为类型名称,m 为实现的model(传指针)

  • . 获取值

func (c *Cache) Get(k string,typeName) (Model, error) typeName 为类型名称 k 为参数

注意

  1. 此cache 返回data为只读,不可修改
  2. mysql 需存在此model 否则会每次穿透db

git 地址 https://github.com/Bulesxz/gocommon/tree/master/dbcache


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2983 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传