Zend framework2 Zf2 Redis适配器,使用通配符获取项目
我正在ZF2下使用Redis的第一步。 我想知道是否有一种方法可以按模式检索键 e、 g: 在使用诸如“stackOverflow”.time()之类的键设置多个值之后,我希望稍后检索与“stackOverflow”模式匹配的所有键 尝试在:\vendor\zendframework\zendframework\library\Zend\Cache\Storage\Adapter\AbstractAdapter.php中使用带有通配符的getItems(数组$keys)Zend framework2 Zf2 Redis适配器,使用通配符获取项目,zend-framework2,redis,Zend Framework2,Redis,我正在ZF2下使用Redis的第一步。 我想知道是否有一种方法可以按模式检索键 e、 g: 在使用诸如“stackOverflow”.time()之类的键设置多个值之后,我希望稍后检索与“stackOverflow”模式匹配的所有键 尝试在:\vendor\zendframework\zendframework\library\Zend\Cache\Storage\Adapter\AbstractAdapter.php中使用带有通配符的getItems(数组$keys) $redisKeyPat
$redisKeyPattern = 'stackOverflow_';
$redis = $this->getServiceLocator()->get('Redis');
$values = $redis->getItems(array($redisKeyPattern.'*'));
没有成功
有什么想法吗
乌德帕特: 谢谢各位。我最终复制了Redis适配器,并添加了我自己的功能,该功能利用了Redis扩展中的“键”功能:
public function getItemsByKeyPattern($pattern) {
$keys = $this->getRedisResource()->keys('*'.$pattern.'*');
if(empty($keys)) return null;
foreach($keys as &$key){
$key = explode(':', $key)[1];
}
$items = parent::getItems($keys);
return $items;
}
这对我来说很有用:)遗憾的是,目前没有使用通配符返回项目的方法,而且redis不支持存储项目的名称空间 您需要定义您想要接收的每个项目,也许您应该看看这样的实现
$receiveRedisKeys = [];
foreach($resultSet as $result)
{
$receiveRedisKeys[] = 'predefined_prefix_' . $result->getId();
}
$redisCacheResultSet = $redis->getItems($receiveRedisKeys);
我知道github上有人创建了一个新的存储库,他在其中修改了redis以允许
名称空间
,但这需要您自己从源代码构建redis二进制文件。这将使您无法再通过apt get更新redis版本。这是不可能的,但有一些替代方案
一个想法是保留一套你感兴趣的钥匙。这是解决此问题最常见的方法:每次创建一个以后要检索的键时,都要将其名称添加到集合中。然后,当您需要操作其中一个键时,您可以从集合中抓取它。阅读本书,了解该方法的大致情况
另一种方法是使用SCAN
命令以您正在使用的模式遍历键空间,然后作为第二步,使用MGET
检索值,后跟您收集的键。这种方法适用于管理流程,但不应包含在应用程序中,因为性能会比第一种方法差。更多关于
最后,一个不推荐但为了完整起见我列出的选项是使用KEYS
命令收集所需的密钥,然后继续使用MGET
获取值,如SCAN
方法。不建议这样做,因为生产环境中不应使用键。更多关于