Las mejores prácticas de Spring Session Redis (3) usan Fastjson para reemplazar el almacenamiento serializado JDK

Bienvenido al sitio para ver el texto original, el enlace es: https://www.chendd.cn/information/viewInformation/experienceShare/311.a

Este artículo continuará hablando sobre el almacenamiento de datos en Spring Session Redis y modificará el almacenamiento de serialización JDK predeterminado para usar el almacenamiento Fastjson. De hecho, sabemos que el rendimiento de la serialización JDK es muy lento y no podemos ver los datos visualmente en Además, no estoy seguro de si los datos serializados mediante JDK se pueden deserializar en otros idiomas. De todos modos, se pueden utilizar los datos en formato json, y fastjson es la implementación de json más rápida del mundo, por lo que vale la pena realizar esta implementación. .

Además de proporcionar serialización JDK, el método de almacenamiento de datos de Spring Session Redis también proporciona almacenamiento de datos en formato JSON, pero el componente JSON es "Jackson". La implementación de referencia es la siguiente:

gota.png

En primer lugar, el gav del jar fastjson del que depende se proporciona en el artículo anterior, y la versión es un poco nueva.En segundo lugar, debe modificar el parámetro de configuración RedisHttpSessionConfiguration en el archivo de configuración session.xml, agregar el atributo defaultRedisSerializer y hacer referencia a la implementación de serialización de fastJsonRedisSerializer, y el constructor de fastJsonRedisSerializer se basa en un objeto de tipo Clase. En cuanto a la implementación de fastJsonRedisSerializer, hay muchos métodos de implementación buscados en Internet, que básicamente están escritos por ellos mismos. El método se reescribe de acuerdo con a la especificación de implementación de la interfaz y, finalmente, se almacena en forma de JSON.toJSONString y JSON.parseObject para la conversión. Para mi sorpresa, cuando también uso esta implementación, el nombre de mi clase es el mismo que el de la implementación provista en fastjson, por lo que no es sorprendente que haya encontrado la implementación integrada de Spring Session Redis provista en la nueva versión de fastjson. la imagen de arriba. Se puede ver que se proporcionan un total de 2 implementaciones, a saber, FastJsonRedisSerializer y GenericFastJsonRedisSerializer. Este artículo utiliza la primera.

Cuando usa el comando en el artículo anterior para ver los datos de ID de sesión, puede ver que todos los valores de datos se han almacenado en formato JSON, como se muestra en la figura a continuación:

gota.png

Preste atención, hay algunas diferencias entre cambiar la implementación de serialización predeterminada aquí y usar JSON.toJSONString al almacenar datos directamente en la sesión. Después del reemplazo, se almacenará directamente en formato JSON. El archivo de configuración de referencia es el siguiente:

<context:annotation-config/>
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
    <property name="defaultRedisSerializer" ref="fastJsonRedisSerializer" />
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <array>
            <value>classpath:spring-config-redis.properties</value>
        </array>
    </property>
</bean>
<!--直接采用property的形式可以看到很多属性已经过期了-->
<bean id="jedisConnectionFactory"class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
      p:hostName="${spring.redis.hostName}" p:port="${spring.redis.port}" p:database="${spring.redis.database}"
      p:poolConfig-ref="jedisPoolConfig"
>
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxTotal" value="${spring.redis.maxTotal}"/>
    <property name="maxIdle" value="${spring.redis.maxIdle}"/>
    <property name="minIdle" value="${spring.redis.minIdle}"/>
    <property name="testOnBorrow" value="${spring.redis.testOnBorrow}"/>
    <property name="maxWaitMillis" value="${spring.redis.maxWaitMillis}"/>
</bean>
<bean id="fastJsonRedisSerializer" class="com.alibaba.fastjson.support.spring.FastJsonRedisSerializer">
    <constructor-arg name="type" value="java.lang.Object" />
</bean>

otras instrucciones

(1) Encontré que hay un problema con la pantalla china almacenada en los datos de la sesión, y no sé cuál es el propósito de este diseño;

(2) Al reemplazar el formato predeterminado con json, la configuración de "redisTemplate" en muchos artículos en Internet no importa;

gota.png

Descarga del código fuente

https://gitee.com/88911006/chendd-examples

Supongo que te gusta

Origin blog.csdn.net/haiyangyiba/article/details/90552285
Recomendado
Clasificación