精华内容
下载资源
问答
  • redis linux 命令模糊删除key

    万次阅读 2018-11-06 09:30:12
    |xargsredis-cliDELRediskeys命令支持模式匹配,但是del命令不支持模式匹配,有时候需要根据一定的模式来模糊删除key,这时只能结合shell命令来完成了。具体命令是:redis-cliKEYS"pattern"|xargsredis-...

     

    摘要: redis-cliKEYS"pattern"|xargsredis-cliDELRediskeys命令支持模式匹配,但是del命令不支持模式匹配,有时候需要根据一定的模式来模糊删除key,这时只能结合shell命令来完成了。具体命令是:redis-cliKEYS"pattern"|xargsredis-cliDEL其中pattern是keys命令支持的模式,这样就可以模糊删除key了。服务器上测试

    redis-cli KEYS "pattern" | xargs redis-cli DEL 

     

    Redis keys命令支持模式匹配,但是del命令不支持模式匹配,有时候需要根据一定的模式来模糊删除key,这时只能结合shell命令来完成了。 具体命令是: 

     

    redis-cli KEYS "pattern" | xargs redis-cli DEL 

    其中pattern是keys命令支持的模式,这样就可以模糊删除key了。服务器上测试删除150万条数据的效率也是很高的。 

     

    所有的Redis命令可以在这里找到:http://redis.io/commands 

     

    KEYS命令:http://redis.io/commands/keys 

     

    DEL命令: http://redis.io/commands/del 

     

    my demo: 

    prefix_: 需要删除key的匹配的前缀名 

    redis-cli KEYS "prefix_" | xargs redis-cli DEL 

     

     

    指定端口批量删除key

     

    /usr/local/bin/redis-cli -p 8810 KEYS "EOA_ACT_*" |xargs /usr/local/bin/redis-cli -p 8810 del

     

    比如要模糊删除redis中所有abc_开头的key 

    //如果redis-cli没有设置成系统变量,需要指定redis-cli的完整路径

    opt/redis/redis-cli KEYS "abc_*" | xargs redis-cli DEL 

    //如果要指定 Redis 数据库访问密码,使用下面的命令

    redis-cli -a password keys "abc_*" | xargs redis-cli -a password del
     

    展开全文
  • Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作。redis-cli keys “*” | xargs redis-cli del//如果redis-cli没有设置成系统变量,需要...

    Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作。

    redis-cli keys “*” | xargs redis-cli del

    //如果redis-cli没有设置成系统变量,需要指定redis-cli的完整路径

    //如:/opt/redis/redis-cli keys “*” | xargs /opt/redis/redis-cli del

    如果要指定 Redis 数据库访问密码,使用下面的命令:

    redis-cli -a password keys “*” | xargs redis-cli -a password del

    如果要访问 Redis 中特定的数据库,使用下面的命令:

    //下面的命令指定数据序号为0,即默认数据库

    redis-cli -n 0 keys “*” | xargs redis-cli -n 0 del

    删除所有Key

    删除所有Key,可以使用Redis的flushdb和flushall命令:

    //删除当前数据库中的所有Key

    flushdb

    //删除所有数据库中的key

    flushall

    注:keys 指令可以进行模糊匹配,但如果 Key 含空格,就匹配不到了,暂时还没发现好的解决办法。

    展开全文
  • 1、所在机器安装redis客户端,可直接使用redis命令连接远程redis服务器2、使用命令如下:redis-cli -h IP... | xargs redis-cli -h IP -a PW del说明:IP为redis服务器ip,PW为redis密码,key为模糊匹配的起始字符串...

    1、所在机器安装redis客户端,可直接使用redis命令连接远程redis服务器

    2、使用命令如下:

    redis-cli -h IP -a PW keys "key*" | xargs redis-cli -h IP -a PW del

    说明:IP为redis服务器ip,PW为redis密码,key为模糊匹配的起始字符串

    展开全文
  • 前言还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹!Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案redis-cli --raw ...

    前言

    还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹!

    Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案

    redis-cli --raw keys "ops-coffee-*" | xargs redis-cli del

    直接在linux下通过redis的keys命令匹配到所有的key,然后调用系统命令xargs来删除,看似非常完美,实则风险巨大

    因为Redis的单线程服务模式,命令keys会阻塞正常的业务请求,如果你一次keys匹配的数量过多或者在del的时候遇到大key,都会直接导致业务的不可用,甚至造成redis宕机的风险

    所以我们在生产环境中应当避免使用上边的方法,那有什么优雅的方法来解决呢?SCAN!

    SCAN介绍及使用

    Redis从2.8版本开始支持scan命令,SCAN命令的基本用法如下:

    SCAN cursor [MATCH pattern] [COUNT count]

    cursor: 游标,SCAN命令是一个基于游标的迭代器,SCAN命令每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为SCAN命令的游标参数,以此来延续之前的迭代过程,直到服务器向用户返回值为0的游标时,一次完整的遍历过程就结束了

    MATCH: 匹配规则,例如遍历以ops-coffee-开头的所有key可以写成ops-coffee-*,中间包含-coffee-的可以写成*-coffee-*

    COUNT:  COUNT选项的作用就是让用户告知迭代命令,在每次迭代中应该从数据集里返回多少元素,COUNT只是对增量式迭代命令的一种提示,并不代表真正返回的数量,例如你COUNT设置为2有可能会返回3个元素,但返回的元素数据会与COUNT设置的正相关,COUNT的默认值是10

    以下是一个SCAN命令的迭代过程示例:

    127.0.0.1:6379> scan 0 MATCH ops-coffee-*

    1) "38"

    2) 1) "ops-coffee-25"

    2) "ops-coffee-19"

    3) "ops-coffee-29"

    4) "ops-coffee-10"

    5) "ops-coffee-23"

    6) "ops-coffee-5"

    7) "ops-coffee-14"

    8) "ops-coffee-16"

    9) "ops-coffee-11"

    10) "ops-coffee-15"

    11) "ops-coffee-7"

    12) "ops-coffee-1"

    127.0.0.1:6379> scan 38 MATCH ops-coffee-* COUNT 1000

    1) "0"

    2) 1) "ops-coffee-13"

    2) "ops-coffee-9"

    3) "ops-coffee-21"

    4) "ops-coffee-6"

    5) "ops-coffee-30"

    6) "ops-coffee-20"

    7) "ops-coffee-2"

    8) "ops-coffee-12"

    9) "ops-coffee-28"

    10) "ops-coffee-3"

    11) "ops-coffee-26"

    12) "ops-coffee-4"

    13) "ops-coffee-31"

    14) "ops-coffee-8"

    15) "ops-coffee-22"

    16) "ops-coffee-27"

    17) "ops-coffee-18"

    18) "ops-coffee-24"

    19) "ops-coffee-17"

    SCAN命令返回的是一个包含两个元素的数组,第一个数组元素是用于进行下一次迭代的新游标,而第二个数组元素则是一个数组,这个数组中包含了所有被迭代的元素

    上面这个例子的意思是扫描所有前缀为ops-coffee-的key

    第一次迭代使用0作为游标,表示开始一次新的迭代,同时使用了MATCH匹配前缀为ops-coffee-的key,返回了游标值38以及遍历到的数据

    第二次迭代使用的是第一次迭代时返回的游标,也即是命令回复第一个元素的值38,同时通过将COUNT选项的参数设置为1000,强制命令为本次迭代扫描更多元素

    在第二次调用SCAN命令时,命令返回了游标0,这表示迭代已经结束,整个数据集已经被完整遍历过了

    KEYS命令的时间复杂度为O(n),而SCAN命令会将遍历操作分解成m次时间复杂度为O(1)的操作来执行,从而解决使用keys命令遍历大量数据而导致服务器阻塞的情况,使用下边的指令可以达到优雅删除的目的:

    redis-cli --scan --pattern "ops-coffee-*" | xargs -L 2000 redis-cli del

    其中xargs -L指令表示xargs一次读取的行数,也就是每次删除的key数量,一次读取太多xargs会报错

    其他几种数据结构的优雅删除

    类似的SCAN命令,对于Redis不同的数据类型还有另外几个SSCAN、HSCAN和ZSCAN,使用方法类似:

    > sscan ops-coffee 0 MATCH v1*

    1) "7"

    2) 1) "v15"

    2) "v13"

    3) "v12"

    4) "v10"

    5) "v14"

    6) "v1"

    与SCAN命令不同的是这几个命令需要多加一个key的参数,例如上边的ops-coffee

    对于一个大的set key,借助sscan使用下边的代码可以实现优雅的批量删除:

    import redis

    def del_big_set_key(key_name):

    r = redis.StrictRedis(host='localhost', port=6379)

    # count表示每次删除的元素数量,这里每次删除300元素

    for key in r.sscan_iter(name=key_name, count=300):

    r.srem(key_name, key)

    del_big_set_key('ops-coffee')

    对于一个大的hash key,则可借助hscan使用下边的代码实现优雅的删除:

    import redis

    def del_big_hash_key(key_name):

    r = redis.StrictRedis(host='localhost', port=6379)

    # hscan_iter获取出来的结果是个元祖,下边hdel删除用key[0]取到key

    for key in r.hscan_iter(name=key_name, count=300):

    r.hdel(key_name, key[0])

    del_big_hash_key('ops-coffee')

    对于大的有序集合的删除就比较简单了,直接根据zremrangebyrank排行范围删除

    import redis

    def del_big_sort_key(key_name):

    r = redis.StrictRedis(host='localhost', port=6379)

    while r.zcard(key_name) > 0:

    # 判断集合中是否有元素,如有有则删除排行0-99的元素

    r.zremrangebyrank(key_name, 0, 99)

    del_big_sort_key('ops-coffee')

    big list大列表的删除可以参考上边这个方法,通过llen判断数量,然后ltrim移除范围内的元素,这里不赘述

    至此对于Redis的五中数据结构大key的优雅删除就全部实现了,生产环境择优使用~

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

    展开全文
  • 1 要讲的内容(1)Redis概述(2)Redis安装和部署(难点)(3)Redis数据结构类型(重点)(4)Jedis操作Redis(掌握)(5)Redis持久化机制(了解)2 Redis简介2.1 Redis是什么Redis是一个开源的,使用ANSI C 编写...
  • 场景:将用户和商户的支付宝和微信当日限额的额度累加放到redis中,时间当日失效,因为测试要删除所有的当日限额的数据 1.查看redis的安装目录 ps -ef|grep redis 2.进入redis-server的目录下,如图,执行下面...
  • Redis批量删除Key(模糊)

    千次阅读 2019-06-20 11:53:57
    1.如果删除的key没什么规律且数量不是很多,可以用RedisDesktopManager操作或者是在linux中...2.但是如果要删除的key比较多并且有一定的规律形如 key 的话可以用linux的xargs指令完成模糊key的批量删除: redis-cli -...
  • RedisLinux下的使用命令启动redisredis-server redis.conf进入redis服务redis-cli连接redis服务器redis-cli -h redis域名 -p 服务器端口 -a 密码查找redis进程ps -ef | grep redis杀死进程kill 进程id强制杀死进程...
  • redis集群批量删除模糊key shell脚本

    千次阅读 2019-09-03 17:36:53
    Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作 redis-cli keys "*" | xargs redis-cli del //如果redis-cli没有设置成系统变量,需要...
  • Linux上批量删除redis中指定前缀的key

    千次阅读 2019-09-16 17:03:49
    但是不能指定partten进行模糊匹配删除。 正好redis内置了lua解释器,那么我们通过一段lua脚本来批量删除指定前缀的key。 找到redis目录,进入src目录,使用./redis-cli登陆 默认进...
  • 这里我们就需要用到redis模糊匹配key的方法批量删除这一批key了。特意记录下。 Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的命令来完成这个动作。 首先通过...
  • 目前在网上看到的大部分文章都是通过keys 进行模糊匹配并删除的 下面介绍3种删除方法,建议使用linux去操作,可以结合xargs(点击查看介绍)命令进行操作 参数说明: [ip]: ip地址, 参数名 -> -h [port]: 端口号, ...
  • 还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹!Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案redis-cli--rawkeys...
  • #导包 import time import sys import re from rediscluster import RedisCluster #这里为集群节点及端口相关信息 redis_basis_conn=[{...#根据业务需要删除数据,这里为读取shell脚本传入日期参数给python,一边模糊
  • 还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹!Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案redis-cli--rawkeys...
  • Redis删除特定前缀key的优雅实现

    千次阅读 2019-06-17 01:25:34
    还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹! Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案 redis-cli --raw ...
  • 直接在linux下通过redis的keys命令匹配到所有的key,然后调用系统命令xargs来删除,看似非常完美,实则风险巨大 因为Redis的单线程服务模式,命令keys会阻塞正常的业务请求,如果你一次keys匹配的数量过多或者在del...
  • linux系统下,模糊匹配,可批量删除redis的key,修改ip即可使用。试用场景:redis内存爆满、redis不能定时清理数据等。
  • 还在用keys命令模糊匹配删除数据吗?这就是一颗随时爆炸的炸弹!Redis中没有批量删除特定前缀key的指令,但我们往往需要根据前缀来删除,那么究竟该怎么做呢?可能你一通搜索后会得到下边的答案redis-cli--rawkeys...
  • xshell链接阿里云redis

    2019-06-21 16:22:54
    初始查询阿里云服务器安装的redis时,每次都要查询linux命令。现在将使用到的命令总结下,以便以后使用。 一、链接redis redis-cli -h 地址 -p 端口 -a 密码 二、常用命令 Keys * 查询所有 keys home 精确查找 ...
  • linux47

    2019-03-31 12:53:13
    Redis常见操作 keys * //取出所有key keys my* //模糊匹配 exists name //有name键 返回1 ,否则返回0; del key1 // 删除一个key //成功返回1 ,否则返回0; EXPIRE key1 100 //设置key1 100s后过期 ttl key // ...
  • 目录 Redis常见操作 Redis配置文件1/2 Redis常见操作 Redis常见操作 keys * //取出所有key keys my* //模糊匹配 exists name //有name键 返回1 ,否则返回0;...del key1 // 删除一个key ...
  • 维护网站.md 文章目录Redis常见操作配置文件讲解网络相关 Redis常见操作 Redis常见操作 ...del key1 // 删除一个key //成功返回1 ,否则返回0; EXPIRE key1 100 //设置key1 100s后过期 ttl ...
  • 你怎么连模糊匹配like %%怎么优化都不知道 MySQL调优 国庆肝了8天整整2W字的数据库知识点 MySQL索引凭什么让查询效率提高这么多? 你都是如何设计索引的? 数据库自增ID用完了会怎么样? MySQL大表怎么DDL变更 ...
  • 05 模糊查询之万能的双下换线 第52章 01 上节知识回顾 02 ORM多表操作之一对多增加记录 03 ORM多表操作之一对多查询之对象查询 04 ORM多表操作之一对多查询之双下划线查询 05 ORM多表操作之多对多添加记录 06 ORM...
  • iredis:支持自动补全和高亮显示的 redis 命令行工具。 kube-shell:K8S 命令行集成的 shell 工具。 litecli:支持自动补全和语法高亮的 SQLite 命令行工具。 mycli:支持自动补全和语法高亮的 MySQL 命令行...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

linuxredis模糊删除

linux 订阅
redis 订阅