为什么Yii Redis cache set()方法不创建第一个参数中指定的密钥。用于Append命令

时间:2013-09-06 14:51:14

标签: php caching yii redis

我正在研究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密钥的任何想法。

4 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

使用executeCommand()

解决了用户定义键的问题
Yii::app()->cache->executeCommand("GET",array("KEY" => $name));

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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