springboot缓存的使用
2024-10-11 00:49:30
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;
}
注:要缓存的类必须序列化。
最新文章
- Mongodb学习笔记五(C#操作mongodb)
- 利用Excel表格中的宏,轻松提取首字母
- 一个C#语法高亮插件
- Open Cascade Data Exchange STL
- [JFinal 2] JFinal 开发框架
- SAE flask及其扩展 bug指南
- app ionic1 微信 微博 分享功能的实现
- Unity3d Mecanim动画系统Animator学习笔记
- css子元素添加绝对定位,不添加top、left会有影响吗???
- 纯js自动批量引入js、css插件,支持自定义参数
- 内联元素于与块元素的转换 相对定位、绝对定位以及fixed定位 Z轴覆盖
- laravel orwhere的使用
- 【洛谷P1273】有线电视网
- python中enumerate内置库的使用
- linux下重要的网络配置文件
- List(JDK1.7)(3)
- Firefox 之 应用小结
- iptables数据包、连接标记模块MARK/CONNMARK的使用(打标签)
- poj 2388 insert sorting
- AJAX基础知识点——思维导图
热门文章
- 安装VMware,出现Microsoft Runtime DLL 安装程序未能完成安装,解决方法
- continue break return
- javaweb九大个内置对象,四大域
- [LeetCode]25. Reverse Nodes in k-Group k个一组翻转链表
- GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
- canvas的getImageData和putImageDataAPI
- WinBatch基础命令
- wxGridCellEditor
- 用AutoHotkey一键完成Xmind里的几个功能
- 用AutoHotkey调整Windows音量