为什么 Yii Redis 缓存 set() 方法不创建第一个参数中指定的键.用于追加命令


Why Yii Redis cache set() method don't create key specified in first parameter . Which is used for Append command

我正在研究PHP 5.3.10,Yii v1.1.14和Redis 2.2.12。我正在使用CRedisCache进行缓存(不是扩展)。

我在下面尝试了简单的代码

Yii::app()->cache->set($name, $data, 0);

此命令以 redis 格式存储数据,但指定值的键(在 redis 中)不等于 set() 函数的第一个参数。(实际上我可以使用相同的键来检索缓存Yii::app()->cache->get($name);

实际上我想要附加值的确切 redis 键,用于附加我使用以下代码。

Yii::app()->cache->executeCommand("APPEND",array("KEY" => $name, "DATA" => $data));

关于获取 redis 密钥的任何想法.

当我们使用 CRedisCache 时,它会扩展 Ccache.php

'class' => 'CRedisCache',
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
'hashKey' => false,
'keyPrefix' => '',
设置

哈希键 false,以便您的密钥将在您设置时存储keyPrefix 是一个以每个缓存键为前缀的字符串,将其设置为空

使用 executeCommand() 解决了用户定义键的问题

Yii::app()->cache->executeCommand("GET",array("KEY" => $name));
Yii::app()->cache->executeCommand("SET",array("KEY" => $name, "VALUE" => json_encode($data)));

仍在寻找解决问题的更好方法。

更好的方法是覆盖generateUniqueKey方法并简单地返回$key而不是散列键

喜欢

class RedisCache extends CRedisCache
{
    protected function generateUniqueKey($key)
    {
        return $key;
    }
}

Yii 在缓存服务器上设置密钥 (md5) 之前对其进行哈希处理。这就是为什么 redis 上的键不等于你的$name参数。