Redis 如何移除某一个分组下的所有键?(Redis 好像不支持通配符)

如 Redis 存储的键如下:
roomid:5:id.333
roomid:5:id.334
roomid:5:id.335
roomid:5:id.336
roomid:5:id.337
roomid:5:id.338
……
这种冒号的写法叫 Redis 的分组形式吧,那么我想一次性移除某个分组下的所有键,Redis 好像不支持通配符的语法,如 Del roomid:5:id.* 这种形式,在程序里如何实现呢?

PS:如果是 redis-cli 客户端命令行,可以用管道的形式 redis-cli KEYS "prefix:*" | xargs redis-cli DEL.

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12
leo

这个管道的本质也是一个个去删,和代码里用循环删是一个效果

6年前 评论

@leo 假如这个分组下有几百上千个键,循环删效率太低了

6年前 评论

是一种思路

6年前 评论

@纸牌屋弗兰克 redis上万个键删起来0.1秒都不到吧

6年前 评论
leo

@我是谁 这个取决于本地与 redis 服务器的网络延迟

6年前 评论

支持的

$keys = $redis->keys('roomid:5:id.*');
$redis->delete($keys);

大概长这样

6年前 评论

@纸牌屋弗兰克 原生php 扩展应该也会支持的 你可以去看下文档

6年前 评论

如果预料到有批量删除的情景,为什么不用 hash 呢...或者加过期时间?这种需求本身就是不太合理的

6年前 评论
jasonjiang123

高版本可以使用pipline

6年前 评论

@雨师 那万一要是 需要批量删除hash呢

6年前 评论

@zhaohehe 批量删 hash 的成本总是低于批量删除 key-value 吧,毕竟数量少一点,但是问题如果是 “如何批量删除 redis 中的key”,那么我的考量可能不适合了,请忽略哈

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!