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     }

 

注:要緩存的類必須序列化。

相關文章
相關標籤/搜索