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

问答 纸牌屋弗兰克 ⋅ 于 2017-07-16 18:21:38 ⋅ 最后回复由 雨师 2017-07-21 18:59:43 ⋅ 655 阅读

如 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.

回复数量: 12
  • leo MOD 不会写前端的后端不是好运维
    2017-07-16 19:41:06

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

  • 纸牌屋弗兰克 The journey is the reward.
    2017-07-16 22:07:11

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

  • 丁海军
    2017-07-17 09:09:38

    是一种思路

  • 我是谁
    2017-07-17 16:14:02

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

  • leo MOD 不会写前端的后端不是好运维
    2017-07-17 16:21:52

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

  • zhaohehe
    2017-07-18 11:56:04

    支持的

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

    大概长这样

  • 纸牌屋弗兰克 The journey is the reward.
    2017-07-18 12:34:00

    @zhaohehe 什么包,predis吗?

  • zhaohehe
    2017-07-18 12:49:17

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

  • 雨师
    2017-07-20 10:17:03

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

  • jasonjiang123
    2017-07-20 15:26:39

    高版本可以使用pipline

  • zhaohehe
    2017-07-20 15:47:04

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

  • 雨师
    2017-07-21 18:59:43

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

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter