## 缓存机制设计
**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")
```
- 序言
- 基础
- 安装GoHub
- 目录结构
- 开发规范
- 部署项目
- 架构
- 架构总览
- 生命周期
- 配置
- 配置介绍
- 配置目录
- 配置格式
- 配置加载
- 读取配置
- 动态配置
- 环境变量配置
- 路由
- 路由模式
- 路由定义
- 路由参数
- 路由分组
- 路由限流
- 路由拆分
- 控制器
- 控制定义
- 控制器初始化
- 中间件
- Make创建控制器
- 请求
- 请求信息
- 数据库
- 连接数据库
- 基本使用
- Make创建模型
- 日志
- 介绍
- 日志驱动
- 日志写入
- HTTP日志
- 数据库请求日志
- 错误和调试
- Debuger调试器
- 验证
- 验证器
- 验证规则
- Make创建验证器
- 杂项
- 缓存
- 分页
- 验证码
- CURL请求
- 命令行
- 基础知识
- console 包
- Cobra 基础
- 命令行模式
- 附录
- 配置参考
- 第三方依赖库