SpringBoot Redis使用scan扫描keys出前诡异的乱码前缀
在使用SpringBoot Redis里的scan方法扫描匹配的keys时出现了诡异的乱码前缀,类似如下截图:
字符串如下:
��t�online-token-eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiIwOWM1MDVkM2ZlMjE0OGVmYTk5MmQwNjhlOGVkYzNmMCIsInVzZXIiOiJhZG1pbiIsInN1YiI6ImFkbWluIn0.fB8T1s1tK6Z4SM9nGu1Dot9EXmdOoxcDaBIhcMur00RQy5PZk0fADRSf0gqFWGhjhrfEXFGaE1kpuwQ6qQi_kw
scan的实现源码如下:
public List<String> matchScan(String pattern) {List<String> keys = redisTemplate.execute((RedisCallback<List<String>>) connection -> {List<String> keysTmp = new ArrayList<>();Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().match(pattern).count(10000).build());while (cursor.hasNext()) {keysTmp.add(new String(cursor.next()));}return keysTmp;});return keys;}
原因分析
刚开始的时候找了很久没有找到原因,最后在stackoverflow上找到了提示:
https://stackoverflow.com/questions/55967558/spring-data-redis-hash-keys-with-weird-prefixes-and-hscan-not-returning-resul
原来是序列化问题导致,默认使用了JDK的序列化方法。
解决方案
采用Redis自带的序列化方法。初始化redisTemplate时,进行设置,代码如下:
public RedisUtils(RedisTemplate<Object, Object> redisTemplate) {this.redisTemplate = redisTemplate;this.redisTemplate.setHashKeySerializer(new StringRedisSerializer());this.redisTemplate.setKeySerializer(new StringRedisSerializer());this.redisTemplate.setStringSerializer(new StringRedisSerializer());}
重新构建运行后,正常了。
SpringBoot Redis使用scan扫描keys出前诡异的乱码前缀相关推荐
- redis 用scan 代替keys 解决百万数据模糊查询超时问题
redis 用scan 代替keys 解决百万数据模糊查询超时问题 参考文章: (1)redis 用scan 代替keys 解决百万数据模糊查询超时问题 (2)https://www.cnblogs. ...
- 采坑记录-Redis使用scan代替keys
[提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! spark代码案例地址: https://github.com/Mydreaman ...
- Redis - 使用scan代替keys与hgetall操作
1.scan前言 当我们使用 keys * 或 hgetall 进行查询的时候会进行堵塞,导致 redis 整体不可用(因为redis是单线程的),而使用 scan 命令则不会. 从Redis v2. ...
- redis 用scan 代替keys,hgetAll
转载自:https://blog.csdn.net/w05980598/article/details/80264568 众所周知,当redis中key数量越大,keys 命令执行越慢,而且最重要的会 ...
- Redis 笔记(13)— scan 和 keys 寻找特定前缀key 字段(命令格式、使用示例、定位大key)
1. keys Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的 key. 127.0.0.1:6379> keys * (empty array) 127. ...
- 【342期】SpringBoot + Redis 布隆过滤器防恶意流量击穿缓存的正确姿势!
什么是恶意流量穿透 假设我们的Redis里存有一组用户的注册email,以email作为Key存在,同时它对应着DB里的User表的部分字段. 一般来说,一个合理的请求过来我们会先在Redis里判断这 ...
- SpringBoot+Redis布隆过滤器防恶意流量击穿缓存的正确姿势
什么是恶意流量穿透 假设我们的Redis里存有一组用户的注册email,以email作为Key存在,同时它对应着DB里的User表的部分字段. 一般来说,一个合理的请求过来我们会先在Redis里判断这 ...
- redis使用scan模糊匹配key
在redis实际使用中,会遇到一个问题:如何从海量的key中找出满足特定前缀的key列表? 1.不要使用keys* redis提供了一个简单包里的指令keys用来列出所有满足特定正则字符串规则的key ...
- Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十六(商品排序,Thymeleaf快速入门,商品详情页的展示)
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十六(商品详情页的展示) 一.商品排序 1.完善页面信息 这是用来做排序的,默认按照综合排序 ...
最新文章
- Linux运维基础(硬件和操作系统)
- 【005】◀▶ C#学习笔记(四)(集合)
- 基于傅里叶变换的音频重采样算法 (附完整c代码)
- thinkphp F方法
- [SQL SERVER][Memo]篩選索引
- 拉格朗日c语言实验报告,拉格朗日插值法C语言的实现(实验报告)(9页)-原创力文档...
- moosefs分布式文件系统
- 【HDU 1711】Number Sequence(裸KMP算法)
- js请求php文件 302,采集某个 url, js 请求 200,浏览器访问 302
- oracle lms进程 内存,Oracle RAC 内存融合(Cache Fusion)
- 解决Windows Server2008 R2中IE开网页时弹出阻止框
- 教你看编号选希捷硬盘
- jQuery控制表单重置
- mysql之使用json
- 《和平精英》:新军需山经魅狐、滑板小狐今日正式上线,很帅气!
- 描述性物理海洋学 --第五章学习笔记(大洋中水、盐和热收支以及风应力)
- 103000大写加零吗_关于支票金额大写规范写零的问题,比如1008712元,100万后要不要加零...
- 计算机显示找不到gpedit,Win7系统gpedit.msc找不到的解决方法
- 网站项目计划书模板范本
- 软著代办一般需要多少钱?
热门文章
- 奶奶说标题不能起的太长要不然会有憨憨跟着读之动态路由(RIP)
- 美和易思山东区域薪火训练营第五期圆满闭营
- 标准DH建模与改进DH建模(三)—— 怎么用改进DH法
- 神舟战神K670E-G6D3拆机
- call、callee、caller详解
- iPhone/三星/Nexus等手机的博通Wi-Fi芯片易被OTA攻击
- xp系统共享文件,其他电脑访问提示“您没有权限访问,请与网络管理员联系请求访问权限”解决办法。
- ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示
- java中 ‘\b‘ 回退符的使用
- 如何将本图族保存为一个rfa文件?