zend-framework2 - Zf2 Redis Adapter,getItems 使用通配符

标签 zend-framework2 redis

我正在迈出在 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

更新 redis 版本

关于zend-framework2 - Zf2 Redis Adapter,getItems 使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25054682/

相关文章:

ruby-on-rails - Redis 对象 - 从数据库中获取所有对象 - 配置文件 View 计数器

javascript - 使用 socket node.js 检测用户切换页面

javascript - 无法在 zend 框架 2 中使用 ajax 发布值

doctrine-orm - 在 zf2 中获取学说数据库配置

php - Zend/Barcode/Barcode.php 处的 Codeigniter + Zend 条码错误

java - Spring Redisson哨兵错误-至少需要两个哨兵

redis - 如果 Redis 键永远不会以编程方式删除怎么办?

python - 从 Redis 获取数据(异步、串行版本与多处理)

php - Zend Framework 2.0 中的自动加载自定义库

php - Zend Framework 2 数据库连接问题