ulthon_admin
欢迎 目录和文件规范 系统架构 命名规范 php-cs-fixer public/static目录规范 app/common目录规范 数据库规范 CURD 命令行 表结构 数据库迁移代码 最佳实践 数据库自动缓存 后台菜单导入导出 权限的用法 table数据表格 cols operat _if titleField field selectList valueParser trueHide fieldFormat templet defaultValue search相关 time defaultSearchValue defaultToolbar init formFullScreen toobar modifyReload 控制器 CURD方法 导出 控制器通用验证 dataBrage向js传递参数 组件控件 select 下拉菜单option拼接 lay-submit paste-text粘贴 multiple-columns editor data-upload上传 tag-input标签输入 property-input动态字段输入 data-date时间控件参数 table-data列表选择器 city-picker城市选择器 copy-text 全局监听组件 data-request data-open 内置定时器 并发模式 重置密码 系统配置 PHP助手函数 sysconfig JS助手函数 checkMobile empty open 弹框 叠加loading getDataBrage getQueryVariable 扩展机制 事件扩展 实现事件 执行事件 事件列表 AdminLayoutRequireAfter LoadMigrationFiles AdminLoginIndex AdminLoginForget AdminLoginType AdminMenuTab AdminLayoutRequireBefore 自动更新 性能优化 精简代码 关闭数据库日志驱动 皮肤 正常 科幻 其他 切换模块时直接切换内容 关闭上传文件注入检测 代码编译原理 接入workerman和命令参数 升级TP6.1 Request的默认过滤 异步引入全局script 线上安装脚本 兼容PHP8.1

内置了数据库自动缓存和缓存清空功能。

基本例子

比如这样的查询:

$phone = 'xxx';
User::where('phone',$phone)->autoCache('find_by_phone',$phone)->find();

以上查询执行完之后,会自动缓存,下次再执行时,不会查询数据库,会从缓存中取数据。
但是不仅如此,我们可以在模型中定义好缓存规则,当这条数据更新时,会自动删除缓存。

class TestGoods extends TimeModel
{
    public static $autoCache = [
        [
            'name'=>'find_by_phone',
            'field'=>'phone'
        ]
    ];

按照以上定义好之后,每当数据新增,更新,删除,软删除恢复,都会自动删除缓存,以保证下一条查询语句是最新的。

用法

指定key

查询操作:

User::autoCache('last_login')->order('id','desc')->find();
// select 也同样生效,select缓存起来的是一个列表

// 以上查询等效于
User::cache('last_login')->order('id','desc')->find();

定义清除规则:

 public static $autoCache = [
     [
        'name'=>'last_login',
     ]
 ];

指定key拼接字段值

查询操作:

$phone = 'xxx';
User::where('phone',$phone)->autoCache('find_by_phone',$phone)->find();
// select 也同样生效,select缓存起来的是一个列表

// 以上查询等效于
User::cache('find_by_phone_'.$phone)->order('id','desc')->find();

定义清除规则:

 public static $autoCache = [
     [
        'name'=>'find_by_phone',
        'field'=>'phone'
     ]
 ];

指定缓存tag

查询操作:

User::page(1)
->limit(15)
->autoCache('user_list',null,'user')
->order('id','desc')
->select();

定义清除规则:

 public static $autoCache = [
     [
        'name'=>'user',
        'type'=>'tag'
     ]
 ];

当定义了以上清除规则时,每当User数据有任何新增、更新、删除等操作时,会自动清除tag为user的缓存。

指定缓存tag拼接字段值

查询操作:

$family_id = 2;
User::page(1)
->limit(15)
->autoCache(null,null,'user',$family_id)
->order('id','desc')
->where('family_id',$family_id)
->select();

// 以上查询的缓存设置等效于
User::cache(null,true,'user_'.$family_id)

定义清除规则:

 public static $autoCache = [
     [
        'name'=>'user',
        'field'=>'family_id',
        'type'=>'tag'
     ]
 ];

每当这条数据触发更新条件时,会自动清除tag名为user_2的缓存,比如还有family_id=1的缓存不会被清除。

authCache

public function autoCache($key = null, $field_value = null, $tag = null,$tag_value = null)
  • 当key为null时,会自动根据Query查询options生成key
  • key会和$field_value自动拼接
  • 当$tag为null时,不会设置缓存tag,并且$tag_value 参数对于key没有意义
  • 当$tag为字符串时,会根据tag_value拼接缓存tag

注意,authCache只会自动缓存数据,不会自动清除缓存,清除缓存需要去模型定义。

原文标题:数据库自动缓存

原文文档:ulthon_admin

原文地址:https://doc.ulthon.com/read/augushong/ulthon_admin/625f9c0ba8885/zh-cn/2.x.html

原文平台:奥宏文档

2.x