通过使用phpredis,我以如下分页方式保存了一些数据:
review/itemA/1
review/itemA/2
其中1
和2
是页码。我在文档中读到你可以使用通配符来检索多个键。
$allKeys = $redis->keys('*'); // all keys will match this.
$keyWithUserPrefix = $redis->keys('user*');
但是,当有人发布了新的评论时,我可以使用通配符删除所有旧的键吗?我可以这样做吗:
$redis->delete('review/itemA/*'); // or $redis->delete('review/itemA*')
然而,这并没有奏效。
8条答案
按热度按时间hs1ihplo1#
不- Redis的
DEL
不接受通配符,你必须明确地为键命名。https://stackoverflow.com/a/23399125/31604753yhwsihp2#
当使用
phpredis
时,可以获取前缀(phpredis会自动在所有地方添加前缀),并删除键的模式:z3yyvxxp3#
我只是用
我觉得挺好的。
kh212irz4#
Predis(
->del
)也允许传递一个键数组。它在这里工作,比
foreach
内部的del
更快。hl0ma9xz5#
vbopmzt16#
对于Predis,我是这样做的:
4ioopgfo7#
删除函数没有通配符解决方法如下,
**注意:**正如@Akash Gangrade所评论的,由于性能原因,不建议使用keys()。您可以考虑基于标签的缓存失效,如https://symfony.com/doc/current/components/cache/cache_invalidation.html#tag-aware-adapters
3bygqnnd8#
使用scan和unlink是最佳实践,因为它们与 * key * 和 delete 不同,是非阻塞命令