🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 缓存机制设计 **Store interface** 目前系统中使用到 `Redis`,`cache` 包不应该只依赖于 `Redis` ,后续如使用其他缓存方案,如 `Memcached` ,可以很方便切换。所以这里我们利用 `Go` 的 `interface` 功能,将数据存储抽象化。 **RedisStore** `RedisStore` 是 `cahce` 包的 `Store interface Redis` 实现。目前我们的 `Redis` 里存放多种业务逻辑的数据,如数字验证码、短信验证码等,缓存的信息应该和这些业务数据使用不同的数据库。 ## 使用 使用缓存前必须引用 `"gohub/pkg/cache"`包文件。 #### 设置缓存 设置自缓存(有效期2小时) ``` cache.Set("name", "张三", 120 * time.Minute) ``` 无返回值 ***** #### 缓存自增 针对数值类型的缓存数据,可以使用自增操作,例如: ``` // age自增(步进值为1) cache.Increment("age") // age自增(步进值为3),第二个参数是Int64 cache.Increment("age", cast.ToInt64(3)) ``` 注意:自增操作不会使用缓存前缀 ***** #### 缓存自减 针对数值类型的缓存数据,可以使用自减操作,例如: ``` // age自减(步进值为1) cache.Decrement("age") // age自减(步进值为3),第二个参数是Int64 cache.Decrement("age", cast.ToInt64(3)) ``` 注意:自减操作不会使用缓存前缀 ***** #### 获取缓存 获取缓存数据可以使用: ``` cache.Get("test") ``` 注意它的返回值不是字符串,如果你想转换它可以使用: ``` cast.ToString(cache.Get("test")) ``` 获取缓存还支持获取指定类型的缓存数据: ``` // 应该传地址, 示例:cache.GetObject("key", &model) cache.GetObject("test") cache.GetString("test") cache.GetBool("test") cache.GetInt("test") cache.GetInt32("test") cache.GetInt64("test") cache.GetUint("test") cache.GetUint32("test") cache.GetUint64("test") cache.GetFloat64("test") cache.GetTime("test") cache.GetDuration("test") cache.GetIntSlice("test") cache.GetStringMap("test") cache.GetStringMapString("test") ... ``` ***** #### 删除缓存 ``` cache.Del("test") ``` ***** #### 清空缓存 ``` cache.Flush() ``` ## Redis使用 注意:直接操作`redis`是不会添加缓存前缀的 设置缓存 ``` redis.Redis.Set("hello", "hi from redis", 10*time.Second) ``` 读取缓存 ``` redis.Redis.Get("hello") ```