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

1.添加依赖

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>

2.在需要使用缓存的方法上加上注解,如下:

 @Override
//@CachePut 该注解会将方法的返回值缓存起来,其中缓存名字是 people,数据的key是person的id
@CachePut(value = "people", key = "#person.id")
public Person save(Person person) {
Person p = personRepository.save(person);
System.out.println("为id、key为:"+p.getId()+"数据做了缓存");
return p;
}
 @Override
//@CacheEvict 该注解会删除people缓存中key为id 的数据
@CacheEvict(value = "people", key = "#id")
public void remove(Long id) {
System.out.println("删除了id、key为"+id+"的数据缓存");
//这里不做实际删除操作
}
 @Override
//@Cacheable 该注解会在方法执行时,判断缓存people中key为#person.id
//的缓存是否存在,如果存在,则直接返回缓存中的数据。如果不存在,则会查数据库,然后将返回结果缓存起来。
@Cacheable(value = "people", key = "#person.id")
public Person findOne(Person person) {
Person p = personRepository.findOne(person.getId());
System.out.println("为id、key为:"+p.getId()+"数据做了缓存");
return p;
}

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

1.添加依赖

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>

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

 redis.hostname=localhost
redis.port=6379

3.在spring容器中配置redis

 @Configuration
public class RedisConfig extends CachingConfigurerSupport{
private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class); @Autowired
private Environment env; @Bean
public JedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
redisConnectionFactory.setHostName(env.getProperty("redis.hostname"));
redisConnectionFactory.setPort(Integer.parseInt(env.getProperty("redis.port")));
return redisConnectionFactory;
} @Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(cf);
return redisTemplate;
} @Bean
public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setDefaultExpiration(600);
return cacheManager;
} }

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

js

 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);
}
});

controller

     @ApiOperation(value = "获取人",notes = "获取人")
@GetMapping("/getPerson")
public Map<String, List<Object>> findPersons(){
Map<String, List<Object>> map = new HashMap<String, List<Object>>();
List<Person> pList=PersonService.findAll(); List<Object> personList=new ArrayList<>(pList); /* for (Person p:pList){
personList.add(p);
} 不可用*/
map.put("personList",personList); return map;
}

serviceImpl

 @Cacheable(value="person_list",keyGenerator = "wiselyKeyGenerator") //开启缓存
@Override
public List<Person> findAllPerson(){ List<Person> list=personRepository.findAll(); return list;
}

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

最新文章

  1. Mongodb学习笔记五(C#操作mongodb)
  2. 利用Excel表格中的宏,轻松提取首字母
  3. 一个C#语法高亮插件
  4. Open Cascade Data Exchange STL
  5. [JFinal 2] JFinal 开发框架
  6. SAE flask及其扩展 bug指南
  7. app ionic1 微信 微博 分享功能的实现
  8. Unity3d Mecanim动画系统Animator学习笔记
  9. css子元素添加绝对定位,不添加top、left会有影响吗???
  10. 纯js自动批量引入js、css插件,支持自定义参数
  11. 内联元素于与块元素的转换 相对定位、绝对定位以及fixed定位 Z轴覆盖
  12. laravel orwhere的使用
  13. 【洛谷P1273】有线电视网
  14. python中enumerate内置库的使用
  15. linux下重要的网络配置文件
  16. List(JDK1.7)(3)
  17. Firefox 之 应用小结
  18. iptables数据包、连接标记模块MARK/CONNMARK的使用(打标签)
  19. poj 2388 insert sorting
  20. AJAX基础知识点——思维导图

热门文章

  1. 安装VMware,出现Microsoft Runtime DLL 安装程序未能完成安装,解决方法
  2. continue break return
  3. javaweb九大个内置对象,四大域
  4. [LeetCode]25. Reverse Nodes in k-Group k个一组翻转链表
  5. GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
  6. canvas的getImageData和putImageDataAPI
  7. WinBatch基础命令
  8. wxGridCellEditor
  9. 用AutoHotkey一键完成Xmind里的几个功能
  10. 用AutoHotkey调整Windows音量