公司网站建设宣传公司,软件开发公司需要什么条件,wordpress文章添加标签居中,商城网站开发技术注解开发
注解提供了更声明式和方便的方式#xff0c;而编码方式允许更精细的控制和定制。
在Java中#xff0c;当Redis充当缓存时#xff0c;使用注解的方式更为常见和方便。Spring Framework提供了一种基于注解的缓存机制#xff0c;称为Spring Cache。通过在方法上添加…注解开发
注解提供了更声明式和方便的方式而编码方式允许更精细的控制和定制。
在Java中当Redis充当缓存时使用注解的方式更为常见和方便。Spring Framework提供了一种基于注解的缓存机制称为Spring Cache。通过在方法上添加注解开发人员可以指定缓存的行为例如缓存的名称、缓存的过期时间等。使用注解的方式开发人员可以在代码中更直观地定义缓存逻辑而无需手动编写缓存代码。
Spring Cache提供了多个注解最常用的是Cacheable、CachePut和CacheEvict 。 Cacheable 用于标记方法应该被缓存 CachePut 用于将方法的结果存储到缓存中 CacheEvict 用于从缓存中删除数据
1、添加依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId
/dependency
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency2、添加配置 application.properties
spring.redis.hostlocalhost
spring.redis.port6379
spring.cache.typeredis3、定义配置类
EnableCaching
SpringBootConfiguration
public class MyRedisConfig {Beanpublic RedisCacheManager redisCacheManager(RedisConnectionFactory factory) {GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer
new GenericJackson2JsonRedisSerializer();StringRedisSerializer stringRedisSerializer new
StringRedisSerializer();RedisCacheConfiguration config
RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(100)).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(st
ringRedisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(
genericJackson2JsonRedisSerializer));return RedisCacheManager.builder(factory).cacheDefaults(config).build();}
}4、在方法上添加对应的注解就可以达到缓存的目的
Service
public class UserServImpl implements IUserServ{Cacheable(value users,key #id) 设置所使用的key值为users::传入的参数id值public User load(Long id) {System.out.println(执行业务逻辑);User usernew User();user.setId(99L);user.setUsername(zhangsan);user.setPassword(123456);return user;}
}注解Cacheable
Cacheable注解主要针对方法配置能够根据方法的请求参数和运行结果进行缓存比如如果缓存中存在该值则使用缓存数据 如果不在缓存中则执行业务逻辑处理并将执行结果存入缓存 value/cacheNames指定缓存空间的名称比配属性。可二选一使用。 key指定缓存中数据的key默认使用方法参数值也可使用SpEL表达式 keyGenerator指定缓存数据的key的生成器与key属性二选一使用 cacheManager指定缓存的管理器 cacheResolver指定缓存的解析器与cacheManager属性二选一使用 condition指定在符合某种条件下进行数据缓存不符合条件则不执行存储 unless指定在符合某种条件下不进行数据缓存 sync指定是否使用异步缓存默认为false。
CacheAable(valuedep,key#department.id)//缓存所使用的key值由value和key共同组成值为dept::再加上参数department对象中的id参数值
public Department listDepartment(Department department){System.out.println(加载信息department);departmentDao.loadDepartment(department);return department;
}如果方法的返回值为空时不执行缓存则可以引入condition和unless设置缓存规则 Cacheable(value users,key #id,condition #result!null) 这里出现问题解决方案使用
Cacheable(value users,key #id,unless#result null) condition对入参进行判断符合条件的放入缓存不符合的不缓存condition能使用的只有#root和参数不能使用返回结果 unless是对出参进行判断符合条件的不缓存不符合的放入缓存而unless是可以使用#result的
注解EnableCaching
EnableCaching主要用于开启基于注解的缓存支持用在应用主类或者配置类上
EnableCaching
SpringBootConfiguration
public class MyRedisConfig{}注解CacheConfig
CacheConfig注解是加在类上用于抽取缓存的公共配置。
在类头上加了CacheConfig注解等同于每个方法上的缓存注解都加了cacheName或者value指定的组件并且这个组件来自CacheConfig也就是用于统筹管理类中所有使用Cacheable、CachePut…和CacheEvict 注解标注方法中的公共属性这些公共属性包括有cacheNames、keyGenerator 、cacheManager和cacheResolver
CacheConfig(cacheNames users) //等价于在每个缓存注解上添加了valueusers
Service
public class UserServImpl implements IUserServ{Cacheable(valuebbb,key #id,unless#result null)
//在类上有定义同时在方法上也有定义则局部优先public User load(Long id) {}
}注解CachePut
CachePut该注解用于设置缓存。表示在调用方法的同时又更新缓存它是默认先调用目标方法然后将目标方法的运行结果存入缓存不过需要注意的是如果要保持缓存同步更新这个注解使用的key需要和缓存的key保持一致。 和cacheable不同的是 Cacheable在运行在目标方法之前而它是目标方法之后因为它需要先拿到目标方法运行的结果 Cacheable不可以使用#result因为使用Cacheable标注的方法不一定会被调用可能获取不到result。 属性和cacheable基本一致就少了一个是否异步(sync)的属性
注解CacheEvict
CacheEvict 该注解用于清理缓存。先进行方法调用然后将缓存进行清除。例如
CacheEvict(value”users”,key”#user.getName()”)其中的 Key 是用来指定缓存的 key 的 allEntries属性 表示是否清除指定缓存中的所有键值对既是否清除所有缓存设置为true时会清除缓存中的所有键值对默认为false即根据key清除缓存。所以它与key属性二选一使用 beforeInvocation属性 表示是否是在CacheEvict注解的方法调用之前清除指定缓存默认为false即在方法调用之后清除缓存设置为true时则会在方法调用之前清除缓存。在方法调用之前还是之后清除缓存的区别在于方法调用时是否会出现异常若不出现异常这两种设置没有区别若出现异常设置为在方法调用之后清除缓存将不起作用因为方法调用失败了。
注解Caching
Caching该注解可以对缓存清理、设置 操作打包。用于针对复杂规则的数据缓存管理可以作用于类或方法在Caching注解内部包含有Cacheable、put和evict三个属性分别对应于Cacheable、CachePut和CacheEvict三个注解
Caching(cacheable{Cacheable(cacheNames comment,key #id)},put {CachePut(cacheNames comment,key. #result.author)}
)
public Comment getcoiment(int id){return commentRepository.findByld(id).get();
}