一、SpringBoot整合Ehhcache
添加maven依赖
1 <dependency>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-starter-cache</artifactId>
4 </dependency>
5 <dependency>
6 <groupId>net.sf.ehcache</groupId>
7 <artifactId>ehcache</artifactId>
8 </dependency>
创建Ehcache配置文件src/main/resources/ehcache.xml
1 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
2 <diskStore path="java.io.tmpdir"/>
3 <!--defaultCache:echcache 的默认缓存策略-->
4 <defaultCache 5 maxElementsInMemory="10000"
6 eternal="false"
7 timeToIdleSeconds="120"
8 timeToLiveSeconds="120"
9 maxElementsOnDisk="10000000"
10 diskExpiryThreadIntervalSeconds="120"
11 memoryStoreEvictionPolicy="LRU">
12 <persistence strategy="localTempSwap"/>
13 </defaultCache>
14 <!-- 自定义缓存策略-->
15 <cache name="user"
16 maxElementsInMemory="10000"
17 eternal="false"
18 timeToIdleSeconds="120"
19 timeToLiveSeconds="120"
20 maxElementsOnDisk="10000000"
21 diskExpiryThreadIntervalSeconds="120"
22 memoryStoreEvictionPolicy="LRU">
23 <persistence strategy="localTempSwap"/>
24 </cache>
25 </ehcache>
在application.properties中添加
spring.cache.ehcache.config=ehcache.xml
在启动类上加注解
@EnableCaching
在业务层可以使用注解缓存数据
1 @Override 2 @Cacheable(value="user") 3 public User findUserById(Integer id) { 4 return this.userMapper.findUserById(id); 5 }
@Cacheable的作用就是把方法的返回值添加到ehcache缓存中,value属性为ehcache配置文件中的缓存策略,不设定使用默认。
要求实体类需要实现Serializable接口。
@CacheEvict为清除缓存
1 @Override 2 @CacheEvict(value="user", allEntries=true) 3 public void saveUser(User user) { 4 this.userMapper.save(user); 5 }
二、SpringBoot整合Redis
SpringDataRedis是属于SpringData下的一个模块,作用是简化redis的操作。添加mvaen依赖:
1 <dependency>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-starter-data-redis</artifactId>
4 </dependency>
编写SpringDataRedis配置类
1 @Configuration 2 public class RedisConfig { 3 @Bean 4 public JedisPoolConfig jedisPoolConfig() { 5 JedisPoolConfig config = new JedisPoolConfig(); 6 config.setMaxIdle(10); 7 config.setMinIdle(5); 8 config.setMaxTotal(20); 9 return config; 10 } 11 @Bean 12 public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig config) { 13 JedisConnectionFactory factory = new JedisConnectionFactory(); 14 factory.setPoolConfig(config); 15 factory.setHostName("127.0.0.1"); 16 factory.setPort(6379); 17 return factory; 18 } 19 @Bean 20 public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { 21 RedisTemplate<String, Object> template = new RedisTemplate<>(); 22 template.setConnectionFactory(factory); 23 template.setKeySerializer(new StringRedisSerializer()); 24 template.setValueSerializer(new StringRedisSerializer()); 25 return template; 26 } 27 }
也可以把参数独立出来
1 spring.redis.pool.max-idle=10
2 spring.redis.pool.min-idle=5
3 spring.redis.pool.max-total=20
4 spring.redis.hostname=127.0.0.1
5 spring.redis.port=6379
1 @Configuration 2 public class RedisConfig { 3 @Bean 4 @ConfigurationPropeties(prefix="spring.redis.pool") 5 public JedisPoolConfig jedisPoolConfig() { 6 JedisPoolConfig config = new JedisPoolConfig(); 7 //其他参数已经自动注入
8 return config; 9 } 10 @Bean 11 @ConfigurationProperties(prefix="spring.redis") 12 public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig config) { 13 JedisConnectionFactory factory = new JedisConnectionFactory(); 14 factory.setPoolConfig(config); 15 //其他参数已经自动注入
16 return factory; 17 } 18 @Bean 19 public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { 20 RedisTemplate<String, Object> template = new RedisTemplate<>(); 21 template.setConnectionFactory(factory); 22 template.setKeySerializer(new StringRedisSerializer()); 23 template.setValueSerializer(new StringRedisSerializer()); 24 return template; 25 } 26 }
使用springboot中的redis非常简单
1 this.redisTemplate.opsForValue().set("user", user); 2 (User)this.redisTemplate.opsForValue().get("user");