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