在使用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出前诡异的乱码前缀相关推荐

  1. redis 用scan 代替keys 解决百万数据模糊查询超时问题

    redis 用scan 代替keys 解决百万数据模糊查询超时问题 参考文章: (1)redis 用scan 代替keys 解决百万数据模糊查询超时问题 (2)https://www.cnblogs. ...

  2. 采坑记录-Redis使用scan代替keys

    [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! spark代码案例地址: https://github.com/Mydreaman ...

  3. Redis - 使用scan代替keys与hgetall操作

    1.scan前言 当我们使用 keys * 或 hgetall 进行查询的时候会进行堵塞,导致 redis 整体不可用(因为redis是单线程的),而使用 scan 命令则不会. 从Redis v2. ...

  4. redis 用scan 代替keys,hgetAll

    转载自:https://blog.csdn.net/w05980598/article/details/80264568 众所周知,当redis中key数量越大,keys 命令执行越慢,而且最重要的会 ...

  5. Redis 笔记(13)— scan 和 keys 寻找特定前缀key 字段(命令格式、使用示例、定位大key)

    1. keys Redis 提供了一个简单暴力的指令 keys 用来列出所有满足特定正则字符串规则的 key. 127.0.0.1:6379> keys * (empty array) 127. ...

  6. 【342期】SpringBoot + Redis 布隆过滤器防恶意流量击穿缓存的正确姿势!

    什么是恶意流量穿透 假设我们的Redis里存有一组用户的注册email,以email作为Key存在,同时它对应着DB里的User表的部分字段. 一般来说,一个合理的请求过来我们会先在Redis里判断这 ...

  7. SpringBoot+Redis布隆过滤器防恶意流量击穿缓存的正确姿势

    什么是恶意流量穿透 假设我们的Redis里存有一组用户的注册email,以email作为Key存在,同时它对应着DB里的User表的部分字段. 一般来说,一个合理的请求过来我们会先在Redis里判断这 ...

  8. redis使用scan模糊匹配key

    在redis实际使用中,会遇到一个问题:如何从海量的key中找出满足特定前缀的key列表? 1.不要使用keys* redis提供了一个简单包里的指令keys用来列出所有满足特定正则字符串规则的key ...

  9. Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十六(商品排序,Thymeleaf快速入门,商品详情页的展示)

    Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十六(商品详情页的展示) 一.商品排序 1.完善页面信息 这是用来做排序的,默认按照综合排序 ...

最新文章

  1. Linux运维基础(硬件和操作系统)
  2. 【005】◀▶ C#学习笔记(四)(集合)
  3. 基于傅里叶变换的音频重采样算法 (附完整c代码)
  4. thinkphp F方法
  5. [SQL SERVER][Memo]篩選索引
  6. 拉格朗日c语言实验报告,拉格朗日插值法C语言的实现(实验报告)(9页)-原创力文档...
  7. moosefs分布式文件系统
  8. 【HDU 1711】Number Sequence(裸KMP算法)
  9. js请求php文件 302,采集某个 url, js 请求 200,浏览器访问 302
  10. oracle lms进程 内存,Oracle RAC 内存融合(Cache Fusion)
  11. 解决Windows Server2008 R2中IE开网页时弹出阻止框
  12. 教你看编号选希捷硬盘
  13. jQuery控制表单重置
  14. mysql之使用json
  15. 《和平精英》:新军需山经魅狐、滑板小狐今日正式上线,很帅气!
  16. 描述性物理海洋学 --第五章学习笔记(大洋中水、盐和热收支以及风应力)
  17. 103000大写加零吗_关于支票金额大写规范写零的问题,比如1008712元,100万后要不要加零...
  18. 计算机显示找不到gpedit,Win7系统gpedit.msc找不到的解决方法
  19. 网站项目计划书模板范本
  20. 软著代办一般需要多少钱?

热门文章

  1. 奶奶说标题不能起的太长要不然会有憨憨跟着读之动态路由(RIP)
  2. 美和易思山东区域薪火训练营第五期圆满闭营
  3. 标准DH建模与改进DH建模(三)—— 怎么用改进DH法
  4. 神舟战神K670E-G6D3拆机
  5. call、callee、caller详解
  6. iPhone/三星/Nexus等手机的博通Wi-Fi芯片易被OTA攻击
  7. xp系统共享文件,其他电脑访问提示“您没有权限访问,请与网络管理员联系请求访问权限”解决办法。
  8. ESP32基于Arduino框架下U8g2驱动I2C OLED 时间显示
  9. java中 ‘\b‘ 回退符的使用
  10. 如何将本图族保存为一个rfa文件?