`
fanfeiyang
  • 浏览: 4066 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring Boot使用redis做数据缓存

阅读更多

转自:http://wiselyman.iteye.com/blog/2184884

1 添加redis支持

在pom.xml中添加

Xml代码  收藏代码
  1. <dependency>  
  2.           <groupId>org.springframework.boot</groupId>  
  3.           <artifactId>spring-boot-starter-redis</artifactId>  
  4.       </dependency>  

 

2 redis配置

Java代码  收藏代码
  1. package com.wisely.ij.config;  
  2.   
  3. import com.fasterxml.jackson.annotation.JsonAutoDetect;  
  4. import com.fasterxml.jackson.annotation.PropertyAccessor;  
  5. import com.fasterxml.jackson.databind.ObjectMapper;  
  6. import org.springframework.cache.CacheManager;  
  7. import org.springframework.cache.annotation.CachingConfigurerSupport;  
  8. import org.springframework.cache.annotation.EnableCaching;  
  9. import org.springframework.cache.interceptor.KeyGenerator;  
  10. import org.springframework.context.annotation.Bean;  
  11. import org.springframework.context.annotation.Configuration;  
  12. import org.springframework.data.redis.cache.RedisCacheManager;  
  13. import org.springframework.data.redis.connection.RedisConnectionFactory;  
  14. import org.springframework.data.redis.core.RedisTemplate;  
  15. import org.springframework.data.redis.core.StringRedisTemplate;  
  16. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;  
  17.   
  18. import java.lang.reflect.Method;  
  19.   
  20.   
  21. @Configuration  
  22. @EnableCaching  
  23. public class RedisConfig extends CachingConfigurerSupport{  
  24.   
  25.     @Bean  
  26.     public KeyGenerator wiselyKeyGenerator(){  
  27.         return new KeyGenerator() {  
  28.             @Override  
  29.             public Object generate(Object target, Method method, Object... params) {  
  30.                 StringBuilder sb = new StringBuilder();  
  31.                 sb.append(target.getClass().getName());  
  32.                 sb.append(method.getName());  
  33.                 for (Object obj : params) {  
  34.                     sb.append(obj.toString());  
  35.                 }  
  36.                 return sb.toString();  
  37.             }  
  38.         };  
  39.   
  40.     }  
  41.   
  42.     @Bean  
  43.     public CacheManager cacheManager(  
  44.             @SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {  
  45.         return new RedisCacheManager(redisTemplate);  
  46.     }  
  47.   
  48.     @Bean  
  49.     public RedisTemplate<String, String> redisTemplate(  
  50.             RedisConnectionFactory factory) {  
  51.         StringRedisTemplate template = new StringRedisTemplate(factory);  
  52.         Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);  
  53.         ObjectMapper om = new ObjectMapper();  
  54.         om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);  
  55.         om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);  
  56.         jackson2JsonRedisSerializer.setObjectMapper(om);  
  57.         template.setValueSerializer(jackson2JsonRedisSerializer);  
  58.         template.afterPropertiesSet();  
  59.         return template;  
  60.     }  
  61. }  

 

 

3 redis服务器配置

Properties代码  收藏代码
  1. # REDIS (RedisProperties)  
  2. spring.redis.database= # database name  
  3. spring.redis.host=localhost # server host  
  4. spring.redis.password= # server password  
  5. spring.redis.port=6379 # connection port  
  6. spring.redis.pool.max-idle=8 # pool settings ...  
  7. spring.redis.pool.min-idle=0  
  8. spring.redis.pool.max-active=8  
  9. spring.redis.pool.max-wait=-1  
  10. spring.redis.sentinel.master= # name of Redis server  
  11. spring.redis.sentinel.nodes= # comma-separated list of host:port pairs  

 

4 应用

测试两个实体类

Java代码  收藏代码
  1. package com.wisely.ij.domain;  
  2.   
  3.   
  4. public class Address {  
  5.     private Long id;  
  6.     private String province;  
  7.     private String city;  
  8.   
  9.     public Address(Long id,String province, String city) {  
  10.         this.id = id;  
  11.         this.province = province;  
  12.         this.city = city;  
  13.     }  
  14.   
  15.     public Address() {  
  16.     }  
  17.   
  18.     public Long getId() {  
  19.         return id;  
  20.     }  
  21.   
  22.     public void setId(Long id) {  
  23.         this.id = id;  
  24.     }  
  25.   
  26.     public String getProvince() {  
  27.         return province;  
  28.     }  
  29.   
  30.     public void setProvince(String province) {  
  31.         this.province = province;  
  32.     }  
  33.   
  34.     public String getCity() {  
  35.         return city;  
  36.     }  
  37.   
  38.     public void setCity(String city) {  
  39.         this.city = city;  
  40.     }  
  41. }  

 

Java代码  收藏代码
  1. package com.wisely.ij.domain;  
  2.   
  3.   
  4. public class User {  
  5.     private Long id;  
  6.     private String firstName;  
  7.     private String lastName;  
  8.   
  9.     public User(Long id,String firstName, String lastName) {  
  10.         this.id = id ;  
  11.         this.firstName = firstName;  
  12.         this.lastName = lastName;  
  13.     }  
  14.   
  15.     public User() {  
  16.     }  
  17.   
  18.     public Long getId() {  
  19.         return id;  
  20.     }  
  21.   
  22.     public void setId(Long id) {  
  23.         this.id = id;  
  24.     }  
  25.   
  26.     public String getFirstName() {  
  27.         return firstName;  
  28.     }  
  29.   
  30.     public void setFirstName(String firstName) {  
  31.         this.firstName = firstName;  
  32.     }  
  33.   
  34.     public String getLastName() {  
  35.         return lastName;  
  36.     }  
  37.   
  38.     public void setLastName(String lastName) {  
  39.         this.lastName = lastName;  
  40.     }  
  41. }  

 

 使用演示

Java代码  收藏代码
  1. package com.wisely.ij.service;  
  2.   
  3. import com.wisely.ij.domain.Address;  
  4. import com.wisely.ij.domain.User;  
  5. import org.springframework.cache.annotation.Cacheable;  
  6. import org.springframework.stereotype.Service;  
  7.   
  8. /** 
  9.  * Created by wisely on 2015/5/25. 
  10.  */  
  11. @Service  
  12. public class DemoService {  
  13.     @Cacheable(value = "usercache",keyGenerator = "wiselyKeyGenerator")  
  14.     public User findUser(Long id,String firstName,String lastName){  
  15.         System.out.println("无缓存的时候调用这里");  
  16.         return new User(id,firstName,lastName);  
  17.     }  
  18.     @Cacheable(value = "addresscache",keyGenerator = "wiselyKeyGenerator")  
  19.     public Address findAddress(Long id,String province,String city){  
  20.         System.out.println("无缓存的时候调用这里");  
  21.         return new Address(id,province,city);  
  22.     }  
  23. }  

 

Java代码  收藏代码
  1. package com.wisely.ij.web;  
  2.   
  3. import com.wisely.ij.domain.Address;  
  4. import com.wisely.ij.domain.User;  
  5. import com.wisely.ij.service.DemoService;  
  6. import org.springframework.beans.factory.annotation.Autowired;  
  7. import org.springframework.stereotype.Controller;  
  8. import org.springframework.web.bind.annotation.RequestMapping;  
  9. import org.springframework.web.bind.annotation.ResponseBody;  
  10.   
  11. /** 
  12.  * Created by wisely on 2015/5/25. 
  13.  */  
  14.   
  15. @Controller  
  16. public class DemoController {  
  17.   
  18.     @Autowired  
  19.     DemoService demoService;  
  20.   
  21.     @RequestMapping("/test")  
  22.     @ResponseBody  
  23.     public String putCache(){  
  24.         demoService.findUser(1l,"wang","yunfei");  
  25.         demoService.findAddress(1l,"anhui","hefei");  
  26.         System.out.println("若下面没出现“无缓存的时候调用”字样且能打印出数据表示测试成功");  
  27.         return "ok";  
  28.     }  
  29.     @RequestMapping("/test2")  
  30.     @ResponseBody  
  31.     public String testCache(){  
  32.         User user = demoService.findUser(1l,"wang","yunfei");  
  33.         Address address =demoService.findAddress(1l,"anhui","hefei");  
  34.         System.out.println("我这里没执行查询");  
  35.         System.out.println("user:"+"/"+user.getFirstName()+"/"+user.getLastName());  
  36.         System.out.println("address:"+"/"+address.getProvince()+"/"+address.getCity());  
  37.         return "ok";  
  38.     }  
  39. }  

 

5 检验

 

先访问http://localhost:8080/test 保存缓存



 

再访问http://localhost:8080/test2 调用缓存里的数据

 


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics