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

Php 为什么Yii Redis cache set()方法不';t创建第一个参数中指定的密钥。它用于Append命令,php,caching,yii,redis,Php,Caching,Yii,Redis,我正在开发PHP5.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键作为append值,对于append

我正在开发PHP5.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键作为append值,对于append,我使用下面的代码

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

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

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


仍然在寻找更好的方法来解决这个问题

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

更好的方法是重写generateUniqueKey方法,只返回$key而不是哈希键


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

'class' => 'CRedisCache',
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
'hashKey' => false,
'keyPrefix' => '',
将hashkey设置为false,以便在设置时存储密钥 keyPrefix是每个缓存键的前缀字符串,请将其设置为空

class RedisCache extends CRedisCache
{
    protected function generateUniqueKey($key)
    {
        return $key;
    }
}
'class' => 'CRedisCache',
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
'hashKey' => false,
'keyPrefix' => '',