Spring Boot使用redis做数据缓存

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. import java.lang.reflect.Method;
  3. import org.springframework.cache.CacheManager;
  4. import org.springframework.cache.annotation.CachingConfigurerSupport;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.cache.interceptor.KeyGenerator;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.data.redis.cache.RedisCacheManager;
    import org.springframework.data.redis.connection.RedisConnectionFactory;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.data.redis.core.StringRedisTemplate;
    import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  5. import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
  6. import com.fasterxml.jackson.annotation.PropertyAccessor;
  7. import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;

  8. @Configuration  
  9. @EnableCaching  
  10. public class RedisConfig extends CachingConfigurerSupport{  
  11.   
  12.     @Bean  
  13.     public KeyGenerator wiselyKeyGenerator(){  
  14.         return new KeyGenerator() {  
  15.             @Override  
  16.             public Object generate(Object target, Method method, Object… params) {  
  17.                 StringBuilder sb = new StringBuilder();  
  18.                 sb.append(target.getClass().getName());  
  19.                 sb.append(method.getName());  
  20.                 for (Object obj : params) {  
  21.                     sb.append(obj.toString());  
  22.                 }  
  23.                 return sb.toString();  
  24.             }  
  25.         };  
  26.   
  27.     }  
  28.   
  29.     @Bean  
  30.     public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {  
  31.         return new RedisCacheManager(redisTemplate);  
  32.     }  
  33.   
  34.     @Bean  
  35.     public RedisTemplate<String, String> redisTemplate(  
  36.             RedisConnectionFactory factory) {  
  37.         StringRedisTemplate template = new StringRedisTemplate(factory);  
  38.         Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);  
  39.         ObjectMapper om = new ObjectMapper();  
  40.         om.setVisibility(PropertyAccessor.ALL, Visibility.ANY);  
  41.         om.enableDefaultTyping(DefaultTyping.NON_FINAL);  
  42.         jackson2JsonRedisSerializer.setObjectMapper(om);  
  43.         template.setValueSerializer(jackson2JsonRedisSerializer);  
  44.         template.afterPropertiesSet();  

  45.         return template;  
  46.     }  
  47. }  

 

 

3 redis服务器配置

Properties代码   收藏代码
  1. # REDIS (RedisProperties)  
  2. spring.redis.database=0 # 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=10 # pool settings …  
  7. spring.redis.pool.min-idle=0  
  8. spring.redis.pool.max-active=10  
  9. spring.redis.pool.max-wait=-1 

 

4 应用

测试两个实体类

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

 

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

 

 使用演示

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. @Service  
  9. public class DemoService {  
  10.     @Cacheable(value = “usercache”, key = “#id + ‘_’ + #firstName + ‘_’ + #lastName”) 
  11.     public User findUser(Long id,String firstName,String lastName){  
  12.         System.out.println(”无缓存的时候调用这里。”);  
  13.         return new User(id,firstName,lastName);  
  14.     }  

  15.     @Cacheable(value = “addresscache”, key = “#id + ‘_’ + #province + ‘_’ + #city”)
  16.     public Address findAddress(Long id,String province,String city){  
  17.         System.out.println(”无缓存的时候调用这里。”);  
  18.         return new Address(id,province,city);  
  19.     }  
  20. }  

 

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. @RestController
  12. public class DemoEndpoint{  
  13.   
  14.     @Autowired  
  15.     DemoService demoService;  
  16.   
  17.     @RequestMapping(value = “/test”, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)   
  18.     public String putCache(){  
  19.         demoService.findUser(1L, “zhang”, “san”);
  20.         demoService.findAddress(2L, “jx”, “gz”);
  21.         System.out.println(“if it not print ‘无缓存的时候调用。’ ,it means the test is success.”);
  22.         return “OK”;
  23.     }  
  24.     @RequestMapping(value = “/test2”, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)  
  25.     public String testCache(){  
  26.         User user = demoService.findUser(1L, “zhang”, “san”);  
  27.         Address address =demoService.findAddress(2L, “jx”, “gz”);  
  28.         System.out.println(”it not excute query”);  
  29.         System.out.println(”user:”+“/”+user.getFirstName()+“/”+user.getLastName());  
  30.         System.out.println(”address:”+“/”+address.getProvince()+“/”+address.getCity());  
  31.         return “OK”;  
  32.     }  
  33. }  

 

5 检验

 

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



 

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

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值