Spring项目集成Redis,序列化方式改为Jackson2JsonRedisSerializer

时间:2025-03-10 21:48:06

SpringMVC项目通过Maven进行集成Redis过程中,使用配置文件进行设置时遇到的坑。

1.添加Redis依赖

     通常,在集成Redis时,通过Maven是比较简单进行整合的,只需要导入相应的redis依赖即可,如下图,现导入Redis所需的依赖(注:因本文所介绍的是改redis序列化方式由GenericJackson2RedisSerializer改为Jackson2JsonRedisSerializer)

,在文件中添加如下内容:

/**版本信息*/
</properties>        
   <>1.8.</>
   <>2.9.0</>
   <>2.9.7</>
   <>0.8.16</>
</properties>
<dependencies>
        <!--redis依赖-->
        <dependency>
            <groupId></groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>${}</version>
        </dependency>
        <dependency>
            <groupId></groupId>
            <artifactId>jedis</artifactId>
            <version>${}</version>
        </dependency>
        <dependency>
            <groupId></groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${}</version>
        </dependency>
        <dependency>
            <groupId></groupId>
            <artifactId>jackson-dataformat-msgpack</artifactId>
            <version>${}</version>
        </dependency>
<dependencies>

在网上介绍较多的是GenericJackson2RedisSerializer序列化文件配置方案,但如何改用Jackson2JsonRedisSerializer的方式介绍较少,本人在项目中正好使用到Jackson序列化方式,搜寻由xml文件配置方案未果,才自己尝试摸索,使用注解方式修改成功。

介绍修改方式之前,我们还是通篇按部就班,来个完整的配置过程。

2.添加Redis数据库连接文件

#ip地址
=127.0.0.1
#端口号
=6379
#如果有密码
=
#客户端超时时间单位是毫秒 默认是2000
=10000
#redis 支持16个数据库(相当于不同用户)可以使不同的应用程序数据彼此分开同时又存储在相同的实例上
=0
#最大空闲数
=300
#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用
#=600
#控制一个pool可分配多少个jedis实例,用来替换上面的,如果是jedis 2.4以后用该属性
=1000
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
=1000
#连接的最小空闲时间 默认1800000毫秒(30分钟)
=300000
#每次释放连接的最大数目,默认3
=1024
#逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
=30000
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
=true
#在空闲时检查有效性, 默认false
=true

配置文件增加配置文件,使得在项目启动时正常加载。

     以下配置文件,设置了Redis入库时,序列化方式为GenericJackson2RedisSerializer,但我实际需要用到的序列化方式为Jackson2RedisSerializer,大家可查询下官方文档的描述,在使用Jackson2RedisSerializer作为序列化方式时需要指定具体的(.class),这在xml配置文件中不太容易操作,如是想到使用注解解决。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
       xmlns:xsi="http:///2001/XMLSchema-instance"
       xmlns:context="/schema/context"
       xsi:schemaLocation="/schema/beans /schema/beans/ /schema/context /schema/context/">

    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:" ignore-unresolvable="true"/>
    <!-- redis连接池配置-->
    <bean  class="">
        <!--最大空闲数-->
        <property name="maxIdle" value="${}"/>
        <!--连接池的最大数据库连接数  -->
        <property name="maxTotal" value="${}"/>
        <!--最大建立连接等待时间-->
        <property name="maxWaitMillis" value="${}"/>
        <!--逐出连接的最小空闲时间 默认1800000毫秒(30分钟)-->
        <property name="minEvictableIdleTimeMillis" value="${}"/>
        <!--每次逐出检查时 逐出的最大数目 如果为负数就是 : 1/abs(n), 默认3-->
        <property name="numTestsPerEvictionRun" value="${}"/>
        <!--逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1-->
        <property name="timeBetweenEvictionRunsMillis" value="${}"/>
        <!--是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个-->
        <property name="testOnBorrow" value="${}"/>
        <!--在空闲时检查有效性, 默认false  -->
        <property name="testWhileIdle" value="${}"/>
    </bean>


    <!-- redis集群配置 哨兵模式 -->
    <!-- <bean  class="">
        <property name="master">
            <bean class="">
                这个值要和Sentinel中指定的master的值一致,不然启动时找不到Sentinel会报错的
                <property name="name" value="mymaster"></property>
            </bean>
        </property>
        记住了,这里是指定Sentinel的IP和端口,不是Master和Slave的
        <property name="sentinels">
            <set>
                <bean class="">
                    <constructor-arg name="host" value="${.host1}"></constructor-arg>
                    <constructor-arg name="port" value="${.port1}"></constructor-arg>
                </bean>
                <bean class="">
                    <constructor-arg name="host" value="${.host2}"></constructor-arg>
                    <constructor-arg name="port" value="${.port2}"></constructor-arg>
                </bean>