博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot Redis使用fastjson进行序列化
阅读量:5994 次
发布时间:2019-06-20

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

 在使用spring-data-redis,默认情况下是使用org.springframework.data.redis.serializer.JdkSerializationRedisSerializer这个类来做序列化

我们使用jackson方式:

Jackson redis序列化是spring中自带的

@Bean(name="redisTemplate")    public RedisTemplate
redisTemplate() { Jackson2JsonRedisSerializer
jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); RedisTemplate
template = new RedisTemplate
(); template.setConnectionFactory(factory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(jackson2JsonRedisSerializer); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(jackson2JsonRedisSerializer); template.setDefaultSerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; }

使用fastjson方式:

public class FastJson2JsonRedisSerializer
implements RedisSerializer
{ public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); private Class
clazz; public FastJson2JsonRedisSerializer(Class
clazz) { super(); this.clazz = clazz; } public byte[] serialize(T t) throws SerializationException { if (t == null) { return new byte[0]; } return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET); } public T deserialize(byte[] bytes) throws SerializationException { if (bytes == null || bytes.length <= 0) { return null; } String str = new String(bytes, DEFAULT_CHARSET); return (T) JSON.parseObject(str, clazz); }}

注册:

@Configurationpublic class RedisConfig {    @Autowired    private RedisConnectionFactory factory;    @Autowired    private RedisSerializer fastJson2JsonRedisSerializer;    //fastjson    @Bean(name="redisTemplate")    public RedisTemplate
fastJsonRedisTemplate() { RedisTemplate
template = new RedisTemplate
(); template.setConnectionFactory(factory); //redis开启事务 template.setEnableTransactionSupport(true); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(fastJson2JsonRedisSerializer); template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(fastJson2JsonRedisSerializer); template.setDefaultSerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; }}

在redis工具类中调用RedisTemplate:

@Componentpublic class RedisCacheUtil {    @Autowired    @Qualifier("redisTemplate")    private  RedisTemplate
redisTemplate;}

对比:

jackson方式序列化存储redis中数据:

[  "com.qhong.test.dependBean.Person",  {    "age": 20,    "name": "name0",    "iss": true  }]
[  "java.util.ArrayList",  [    [      "com.qhong.test.dependBean.Person",      {        "age": 20,        "name": "name0",        "iss": true      }    ],    [      "com.qhong.test.dependBean.Person",      {        "age": 21,        "name": "name1",        "iss": true      }    ],    [      "com.qhong.test.dependBean.Person",      {        "age": 22,        "name": "name2",        "iss": true      }    ]  ]]

上面的完全不符合json格式规范

fastjson方式序列化:

{  "@type": "com.qhong.test.dependBean.Person",  "age": 20,  "iss": true,  "name": "name0"}
[  {    "@type": "com.qhong.test.dependBean.Person",    "age": 20,    "iss": true,    "name": "name0"  },  {    "@type": "com.qhong.test.dependBean.Person",    "age": 21,    "iss": true,    "name": "name1"  },  {    "@type": "com.qhong.test.dependBean.Person",    "age": 22,    "iss": true,    "name": "name2"  }]

虽然也不是很好,但是比jackson的好多了

 

转载地址:http://ujqlx.baihongyu.com/

你可能感兴趣的文章
iOS开发-数据存储NSCoder
查看>>
SQL Server 存储过程【转】
查看>>
localstorage和sessionstorage上手使用记录
查看>>
荣耀手机缅甸仰光店开业,只有我觉得缅甸美女比较多吗?
查看>>
融合数据库技术,降低开源MySQL使用成本实践
查看>>
IDC:全球以太网交换机和路由器市场整体看涨
查看>>
英国零售商:“无协议脱欧”恐让超市空荡荡
查看>>
致 CODING 用户的元宵问候
查看>>
看Zepto如何实现增删改查DOM
查看>>
《从零构建前后分离的web项目》:前端1.0 终 - 前端性能优化 (多图预警)
查看>>
什么都不做就能赚钱?Airbnb靠什么牛逼的技术赚全世界人的钱?
查看>>
读Zepto源码之操作DOM
查看>>
少年,我看你骨骼精奇,见与你有缘,这套算法赠你
查看>>
React Native 解决 Navigator.pop 无法传参数
查看>>
二级指针与ARC不为人知的特性
查看>>
如何合并两个TensorFlow模型
查看>>
移动端数据统计,精细化运营的永动机
查看>>
Electron Cash钱包存BCH教程
查看>>
iOS Tagged Pointer (源码阅读必备知识)
查看>>
原码,补码,反码
查看>>