Php 身份验证分配数据库调用yii2

Php 身份验证分配数据库调用yii2,php,yii,yii2,yii2-advanced-app,yii2-rbac,Php,Yii,Yii2,Yii2 Advanced App,Yii2 Rbac,我正在使用Yii2并使用yii\rbac\DbManager进行身份验证分配 我查看了日志,以查看所有数据库调用来自何处以及此查询 SELECT `b`.* FROM `auth_assignment` `a`, `auth_item` `b` WHERE ((`a`.`item_name`=`b`.`name`) AND (`a`.`user_id`='91')) AND (`b`.`type`=1) 一次又一次地跑,有时连续跑10/15次 我补充说 'authManager' =

我正在使用Yii2并使用
yii\rbac\DbManager
进行身份验证分配

我查看了日志,以查看所有数据库调用来自何处以及此查询

SELECT `b`.* FROM `auth_assignment` `a`, `auth_item` `b` WHERE 
((`a`.`item_name`=`b`.`name`) AND (`a`.`user_id`='91')) AND (`b`.`type`=1)
一次又一次地跑,有时连续跑10/15次

我补充说

    'authManager' => [
        'class' => 'yii\rbac\DbManager',
        'cache' => 'cache'
    ],
正如文档所说,这将缓存身份验证分配(我使用Memcached)。但它似乎不起作用

有人知道吗?要么是如何缓存它,要么是为什么它总是被调用这么多次

干杯

仅缓存
auth_项
auth_规则
auth_项子项
数据。所有这些 数据作为缓存中的单个条目缓存。注意
auth_赋值
太大,无法缓存(想象一个系统 数百万用户)。

添加缓存 vendor/yiisoft/yii2/rbac/DbManager.php (也适用于所有需要缓存的位置)

此代码:

$all_data=$this->db->cache(函数($db)use($query){ 返回$query->all($db); },360);



确保缓存的应用程序组件ID是正确的(请仔细检查您是否真的将其称为“缓存”)。还请注意,yii\rbac\DbManager的缓存功能自版本2.0.3起就可用,因此请检查您的Yi2版本。
public function getAssignments($userId)
    {
        if (empty($userId)) {
            return [];
        }

        $query = (new Query)
            ->from($this->assignmentTable)
            ->where(['user_id' => (string) $userId]);


        $all_data = $this->db->cache(function ($db) use ($query) {
                   return $query->all($db);
                  },360);


        $assignments = [];
        foreach ($all_data as $row) {
            $assignments[$row['item_name']] = new Assignment([
                'userId' => $row['user_id'],
                'roleName' => $row['item_name'],
                'createdAt' => $row['created_at'],
            ]);
        }

        return $assignments;
    }