iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别是什么
  • 611
分享到

Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别是什么

2023-07-06 00:07:58 611人浏览 薄情痞子
摘要

这篇文章主要介绍“Jackson2JSONRedisSerializer和GenericJackson2jsonRedisSerializer区别是什么”,在日常操作中,相信很多人在Jackson2JsonRedisSerializer和G

这篇文章主要介绍“Jackson2JSONRedisSerializer和GenericJackson2jsonRedisSerializer区别是什么”,在日常操作中,相信很多人在Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、使用Jackson2JsonRedisSerializer序列化反序列化带泛型的List数据

使用Jackson2JsonRedisSerializer序列化value的代码:

RedisTemplate<Object, Object> template = new RedisTemplate<Object,Object>();template.seTKEySerializer(new StringRedisSerializer());template.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class));
UserToken userToken = new UserToken();userToken.setMobile("176****6708");List<UserToken> list = Lists.newArrayList(userToken);redisTemplate.opsForValue().set("test",list,5,TimeUnit.MINUTES);

使用Jackson2JsonRedisSerializer序列化后的数据形式:

Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别是什么

使用Jackson2JsonRedisSerializer反序列化时报错

List<UserToken> list2 = (List<UserToken>)redisTemplate.opsForValue().get("test");list2.forEach(userToken1 -> System.out.println(userToken1.getMobile()));

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.com.baisq.model.UserToken

原因:序列化带泛型的数据时,会以map的结构进行存储,反序列化是不能将map解析成对象。

解决方案:序列化存储时,转成JSON字符串

UserToken userToken = new UserToken();userToken.setMobile("176****6708");List<UserToken> list = Lists.newArrayList(userToken);redisTemplate.opsForValue().set("test3", JSON.toJSONString(userToken),5,TimeUnit.MINUTES);String list2 = (String)redisTemplate.opsForValue().get("test3");JSON.parseArray(list2,UserToken.class).forEach(userToken1 -> System.out.println(userToken1.getMobile()));

二、使用GenericJackson2JsonRedisSerializer序列化反序列化带泛型的List数据

使用GenericJackson2JsonRedisSerializer序列化value的代码:

RedisTemplate<Object, Object> template = new RedisTemplate<Object,Object>();template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
UserToken userToken = new UserToken();userToken.setMobile("176****6708");List<UserToken> list = Lists.newArrayList(userToken);redisTemplate.opsForValue().set("test2",list,5,TimeUnit.MINUTES);

使用GenericJackson2JsonRedisSerializer序列化后的数据形式:

Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别是什么

使用GenericJackson2JsonRedisSerializer可以正常反序列化

List<UserToken> list2 = (List<UserToken>)redisTemplate.opsForValue().get("test2");list2.forEach(userToken1 -> System.out.println(userToken1.getMobile()));

原因:

使用GenericJackson2JsonRedisSerializer序列化时,会保存序列化的对象的包名和类名,反序列化时以这个作为标示就可以反序列化成指定的对象。

也可以以JSON字符串保存:

UserToken userToken = new UserToken();userToken.setMobile("176****6708");List<UserToken> list = Lists.newArrayList(userToken);    redisTemplate.opsForValue().set("test4",JSON.toJSONString(userToken),5,TimeUnit.MINUTES);String list2 = (String)redisTemplate.opsForValue().get("test4");JSON.parseArray(list2,UserToken.class).forEach(userToken1 -> System.out.println(userToken1.getMobile()));

三、使用GenericJackson2JsonRedisSerializer和Jackson2JsonRedisSerializerdo都可以正常序列化反序列化非泛型数组对象。

四、GenericJackson2JsonRedisSerializer和Jackson2JsonRedisSerializerdo效率:

long start  = System.currentTimeMillis();UserToken userToken = new UserToken();userToken.setMobile("176****6708");List<UserToken> list = Lists.newArrayListWithCapacity(100);for (int i = 0; i < 1000; i++) {   list.add(userToken);}redisTemplate.opsForValue().set("test",JSON.toJSONString(list),5,TimeUnit.MINUTES);String data = (String)redisTemplate.opsForValue().get("test");List<UserToken> list2 = JSON.parseArray(data, UserToken.class);long end = System.currentTimeMillis();long time = end - start;

测试后:

使用GenericJacksonRedisSerializer序列化反序列化耗时:1467

使用Jackson2JsonRedisSerializer序列化反序列化耗时:914

到此,关于“Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别是什么

