参考:

http://www.cnblogs.com/edwinchen/p/3816938.html

本项目创建的是Maven项目

一、pom.xml引入dependencies

        <dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.7.3.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>

二、配置applicationContext-redis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.pool.maxTotal}" />
<property name="maxIdle" value="${redis.pool.maxIdle}" />
<property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}" />
<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
<property name="testOnReturn" value="${redis.pool.testOnReturn}" />
<property name="testWhileIdle" value="${redis.pool.testWhileIdle}"/>
</bean> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:hostName="${redis.host}" p:port="${redis.port}" p:password="${redis.password}"
p:poolConfig-ref="poolConfig"/> <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="valueSerializer">
<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
</property>
</bean> </beans>

注意:配置poolConfig中property 的name 需要对应JedisPoolConfig这个类中实际的属性;

配置connectionFactory同样要注意这个,因为其他博文配置属性时有所不同,主要是因为redis版本不同引起的有所不同。

三、properties文件配置值

# poolConfig 配置信息
redis.pool.maxTotal=1024
redis.pool.maxIdle=200
redis.pool.maxWaitMillis=1000
redis.pool.testOnBorrow=true
redis.pool.testOnReturn=true
redis.pool.testWhileIdle=true # connectionFactory 配置信息
redis.host=localhost
redis.port=6379
redis.timeout=15000
redis.password=123456

另外,需要注意的是,要引入该文件可以在applicationContext-redis.xml加入

<!-- scanner redis properties 假如有封装用于加载properties,就不需要加这句了 -->
<context:property-placeholder location="classpath:property/redis.properties" />

四、使用RedisTemplate

其他项目需要RedisTemplate的时候,需要引入以上maven模块的dependency

测试类使用:

/**
* 测试 spring-data-redis 集成
* Created by zhile on 2017/5/12 0012.
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestRedis { @Autowired
private RedisTemplate redisTemplate; @Test
public void testTemple() {
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("spring-data-redis::test", "tom", 1000, TimeUnit.SECONDS); System.out.println("set successed");
/*
ValueOperations valueOpers = redisTemplate.opsForValue();
System.out.println("get:" + valueOpers.get("spring-data-redis::test"));*/
} @Test
public void testRedisTemple() {
ValueOperations valueOpers = redisTemplate.opsForValue();
System.out.println("get:" + valueOpers.get("spring-data-redis::test"));
}
}

这样,只要引入集成了RedisTemplate的maven模块,就可以直接使用。

五、问题小结:

1.引入的dependency需要注意兼容性,因为redis2.7.3 中的commons-pool2版本不完整,需要引入较新的commons-pool2。

Caused by: java.lang.NoSuchMethodError:
redis.clients.jedis.JedisPool.apache/commons/pool2/impl/GenericObjectPoolConfig等等

2.假如spring-data-redis的版本1.8.3,而redis的版本还是为2.7.3的话,会报这样的错:

所以,需要注意版本兼容的问题,这是因为spring-data-redis的版本太新点。

java.lang.IllegalStateException: Failed to load ApplicationContext 

Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'redisTemplate' defined in class path resource
[applicationContext-redis.xml]:... Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'connectionFactory' defined in class path resource
[applicationContext-redis.xml]:... Caused by: java.lang.NoClassDefFoundError:
Could not initialize class org.springframework.data.redis.connection.jedis.JedisConnectionFactory...

补充参考:

http://zhaozhiming.github.io/blog/2015/04/12/spring-data-redis/

http://www.baeldung.com/spring-data-redis-tutorial

Spring Data Redis实战之提供RedisTemplate的更多相关文章

  1. Spring Data Redis入门示例:基于RedisTemplate (三)

    使用底层API:RedisConnection操作Redis,需要对数据进行手动转换(String <---->byte),需要进行多数重复性工作,效率低下:org.springframe ...

  2. Spring Data Redis 详解及实战一文搞定

    SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能.它提供了与商店互动的低级别和高级别抽象,使用户免受 ...

  3. spring mvc Spring Data Redis RedisTemplate [转]

    http://maven.springframework.org/release/org/springframework/data/spring-data-redis/(spring-data包下载) ...

  4. Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解

    一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis, ...

  5. spring data redis RedisTemplate操作redis相关用法

    http://blog.mkfree.com/posts/515835d1975a30cc561dc35d spring-data-redis API:http://docs.spring.io/sp ...

  6. Spring Data Redis配置项有多少(不列举具体,只提供找的方法)

    首先,要说明Spring Data Redis集成了很多款客户端,比如Jedis这些. 而如果在注入Bean时,我们一般是可以设置一些项的,比如hostName和port等,对于这些项一般的查找方式通 ...

  7. Spring Data Redis—Pub/Sub(附Web项目源码)

    一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...

  8. Spring Data Redis—Pub/Sub(附Web项目源码) (转)

    一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...

  9. spring data redis 理解

    前言 Spring Data Redis project,应用了Spring概念来开发使用键值形式的数据存储的解决方案.我们(官方)提供了一个 "template" ,这是一个高级 ...

随机推荐

  1. windows下数字以2进制打印

    #include <cstdlib> _itoa(num, buf, 2); 打印buf既是二进制

  2. php 输出缓冲

    <?php ob_start();//开启php输出缓冲区 echo "A"; //"A"会进入php输出缓冲区 ob_flush();//将php输出缓 ...

  3. Android9.0特性

    这篇文章,是Android官方文档的中文版本. 注意事项(AndroidP 特性): (1),android.os.Build.VERSION.RELEASE ,需要当做字符串类型处理. (2),依赖 ...

  4. python 全栈开发,Day9(函数的初始,返回值,传参,三元运算)

    一.函数的初始 比如python没有len()方法,如果求字符串的长度 使用for循环 s = 'asdfadsf' count = 0 for i in s: count += 1 print(co ...

  5. php strtr()函数 语法

    php strtr()函数 语法 作用:转换字符串中的某些字符直线电机生产厂家 语法:strtr(string,from,to)或者strtr(string,array) 参数: 参数 描述 stri ...

  6. stack2链栈

    #include<iostream> using namespace std; template <class Object> class Stack{ private: st ...

  7. 【2019 Multi-University Training Contest 6】

    01: 02:https://www.cnblogs.com/myx12345/p/11650764.html 03: 04: 05:https://www.cnblogs.com/myx12345/ ...

  8. Spring Boot 的单元测试

    Spring Boot 的单元测试 引入依赖 testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-tes ...

  9. change可以重命名列名,也可能修改列的类型和约束,而modify只能修改列的数据类型。

    change 可以重命名列名,也可能修改列的数据类型,而modify只能修改列的数据类型. change 比modify功能多,如果要用change修改字段类型和约束,要加上新字段名,新字段名可以和原 ...

  10. CDN:BootCDN 项目列表-摘录-20180405

    ylbtech-CDN:BootCDN 项目列表-20180405 1.返回顶部 1.   2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. http://www.boo ...