SpringSessionRedis最佳实践(3)使⽤Fastjson替换JDK序列
化存储
这⼀篇来继续说说Spring Session Redis中的数据存储,将默认的JDK序列化存储修改为使⽤Fastjson存储,实际上我们知道JDK序列化的性能⾮常慢,⽽且我们⽆法直观的查看其中的数据,另外⼀个我不确定使⽤JDK序列化的数据能否使⽤其它语⾔进⾏反序列化,反正json 格式的数据可以,⽽且fastjson是世界上最快的json实现,所以这个实现值得这么去做。
在Spring Session Redis的数据存储⽅式除了提供JDK的序列化外,也提供有使⽤JSON格式的数据存储,但JSON组件为“Jackson”,参考实现如下图:
⾸先依赖的fastjson jar的gav前⽂中有给出,并且版本稍微有点新,其次需要修改l配置⽂件中的RedisHttpSessionConfiguration配置参数,增加defaultRedisSerializer属性并引⽤fastJsonRedisSerializer的序列化实现,⽽fastJsonRedisSerializer它的构造函数则依赖⼀个Class类型的对象,⾄于fastJsonRedisSerializer的实现⽹络上也是搜索出来许多的实现⽅式,基本都是⾃⼰写的,按照接⼝实现规范重写⽅法,最后使⽤JSONString与JSON.parseObject的形式进⾏存储于转换。让我意外的是我也使⽤此种实现时我的class命名与fastjson中提供的实现⽅式相同,所以不出意外的我发现了新版fastjson中提供的Spring Session Redis的⾃带实现,参见上图可以看出⼀共给提供了2个实现,分别是FastJsonRedisSerializer与GenericFastJsonRedisSerializer,本⽂使⽤前者。
使⽤前⽂中的命令再查看session ID数据时,可以看出来所有的数据值都已经存储为JSON格式了,详见下图:
fastjson怎么用注意了啊,这⾥的更改默认序列化实现⽅式与直接往session⾥存储数据时使⽤JSONString有⼀些区别的,替换后直接再存储时就是以JSON格式了,参考配置⽂件如下:
<context:annotation-config/>
<bean class="org.springframework.fig.annotation.web.http.RedisHttpSessionConfiguration"> <property name="defaultRedisSerializer" ref="fastJsonRedisSerializer" />
</bean>
<bean class="org.springframework.fig.PropertyPlaceholderConfigurer">
<property name="locations">
<array>
<value>classpath:spring-config-redis.properties</value>
</array>
</property>
</bean>
<!--直接采⽤property的形式可以看到很多属性已经过期了-->
<bean id="jedisConnectionFactory"class="org.tion.jedis.JedisConnectionFactory" p:hostName="${dis.hostName}" p:port="${dis.port}" p:database="${dis.database}"
p:poolConfig-ref="jedisPoolConfig"
>
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${dis.maxTotal}"/>
<property name="maxIdle" value="${dis.maxIdle}"/>
<property name="minIdle" value="${dis.minIdle}"/>
<property name="testOnBorrow" value="${stOnBorrow}"/>
<property name="maxWaitMillis" value="${dis.maxWaitMillis}"/>
</bean>
<bean id="fastJsonRedisSerializer" class="com.alibaba.fastjson.support.spring.FastJsonRedisSerializer">
<constructor-arg name="type" value="java.lang.Object" />
</bean>
其它说明
(1)发现这个session数据中存储的中⽂显⽰的有问题,不知这么设计是何⽤意;
(2)在替换默认格式化为json时,⽹络上许多⽂章⾥⾯有的“redisTemplate”的配置没有关系;
源码下载
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论