Spring集成Redis缓存

本来以为类似的Redis教程和整合代码应该会很多,因此也没打算特别认真的做这个教程,但是看了一下网上类似的教程好像不是特别多,刚好也要在perfect-ssm项目中整合Redis,因此花了两天时间做了整合和测试,并整理在这篇文章中,希望给看到教程的朋友一些帮助。

pom.xml依赖安装 <!-- Start: redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.7.2.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <!-- End: redis --> Spring+Redis集成代码

有两种集成方式,一种是通过Spring配置文件,另外一种是通过继承CachingConfigurerSupport,两种方式虽然方式不同,但是目的和结果是一样的。

方式一:

RedisCacheConfig.java

@Component @EnableCaching @Configuration public class RedisCacheConfig extends CachingConfigurerSupport { @Bean public JedisConnectionFactory redisConnectionFactory() { JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(); //ip地址 redisConnectionFactory.setHostName("127.0.0.1"); //端口号 redisConnectionFactory.setPort(17779); //redis登录密码 redisConnectionFactory.setPassword("ILfr6LTKhpNJ0x5i"); //database 默认是16个,不设置的话默认为0 redisConnectionFactory.setDatabase(2); return redisConnectionFactory; } @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) { RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>(); redisTemplate.setConnectionFactory(cf); return redisTemplate; } @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); //默认过期时间 cacheManager.setDefaultExpiration(3000); return cacheManager; } }

完成后要将bean注入到Spring中,因此需要在spring-context.xml配置文件中添加如下配置:

<context:component-scan base-package="com.ssm.promotion.core.redis"/>

perfect-ssm项目中用到的是此方法,本文中后续的测试用例代码中也是根据这种方式来测试的,代码已经上传至github仓库,源码可以到我的github仓库中查看和下载。

方式二:

redis.properties

#ip地址 redis.host=127.0.0.1 #端口号 redis.port=17779 #密码 redis.password=ILfr6LTKhpNJ0x5i #最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。 redis.maxIdle=200 #连接池的最大数据库连接数。设为0表示无限制 redis.maxActive=300 #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 redis.maxWait=1500 redis.testOnBorrow=true

spring-redis.xml

<context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/> <!-- redis连接池 --> <bean> <property value="${redis.maxActive}"></property> <property value="${redis.maxIdle}"></property> <property value="${redis.maxWait}"></property> <property value="${redis.testOnBorrow}"></property> </bean> <!-- redis连接工厂 --> <bean> <property value="${redis.host}"></property> <property value="${redis.port}"></property> <!-- 即使没有设置密码,password可以不设置值,但这项设置一定要保留 --> <property value="${redis.password}"></property> <!-- 即使没有设置密码,password可以不设置值,但这项设置一定要保留 --> <property ref="jedisConfig"></property> </bean> <!-- redis操作模板 --> <bean> <property ref="connectionFactory"/> <property> <bean/> </property> <property> <bean/> </property> <!--开启事务--> <property value="true"/> </bean> </beans>

注意事项:

如果在安装redis时没有设置密码,配置文件中的password可以不设置值,但是这项设置一定要保留:

<property value=""></property>

如若不然的话,项目在启动时会报错,无法连接redis,没有特别去研究为什么会这样,但是需要注意。

RedisUtil

由于采用的是第一种方式,在测试的时候又写了一个Redis的工具类,RedisUtil:

/** * Created by 13 on 2017/12/4. */ @Component public class RedisUtil { private static final String CACHE_NAME = "perfect-ssm-cache:"; // 过期时间 private static final int EXPIRE_TIME = 3000; private RedisTemplate template; private RedisCache cache; public RedisUtil() { init(); } public void init() { template = SpringUtil.getBean("redisTemplate");//RedisCacheConfig中定义了 cache = new RedisCache(CACHE_NAME, CACHE_NAME.getBytes(), template, EXPIRE_TIME); } //添加 public void put(String key, Object obj) { cache.put(key, obj); } //获取 public Object get(String key, Class clazz) { return cache.get(key) == null ? null : cache.get(key, clazz); } //删除 public void del(String key) { cache.evict(key); } } 整合测试

测试用例代码:

首先是简单的String测试:

@Test public void redisPutTest() { //添加 redisUtil.put("name", "perfect-ssm"); }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyywjd.html