现在想想只想骂娘..... 忍住忍....
打开Spring官网找到Spring Data Redis ,官方给出的有pom.xml示例,Spring-Data-Redis版本为2.x,复制粘贴,然后配置、注入,结果一直报错,后来发现是SpringFramework版本有冲突,统一版本为4.3.14,然后还报错,最后在官方的文档发现,Spring版本太低,不支持。

3.Requirements

Spring Data Redis 1.x binaries requires JDK level 6.0 and above, and Spring Framework 5.0.4.RELEASE and above. In terms of key value stores, Redis 2.6.x or higher is required.Spring Data Redis is currently tested against the latest 3.2 release.

找到了1.8版本的Spring-Data-Redis最低才支持 Spring Framework 4.3.14 这才OK

1. 加载依赖库

请注意你的Spring版本为多少,若Spring版本为 5.X ,请使用下面的依赖

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>2.0.5.RELEASE</version>
    </dependency>

请注意你的Spring版本为多少,若Spring版本为 4.X ,请使用下面的依赖

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>1.8.10.RELEASE</version>
    </dependency>

2. 配置bean

新建配置文件 redis.properties

# Redis settings
redis.host=192.168.0.221
redis.port=6379
redis.pass=
redis.maxIdle=400
redis.maxTotal=6000
redis.maxWaitMillis=1000
redis.blockWhenExhausted=true
redis.testOnBorrow=true
redis.timeout=100000

我这里使用xml文件配置注入的bean,未使用注解注入

<!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:redis.properties"/>
    <!-- redis数据源 -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!-- 最大空闲数 -->
        <property name="maxIdle" value="${redis.maxIdle}"/>
        <!-- 最大空连接数 -->
        <property name="maxTotal" value="${redis.maxTotal}"/>
        <!-- 最大等待时间 -->
        <property name="maxWaitMillis" value="${redis.maxWaitMillis}"/>
        <!-- 连接超时时是否阻塞,false时报异常,ture阻塞直到超时, 默认true -->
        <property name="blockWhenExhausted" value="${redis.blockWhenExhausted}"/>
        <!-- 返回连接时,检测连接是否成功 -->
        <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
    </bean>

    <!-- Spring-redis连接池管理工厂 -->
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
          p:hostName="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}" p:timeout="${redis.timeout}"
          p:poolConfig-ref="poolConfig" p:usePool="true">
    </bean>

    <!-- redis template definition -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory"/>
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
        </property>
        <!--开启事务  -->
        <property name="enableTransactionSupport" value="true"></property>
    </bean>

3. 使用Redis

由于在项目中把对数据的操作全部都写在了dao层中,中间的调用非常麻烦,就直接借用spring给出的示例

public class Example {

    // 自动注入 redisTemplate
    @Autowired
    private RedisTemplate<String, String> template;

    // 注入名称为redisTemplate的bean
    @Resource(name="redisTemplate")
    private ListOperations<String, String> listOps;

    public void addLink(String userId, URL url) {
        //自定义写入类型
        listOps.leftPush(userId, url.toExternalForm());
        // redisTemplate自带的写入
        redisTemplate.boundListOps(userId).leftPush(url.toExternalForm());
    }
}

最后修改:2019 年 03 月 18 日
如果觉得我的文章对你有用,请随意赞赏