我正在迈出在 ZF2 下使用 Redis 的第一步。 我想知道是否有一种方法可以按模式检索 key 。
例如: 在使用诸如“stackOverflow_”.time() 之类的键设置多个值后,我想稍后检索与“stackOverflow_”模式匹配的所有键。
尝试在\vendor\zendframework\zendframework\library\Zend\Cache\Storage\Adapter\AbstractAdapter.php 中使用带通配符的 getItems(array $keys)
$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 以允许 namespaces
但这需要您自己从源代码构建 redis 二进制文件。这会导致您无法再通过 apt-get
关于zend-framework2 - Zf2 Redis Adapter,getItems 使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25054682/