数据库 - Model 前置说明
官方开源项目 抓取代理IP

什么是UML

Redis-UML组件,就类似于游戏项目中的人物建模,它是一种面向单个数据表创建缓存模型的概念。

UML有着类似于Mysql-ORM的便捷操作语法支持,同时可自由开关数据更新时的缓存刷新标记,用于读取更新的缓存对象都有哪些,便于将缓存内容回写到数据库中。

UML的初衷

由于项目业务需要用到Reids缓存Mysql的更热新数据,进而减少数据库在updateselect时对单个数据表的频繁操作(这样的高频操作往往会将整个Mysql服务器的性能拖垮)。

在以前,我们通常会这样实现:

$Db = new \x\Db();
$Redis = new \x\Redis();
// 先查询数据库
$user = $Db->name('user')->where('id', 1)->find();
// 再更新到redis
$res = $Redis->hmset($key.$user['id'], $user);

// 需要获得该数据缓存的时候,就需要这样拿
$user = $Redis->hgetall($key.$user['id']);

该过程看似没有问题,但却只实现了对update场景的优化,实际上并没有解决select的场景,因为往往在业务过程中,select占据了最频繁的位置。

因为一旦将update由缓存代替后,那Mysql查出的数据将不一定是最新的,这时候只能依赖缓存查询,而传统的实现方式又只能实现单条缓存读取,就变成了下面的读取方式:

$Db = new \x\Db();
$Redis = new \x\Redis();
// 先查数据库
$list = $Db->name('user')->field('id')->where('region_code = 430000')>where('status = 1 OR status = 3')->select();
// 再循环从Redis中获得
foreach ($list as $k=>$v) {
	// 指定需要返回的字段名
	$list[$k] = $Redis->hmget($key.$v['id'], ['id', 'name', 'phone']);
}

UML组件的出现,就是为了解决这样的业务场景。

$User = new \box\uml\User();
// 查询条件
$where = [];
$where[] = ['region_code', '=', 430000];
$where[] = ['status', '=', [1, 3]];
// 直接从查询中获得
$list = $User->where($where)->field('id, name, phone')->select();
// 你还可以写成
$list = $User->field('id, name, phone')
        ->where('status', 430000)
        ->where('region_code', [1, 3])
        ->limit(1000)
        ->order('id DESC, phone ASC')
        ->select();

SW-X

企业级 - 高性能 PHP 框架

最后更新:2年前 . 作者-小黄牛

本篇目录