springboot缓存的使用

spring针对各类缓存实现,抽象出了CacheManager接口,用户使用该接口处理缓存,而无需关心底层实现。而且也能够方便的更改缓存的具体实现,而不用修改业务代码。下面对于在springboot中使用缓存作一简单介绍:html

1.添加依赖ajax

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-cache</artifactId>
4 </dependency>

 

2.在须要使用缓存的方法上加上注解,以下:
redis

1 @Override 2     //@CachePut 该注解会将方法的返回值缓存起来,其中缓存名字是 people,数据的key是person的id
3     @CachePut(value = "people", key = "#person.id") 4     public Person save(Person person) { 5         Person p = personRepository.save(person); 6         System.out.println("为id、key为:"+p.getId()+"数据作了缓存"); 7         return p; 8     }

 

1 @Override 2     //@CacheEvict 该注解会删除people缓存中key为id 的数据
3     @CacheEvict(value = "people", key = "#id") 4     public void remove(Long id) { 5         System.out.println("删除了id、key为"+id+"的数据缓存"); 6         //这里不作实际删除操做
7     }

 

1 @Override 2     //@Cacheable 该注解会在方法执行时,判断缓存people中key为#person.id 3    //的缓存是否存在,若是存在,则直接返回缓存中的数据。若是不存在,则会查数据库,而后将返回结果缓存起来。
4     @Cacheable(value = "people", key = "#person.id") 5     public Person findOne(Person person) { 6         Person p = personRepository.findOne(person.getId()); 7         System.out.println("为id、key为:"+p.getId()+"数据作了缓存"); 8         return p; 9     }

 

以上几部就完成了缓存,可是如今的缓存是默认的基于内存的,没有实现持久化。下面以redis做为缓存的具体实现,以下spring

 

1.添加依赖数据库

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-redis</artifactId>
4 </dependency>

 

2.在配置文件里添加redis配置json

1 redis.hostname=localhost 2 redis.port=6379

 

3.在spring容器中配置redis缓存

 1 @Configuration  2 public class RedisConfig extends CachingConfigurerSupport{  3     private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class);  4  
 5  @Autowired  6     private Environment env;  7  
 8  @Bean  9     public JedisConnectionFactory redisConnectionFactory() { 10         JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(); 11         redisConnectionFactory.setHostName(env.getProperty("redis.hostname")); 12         redisConnectionFactory.setPort(Integer.parseInt(env.getProperty("redis.port"))); 13         return redisConnectionFactory; 14  } 15  
16  @Bean 17     public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) { 18         RedisTemplate<String, String> redisTemplate = new RedisTemplate<>(); 19  redisTemplate.setConnectionFactory(cf); 20         return redisTemplate; 21  } 22  
23  @Bean 24     public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) { 25         RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); 26         cacheManager.setDefaultExpiration(600); 27         return cacheManager; 28  } 29     
30 }

 

4.从缓存中取到的数据有时为JsonArray 须要转换成对象类型输出到页面时springboot

jsapp

var optionsPerson = ""; $.ajax({ url: "/personing/getPerson", //所须要的列表接口地址
                    type: "get", dataType: "json", success: function (data) { var Data = data; for (var key in Data) { if (key == 'personList') { var pList = Data[key]; for (var i = 0; i < pList.length; i++) { optionsPerson += "<option value=\'" + pList[i].Id + "'\>" + pList[i].name + "</option>"; } } } $("#person").html(optionsPerson); } });

 

controlleride

 1     @ApiOperation(value = "获取人",notes = "获取人")  2     @GetMapping("/getPerson")  3     public Map<String, List<Object>> findPersons(){  4         Map<String, List<Object>> map = new HashMap<String, List<Object>>();  5         List<Person> pList=PersonService.findAll();  6 
 7         List<Object> personList=new ArrayList<>(pList);  8        
 9         /* for (Person p:pList){ 10  personList.add(p); 11  } 不可用*/
12         map.put("personList",personList); 13 
14         return map; 15     }

serviceImpl

1 @Cacheable(value="person_list",keyGenerator = "wiselyKeyGenerator") //开启缓存
2  @Override 3     public List<Person> findAllPerson(){ 4 
5         List<Person> list=personRepository.findAll(); 6 
7         return list; 8     }

 

注:要缓存的类必须序列化。

相关文章
相关标签/搜索