3.2、接3.1自定义缓存策略以及删除缓存Cacheable 参数1

preview
需积分: 0 0 下载量 191 浏览量 更新于2022-08-08 收藏 44KB DOCX 举报
在Spring框架中,缓存管理是一个重要的特性,它允许我们高效地存储和检索数据,减少对数据库的访问,提高应用程序的性能。`@Cacheable`、`@CacheEvict`和`@CachePut`是Spring Cache注解的核心,用于实现缓存的存取和更新操作。下面将详细解释这些注解的使用及其参数。 1. **@Cacheable** - `value`: 必填参数,用于指定缓存的名称,对应于配置文件中定义的缓存区域,例如在EHCache中对应于`ehcache.xml`中的`<cache>`标签的`name`属性。 - `key`: 缓存键的生成规则,若为空则默认使用方法参数作为key。支持SpEL表达式,例如`#id`表示方法参数id,`#user.id`或`#user.getId()`表示对象的属性。 - `condition`: 触发缓存的条件,只有当该表达式为真时,方法的结果才会被缓存。同样支持SpEL,例如`#userId.length < 32`表示当userId长度小于32时缓存结果。 例子: ```java @Cacheable(value="HealerJeanCache", key="#userId + 'findById'") public SystemUser findById(String userId) { SystemUser user = (SystemUser) dao.findById(SystemUser.class, userId); return user ; } ``` 2. **@CacheEvict** - `value`: 与`@Cacheable`相同,指定缓存的名称。 - `key`: 清除特定缓存项的键,可以使用SpEL表达式。 - `condition`: 清除缓存的条件,只有满足条件时才会执行清除操作。 - `allEntries`: 如果为`true`,表示清除整个缓存区域的所有条目,而不是单个key。 例子: ```java @CacheEvict(value="andCache", key="#user.userId + 'findById'") public void modifyUserRole(SystemUser user) { System.out.println("hello andCache delete"+user.getUserId()); } ``` 3. **@CachePut** 这个注解与`@Cacheable`类似,但不同之处在于它总是执行方法并把结果存入缓存,相当于数据库的`UPDATE`操作,即使缓存中已有相同key的值。 实战应用中,我们通常会结合使用这些注解来实现缓存策略。例如,在`PersonServiceImpl`中,我们可以为`findById`方法添加`@Cacheable`注解,然后在更新或删除操作后,使用`@CacheEvict`清除对应的缓存项,确保数据的一致性。 ```java @Service public class PersonServiceImpl implements PersonService { @Resource private PersonRepository personRepository; @Cacheable(value="HealerJeanCache", key="#id + 'findById'") @Override public Person findById(long id) { System.err.println("PersonServiceImpl.findById()=========从数据库中进行获取的....id="+id); return personRepository.findOne(id); } // 其他方法,包括添加、更新和删除操作,配合@CacheEvict使用 } ``` 通过这样的方式,我们可以构建一套完整的缓存策略,使得应用程序能够在不牺牲数据一致性的情况下,显著提升数据访问的效率。在实际开发中,还需要根据具体业务需求调整和优化缓存策略,比如设置缓存过期时间、使用缓存穿透和缓存击穿的解决方案等。
Orca是只鲸
  • 粉丝: 36
  • 资源: 317
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