2

我正在开发 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

4 回答 4

5

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

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

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

于 2016-04-15T12:26:11.573 回答
1

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

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

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

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

于 2013-09-07T07:05:54.260 回答
0

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

喜欢

class RedisCache extends CRedisCache
{
    protected function generateUniqueKey($key)
    {
        return $key;
    }
}
于 2014-09-18T10:36:35.720 回答
0

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

于 2014-02-03T11:42:35.423 回答