博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring-data-redis 使用过程中需要注意的一点
阅读量:5977 次
发布时间:2019-06-20

本文共 1102 字,大约阅读时间需要 3 分钟。

hot3.png

这里主要说下碰到的问题,首先,采用了spring-data-redis(以下简称SDR)中的Template进行redis的操作。

因为考虑到后期的使用场景,于是同时采用了StringRedisTemplate和RedisTemplate,并且对存储String与存储Java对象采用不同的Template进行了简单的封装。

首先是测试 保存与取出方法。分别用不同的template可以完美通过。

然后在测试删除的方法中,测试出现了问题。

问题如下:

    在采用StringRedisTemplate进行保存的数据,用StringRedisTemplate去删除可以成功删除。

    在采用RedisTemplate进行保存的数据,用RedisTemplate去删除也可以删除成功。

    在用RedisTemplate去删除StringRedisTemplate保存的数据时,发现删除失败。

    在用StringRedisTemplate去删除RedisTemplate保存的数据时,删除失败。

因为,需要封装一套通用的删除方法,并且需要封装一个批量删除的方法。所以研究了下问题出现的原因。

经过查看SDR官方给出的文档,发现是因为序列化策略的问题。

这里简单说下:

    SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。

    StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。

    RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

就是因为序列化策略的不同,即使是同一个key用不同的Template去序列化,结果是不同的。所以根据key去删除数据的时候就出现了删除失败的问题。

解决方法如下,手动指定RedisTemplate的key的序列化策略

    
    
    

这样就能完美的删除了。

这里推荐将所有Template的key都采用String的序列化方式,而value的序列化方式可以采用不同的序列化方式。

另外 出来这两个序列化方式之外,SDR还提供了  

JacksonJsonRedisSerializerJackson2JsonRedisSerializerOxmSerializer

等序列化方法,大家可以分别采用各种序列化方式做一些试验。

转载于:https://my.oschina.net/u/1402563/blog/391744

你可能感兴趣的文章
DNS相关配置
查看>>
在使用 Windows Update 检查更新时,系统没有提供下载 Windows 7 SP1 的选项
查看>>
miniWindbg 功能
查看>>
五、判断银行卡号的正则
查看>>
mysql基于mysqlslap的压力测试
查看>>
CF772E Verifying Kingdom
查看>>
rename设计思想(Perl版)
查看>>
第二次冲刺 第七天
查看>>
矩阵之矩阵乘法(转载)
查看>>
Python _内置函数3_45
查看>>
cf-Igor In the Museum (dfs)
查看>>
数据之路 Day4 - Python基础4
查看>>
使用openCV打开USB摄像头(UVC 小米micro接口)
查看>>
Luogu P3577 [POI2014]TUR-Tourism
查看>>
Scrapy框架的基本使用
查看>>
ActionResult,PartialViewResult,EmptyResult,ContentResult
查看>>
关于泛型类,泛型接口,泛型函数
查看>>
@pathvariable和@RequestParam的区别
查看>>
测试驱动开发
查看>>
C++操作符重载
查看>>