我使用redis作为我的缓存驱动程序,我想扩展功能,按模式删除密钥。
当我在redis cli中列出缓存时,我得到:
127.0.0.1:6379[1]> keys *
1) "workspace_database_workspace_cache:table_def_workspace_items"
2) "workspace_database_workspace_cache:table_def_workspaces"
但是当我抛尸的时候 $this->prefix
从 Illuminate\Cache\RedisStore
我得到:
"workspace_cache:"
由于某些原因,我的删除不起作用。当我尝试使用以下方法获取密钥时:
public function keys($pattern = '*')
{
return $this->connection()->keys($pattern);
}
我如期拿回了钥匙。
但是,如果我试图删除它们,我没有这样做(打电话时) Cache::forgetByPattern('*items')
:
public function forgetByPattern($key)
{
foreach ($this->keys($key) as $item) {
$this->connection()->del($item);
}
return true;
}
此处的项目转储显示 workspace_database_workspace_cache:table_def_workspace_items
.
如果我通过在前缀后面提供精确的键来删除(就像原来的 forget()
方法函数):
$this->connection()->del($this->prefix.'table_def_workspace_items');
它确实删除了密钥。
我也试过做一个:
$this->connection()->del('*items');
和
$this->connection()->del($this->prefix.'*items');
编辑:重新检查文档,redis不提供delby模式。
但这些都不管用。为什么会失败,为什么会添加额外的前缀?
1条答案
按热度按时间a6b3iqyw1#
厄索伊带我走上了正确的道路
monitor
功能。这是最终的产品,有效:而且,我困惑的前缀来自
database.php
配置文件位于redis.options.prefix
钥匙。