本文链接: https://www.lsjlt.com/news/356592.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别是什么
    这篇文章主要介绍“Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别是什么”,在日常操作中,相信很多人在Jackson2JsonRedisSerializer和G...
    99+
    2023-07-06
  • Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer区别
    目录一、使用Jackson2jsonRedisSerializer序列化反序列化带泛型的List数据二、使用GenericJackson2JsonRedisSerializer序列化反序列化带泛型的List数据三、使用G...
    99+
    2023-04-10
    Jackson2JsonRedisSerializer GenericJackson2JsonRedisSerializer
  • NAS和SAN区别是什么
    这篇文章主要讲解了“NAS和SAN区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“NAS和SAN区别是什么”吧!SAN是通过光纤交换机连接存储阵列和服务器,建立专用数据存储的存储私网...
    99+
    2023-06-03
  • mq和redis区别是什么
    这篇文章主要介绍了mq和redis区别是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。       ...
    99+
    2024-04-02
  • isset()和empty()区别是什么
    isset()和empty()的区别isset是用来判断变量是否存在,而empty判断变量是否为空为假。isset能传入多个变量,而empty只能传入一个变量。isset判断过程中若其中一个变量不存在则返回假,而empty判断结果为空为假则...
    99+
    2024-04-02
  • node.js和javascript区别是什么
    本篇内容介绍了“node.js和javascript区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!node.js和javascri...
    99+
    2023-06-17
  • ./ 和 sh 的区别是什么
    ./ 和 sh 的区别是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。./ 和 sh的使用区别使用“./”执行脚本,对应的xxx.sh脚本必须要有执行权限;使用“sh”...
    99+
    2023-06-09
  • python和pycharm区别是什么
    区别是:1、Python是一种编程语言,而PyCharm是一款用于Python开发的集成开发环境;2、可以使用PyCharm来编写、调试和管理Python代码,而Python则是在PyCharm中使用的编程语言。本教程操作系统:window...
    99+
    2023-12-09
    python pycharm
  • oracle中{}和${}区别是什么
    这篇文章主要介绍“oracle中{}和${}区别是什么”,在日常操作中,相信很多人在oracle中{}和${}区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”orac...
    99+
    2024-04-02
  • SEO和SEM区别是什么
    SEO和SEM区别是1、SEO是指搜索引擎优化,而SEM则指的是搜索引擎营销;2、SEO通过优化网站的可见性,使其自然排名在有机搜索结果的前面,而SEM则通过广告付费排在搜索结果的顶部;3、SEO是一个长期的策略,它需要不断持续的努力来维持...
    99+
    2023-08-10
  • k8s和docker区别是什么
    k8s和docker区别是:1、抽象层次不同,Docker提供一种容器化的技术,而Kubernetes提供一个容器编排和管理的平台;2、管理范围不同,Docker主要用于本地开发和单主机环境中的容器管理,而Kubernetes适用于多主机或...
    99+
    2023-07-24
  • vscode和visualstudio区别是什么
    vscode和visualstudio区别有:1.含义不同;2.功能不同;3.跨平台能力不同;vscode和visualstudio区别有以下几点含义不同vscode是微软公司的开发工具包系列产品,是一个基本完整的开发工具集,其包括了UML...
    99+
    2024-04-02
  • 什么是utf8mb4和utf8mb3区别?
    关于utf8mb4 utf8mb4是MySQL / MariaDB中的一种字符集。 在当前主流版本的MySQL / MariaDB中,使用utf8作为字符集时,默认表示的是utf8mb3。 关于utf...
    99+
    2023-09-10
    mysql 数据库
  • ipython和python区别是什么
    IPython与Python之间的主要区别在于IPython是Python的一个增强版本的交互式解释器,IPython提供了更加丰富的功能和工具,适用于更为高效和便捷的交互式编程和数据科学应用。IPython作为Python的增强版,提供了...
    99+
    2023-12-09
    IPython python
  • php和java区别是什么
    php和java区别:java是一种静态编程语言,而php是动态的。php适合于快速开发,中小型应用系统,而java适合于开发大型的应用系统。Java通过JDBC来访问数据库,访问数据库的接口比较统一,而php对于不同的数据库采用不同的数据...
    99+
    2024-04-02
  • mysql和sqlite区别是什么
    1.MYSQL是完善的服务器数据库,功能全面,综合化,追求最大并发效率;而SQLITE是单机数据库,功能简约,小型化,追求最大磁盘效率。MySql主要用来做服务端的开发;而Sqlite是用来做客户端开发。SQLite没有内置的身份验证机制,...
    99+
    2024-04-02
  • cmake和makefile区别是什么
    CMake和Makefile都是构建和管理C/C++项目的工具,但是它们有一些重要的区别。Makefile是一种脚本文件,用于定义项...
    99+
    2023-08-16
    cmake makefile
  • word和wps区别是什么
    今天小编给大家分享一下word和wps区别是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。word和wps的区别:1、大...
    99+
    2023-07-01
  • sqlserver和mysql区别是什么
    sqlserver和mysql区别是:1、Server适用于Windows操作系统,而MySQL适用于多个操作系统;2、Server需要购买许可证才能使用,而MySQL可以免费下载和使用;3、Server适用于大型企业级应用程序,而MySQ...
    99+
    2023-08-14
  • redis和rabbitmq区别是什么
    这篇文章主要介绍redis和rabbitmq区别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!           ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作