主题

  为啥会有这篇文章呢? 在redis里我需要批量删除一些 "特殊" 的数据...这些特殊的数据用正常方法比较难删除...所以记录一下我的删除方法..

背景与问题

我再用SpringBoot集成Spring的@Cacheable的时候遇到了一些比较麻烦的事情...

第一个是序列化问题...相信大家一般都会遇到过..

redisTemplate默认用的是JdkSerializationRedisSerializer

所以会生成这个样子的字符串...

其实这个样子的字符串也没关系......只要他能正常删除就行了...可是偏偏很多可视化工具都不支持...

redis本身是没有批量删除命令的...可是话工具是提供批量删除的..原理是把所有满足条件的key找出来1个1个删除...那现在问题就是他key不认识...是乱码..所以也就删除不了了..

在命令行1个1个删除是没问题的...但是key多了就GG了.......

解决办法

办法1

用这种jdk自带的序列化来序列化string的key我觉得是不合理的...这个key看都看不懂...所以我们可以指定用其他方法来序列化key...

spring本身提供了String的序列化方式(StringRedisSerializer)...所以我们可以用这个序列化类来序列化key

这样生成的key很正常..很美观...也是我们想要的

方法2

方法1是一种解决办法...但是最为学习来说我希望能有一种不是回避而是通过技术手段来解决这个问题的方法...方法1的解法是可行的.也是不错的...但到底是有没有办法批量去删除redis的key...

有的...网上大部分给的解法是这样的:

  redis-cli -h 192.168.0.8 -p 6380 keys "obj_base_*" |xargs redis-cli -h 192.168.0.8 -p 6380 del

这样是一种解决办法...但是可能是我LINUX命令不太好吧...这种删除方法对于key里面有\xAC等jdk序列化生成的字符的时候是会报错的...如果这种方法不报错...那可视化工具也是能删除的...所以这就很尴尬了...

xargs: WARNING: a NUL character occurred in the input.  It cannot be passed through in the argument list.  Did you mean to use the --null option?

可能精通linux命令的小朋友会有什么命令可以处理这些字符吧...但是我还不太会....= =

所以我自己用另外1种办法...

我想:在命令行可以删除.那再命令行可以获取真正的带引号的字符串..那只要批量执行这个命令行就OK了吧..

redis是支持lua脚本的...那我自己写个lua脚本就行了吧

花了十几分钟学习了语法以后成功写出了1个非常简单的脚本...但是还是蛮实用的..

 local key=KEYS[]
local result={};
local list=redis.call("keys", key);
for i,v in ipairs(list) do
redis.call("del", v);
table.insert(result,i,v);
end return result;

这样就比较完美的解决了批量删除问题.

小结

redis可以支持lua脚本真的很好...通过这个脚本可以做一些扩展功能...

那么我能不能自定义一些dels命令去调用lua脚本做批量删除呢? 值得尝试.....

redis 批量删除键的更多相关文章

  1. redis批量删除键的操作

    网上也有很多关于批量删除的命令,例如,我们要删除以KEY开头的键.linux系统中当屏幕显示127.0.0.1:6379时,采用如下命令 redis-cli -h 192.168.1.1 -p 637 ...

  2. Redis批量删除key的小技巧,你知道吗?

    在使用redis的过程中,经常会遇到要批量删除某种规则的key,但是redis提供了批量查询一类key的命令keys或scan,没有提供批量删除某种规则key的命令,怎么办?看完本文即可,哈哈. 本文 ...

  3. redis数据库如何批量删除键和设置过期时间?

    我们可以借助Linux中的xargs,在终端中执行命令来实现这两个功能. 一.批量删除键 批量删除以"key"开头key的方法,需要借助Linux中的xargs,在终端中执行以下命 ...

  4. Java Redis的Pipeline管道,批量操作,节省大量网络往返时间 & Redis批量读写(hmset&hgetall) 使用Pipeline

    一般情况下,大家使用redis去put/get都是先拿到一个jedis实例,然后操作,然后释放连接:这种模式是 请求-响应,请求-响应 这种模式,下一次请求必须得等第一次请求响应回来之后才可以,因为r ...

  5. redis 批量删除操作

    redis 批量删除操作 需要在redis里面清空一批数据,redis没有支持通配符删除, 只有del key1 key2 ... 但是可以通配符获取 KEYS PATTERN 然后利用linux管道 ...

  6. redis批量设置过期时间

    Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作.代码如下: redis-cli keys &qu ...

  7. Redis批量删除KEY的方法

    Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作. 代码如下: redis-cli keys “* ...

  8. 使用python向Redis批量导入数据

    1.使用pipeline进行批量导入数据.包含先使用rpush插入数据,然后使用expire改动过期时间 class Redis_Handler(Handler): def connect(self) ...

  9. redis批量灌库

    需求:将批量数据灌入redis中 如果通过代码形式将数据灌入redis中,效率比较低,以下将根据redis的特性进行快速的批量灌库 环境:centos7 将数据整理成规定格式的文件,比如: SET k ...

随机推荐

  1. (转)spring AOP探索

    原文地址:http://www.cnblogs.com/zuoxiaolong/p/spring6.html 自己整理后,供自己学习方便: 目前由AOP联盟给出了AOP的标准,AOP联盟的规范只是提供 ...

  2. Visual->UIElement->FrameworkElement,带来更多功能的同时也带来了更多的限制

    在 WPF 或 UWP 中,我们平时开发所遇到的那些 UI 控件或组件,都直接或间接继承自 Framework.例如:Grid.StackPanel.Canvas.Border.Image.Butto ...

  3. Java 自定义FTP连接池

    转自:https://blog.csdn.net/eakom/article/details/79038590 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  4. CCF 集合竞价

    题目: 问题描述 某股票交易所请你编写一个程序,根据开盘前客户提交的订单来确定某特定股票的开盘价和开盘成交量. 该程序的输入由很多行构成,每一行为一条记录,记录可能有以下几种: 1. buy p s ...

  5. 《DSP using MATLAB》示例Example7.3

    由图上可以看出,与幅度谱对应的相位谱是分段线性函数,而与振幅谱对应的相位谱是真正线性函数. 幅度谱和振幅谱的区别也很明显.

  6. Toxiproxy 网络情况模式代理

    1. 介绍 Toxiproxy is a framework for simulating network conditions. It's made specifically to work in ...

  7. Google服务,你都用了多少?

    今天无意中发现这些东西,Google提供的服务还真是多,大家经常用到的不知道有哪些呢?就我个人而言,经常用到的就是Google搜索,Gmail邮箱,还有Google论坛了. Google Ad Sen ...

  8. 单机数据库优化的一些实践(mysql)

    数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问 ...

  9. 洛谷3354(IOI2005)河流——“承诺”

    题目:https://www.luogu.org/problemnew/show/P3354 虽说是几个月前曾经讲过的题,但没有题解而自己(花了两个多小时)A了好高兴!!! 这是一个很好的套路:“承诺 ...

  10. 原 win10 msys2 vs2015 ffmpeg3.2.2 编译

    01 环境 win10x64企业版.vs2015update3企业版.git(git version 2.10.0.windows.1). 02 下载ffmpeg代码 git clone https: ...