- 47
- 0
系统中有一些数据量不大且几乎不变的的数据表,数据表命名都以"L_"开头,以下简称L表。
需求:通过Redis缓存将L表数据缓存起来以提升系统响应速度
目前设计方案:
- 初始Redis时全量缓存
- Redis存储数据结构为K-V,
Key := TableName : id : name
通过这样设计Key的方式用以支持FindByID和FindByName的模糊查询
目前get方法的设计如下:
func GetData(key string) (string, error) {
return Get(key)
}
func GetKeys(pattern string) ([]string, error) {
return Keys(pattern)
}
func FindById(table_name string, id int64) (string, error) {
var q Query
q.TableName = table_name
q.ID = id
pattern := q.TableName + ":" + strconv.FormatInt(q.ID, 10) + "*"
key, _ := GetKeys(pattern)
return GetData(key[0])
}
问题:
本人Go和Redis都是初学,做了如上设计,但是由于后期需要FindBy更多字段,由于表格式的变换,Query的数据类型也有多种可能,现在的设计难以支持扩展,想问下大家相关设计经验,我应该怎样设计Get方法更好?
还望大家不吝赐教,谢谢大家!
- 共 0 条
- 全部回答
-
遠赱┈肆方 普通会员 1楼
在Go语言中,Redis是一个流行的数据结构存储系统,可以用来缓存数据。以下是一个简单的Redis缓存接口的设计:
```go package main
import ( "context" "fmt" "time"
"github.com/go-redis/redis/v8")
type RedisCache interface { // Add(key string, value interface{}) error Store(key string, value interface{}) error
// Get(key string) interface{} Load(key string) interface{}}
// RedisStore provides the Redis storage interface. type RedisStore struct { *redis.Client }
func NewRedisStore(c redis.Client) RedisStore { return &RedisStore{ *c, } }
// RedisGet provides the Redis get interface. func (rs *RedisStore) Get(key string) interface{} { return rs.Client.Get(key) }
// RedisStore提供Redis存储接口。 func (rs *RedisStore) Store(key string, value interface{}) error { return rs.Client.Set(key, value) }
// RedisGet提供Redis get接口。 func (rs *RedisStore) Load(key string) interface{} { return rs.Client.Get(key) } ```
这个接口定义了三种操作:添加数据到Redis缓存、从Redis缓存中获取数据以及将数据从Redis缓存中移除。每个操作都有一个对应的实现。
注意,这个接口并不是完全封闭的,它提供了一些公共的方法,例如
NewRedisStore和Get,这些方法在创建Redis缓存和从Redis缓存中获取数据时使用。此外,这个接口只是一个基本的实现,实际的Redis缓存可能会更复杂,例如,它可能会包含一些额外的逻辑来处理错误、处理连接问题等。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
