-
Notifications
You must be signed in to change notification settings - Fork 4
documentstore
guolei edited this page Jun 3, 2024
·
1 revision
本文档介绍了moke-kit提供的DocumentStore组件的使用方法。
通用的数据存储解决方案,提供了可自定义的缓存,以及基于数据版本的CAS操作来保证数据一致性,提供了数据操作通用接口等功能。
-
DocumentBase 数据操作基础结构体。
-
通用的缓存策略接口ICache 接口,用于提供CacheAside 的缓存策略,你可以根据需要实现自己的缓存策略. moke-kit 提供了redis的实现
-
通用的数据操作接口ICollection ,目前只实现了mongodb。
-
你需要在指定的
Main
中初始化RedisCacheModule /自定义的缓存Module
。func main() { fxmain.Main( ofx.RedisCacheModule, ) }
-
在你的
ParamsObject
中注入DocumentStoreModule
var GrpcService = fx.Provide( func( dbProvider ofx.DocumentStoreParams,// 注入DocumentStoreModule ) (rpc sfx.GrpcServiceResult, err error) { // 初始化DocumentStoreModule if coll, e := dbProvider.DriverProvider.OpenDbDriver(sSetting.AuthStoreName); e != nil { err = e }
-
创建基于
DocumentBase
的数据操作对象// 定义数据操作对象 type Dao struct { nosql.DocumentBase `bson:"-"` Data *ppb.Profile `bson:"data"` } // 定义初始化方法 func (d *Dao) Init(id string, doc diface.ICollection, cache diface.ICache) error { key, e := NewProfileKey(id) if e != nil { return e } d.initData() d.DocumentBase.InitWithCache(&d.Data, d.clear, doc, key, cache) return nil } // 定义创建函数 func NewProfileEntity(id string, doc diface.ICollection, cache diface.ICache) (*model.Dao, error) { dm := &model.Dao{} if err := dm.Init(id, doc, cache); err != nil { return nil, err } return dm, nil }
-
使用数据操作对象
// 创建数据操作对象 dao, err := NewProfileEntity(id, coll, cache) if err != nil { return nil, err } // 创建数据 if err := dao.Create(); err != nil { return nil, err } // 读取数据 if err := dao.Load(); err != nil { return nil, err } // 更新数据 if err := dao.Update(func()bool{ // you can update data here return dao.updateData() }); err != nil { return nil, err } // 删除数据 if err := dao.Clear(); err != nil { return nil, err }