# Redis实战源码之Model类结合
[TOC]
## RedisHash基类使用方法
### 新建一个模型 继承 BaseHash
~~~
/**
* Created by PhpStorm.
* Power By Mikkle
* Email:776329498@qq.com
* Date: 2017/8/24
* Time: 16:45
*/
namespace app\base\model;
class AdminHash extends BaseHash
{
protected $table="my_admin_hash";
protected $autoWriteTimestamp = true;
protected $hashKey="id";
}
~~~
### 新建一个控制器 调用新建的model方法进行操作
~~~
/**
* Created by PhpStorm.
* User: Mikkle
* Q Q:776329498
* Date: 2017/8/25/025
* Time: 23:23
*/
namespace app\api\controller;
use app\base\model\AdminHash;
class Demo extends Base
{
public function index(){
echo "课程演示页面";
}
public function RedisModelHash(){
$model = new AdminHash();
$data= [
'name'=>'Mikkle\' RedisHash',
"hash_edit"=>'要修改的字段',
];
echo "添加的数据".PHP_EOL;
dump($data);
$model->save($data);
$id = $model->id;
echo "添加Id为 $id ".PHP_EOL;
echo "添加后查询Hash数据为".PHP_EOL;
dump($model->RedisHash->setKey($id )->get());
$model->data(['hash_edit'=>'这个字段修改了',])->isUpdate(true,['id'=>$id ])->save();
echo "修改后查询Hash数据为".PHP_EOL;
dump($model->RedisHash->setKey($id )->get());
echo "添加后Hash库所有 key列表".PHP_EOL;
dump($model->RedisHash->keys("*"));
$model->destroy($id );
echo "删除后Hash库所有 key列表".PHP_EOL;
dump($model->RedisHash->keys("*"));
}
}
~~~
接下来 打开 http://study.mikkle.cn/api/demo/RedisModelHash
查看运行结果
![](https://box.kancloud.cn/ec4d5d2c6eed32b0472ddd905db06e2a_534x836.png)
结果显示 redis的Hash缓存 会通过model类的事件回调中同步修改
## 模型的便捷Hash类 使用作用和适用范围
* 增加数据查询速度 提高查询便捷性
使用静态方法快捷获取需要的数值,同时不必担心查询效率.
* 减轻数据库压力
Redis缓存推荐使用高访问量的数据查询,如果你的系统使用主从配置后,仍有很大压力,你可以考虑使用
* 用于数据统计信息表
如存储在线会员列表 存储数据统计报表等
hash用于存储在线会员玩家 有着非常大的用处
* 用于快速获取指定索引的数据
根据指定值 进行快速查询
## 模型的便捷Hash类 快速使用方法
为了方便便捷使用Redis Hash缓存查询需要的数据
~~~
function hash($guid = "PU592FB8F95842F575356"){
// RedisHash::instance()->clear();
//通过模型的静态方法获取
$user = PersonnelUser::quickGet("$guid");
dump($user);
//快速获取用户部门名称
$guid = $user["department_id"] ;
$table="mk_personnel_department";
//这个的示例用的redis示例
$department = RedisHash::quickGet("$table:$guid");
dump($department["department_name"]);
dump(RedisHash::quickGet("$table:$guid",["department_name"]));
}
~~~
运行结果如下:
![](https://box.kancloud.cn/1c70d61935835cfa5d64f48b1d24f4b3_521x485.png)
# 注意事项
> 如果使用了 redis的 HASH 缓存,那么新增修改时候务必使用model进行修改
> 目前所知 使用Loader 加载model也是无效的
> 换句话说 就是不能使用db类 也不能适应loader加载
>