当前位置: 首页 > news >正文

php网站源码怎么在本地电脑调式中山免备案网站建设

php网站源码怎么在本地电脑调式,中山免备案网站建设,网站兼容设置,舞台灯光网站建设Spring 从 3.1 版本开始定义缓存抽象来统一不同的缓存技术#xff1b;在应用层面与后端存储之间#xff0c;提供了一层抽象#xff0c;这层抽象目的在于封装各种可插拔的后端存储( ehcache, redis, guava)#xff0c;最小化因为缓存给现有业务代码带来的侵入。 一、Spring…Spring 从 3.1 版本开始定义缓存抽象来统一不同的缓存技术在应用层面与后端存储之间提供了一层抽象这层抽象目的在于封装各种可插拔的后端存储( ehcache, redis, guava)最小化因为缓存给现有业务代码带来的侵入。 一、Spring Cache简介 Spring Cache 是 Spring 框架提供的一个缓存抽象实现了基于注解的缓存功能它能够轻松地集成到 Spring 应用程序中为方法调用的结果提供缓存支持从而提高应用程序的性能和响应速度。 Spring Cache 提供了一种声明式的缓存机制可以在方法上使用注解来指定需要进行缓存的方法而无需编写繁琐的缓存代码。 Spring Cache 基本介绍 声明式缓存支持Spring Cache 提供了一种声明式的缓存机制通过在方法上使用注解来声明需要进行缓存的方法。比如Cacheable、CachePut、CacheEvict等注解。灵活的缓存策略Spring Cache 提供了多种灵活的缓存策略可以根据具体需求选择合适的缓存方案。比如基于内存缓存、基于 Redis、Ehcache 等第三方缓存框架的集成。支持缓存管理器Spring Cache 支持多种缓存管理器可以根据需要选择适合的缓存管理器。比如ConcurrentMapCacheManager、EhCacheCacheManager、RedisCacheManager 等。适用于各种应用场景Spring Cache 适用于各种应用场景可以用于缓存方法的返回值、类级别的缓存、缓存的条件判断等。 Spring Cache核心抽象主要体现在两个接口上 org.springframework.cache.cache接口cache代表缓存组件规范定义缓存本身包含缓存的各种操作集合。比如增加、删除、读取等。org.springframework.cache.cachemanager接口CacheManager 是 Spring 各种缓存的抽象接口。抽象的意义在于屏蔽实现细节的差异和提供扩展性这一层cache的抽象解耦了缓存的使用和缓存的后端存储这样后续可以方便的更换后端存储。 Spring提供了 Cache接口下各种 XxxCache实现。比如RedisCache, EhCacheCache, ConcurrentMapCache, JCacheCache等。 Spring支持的常用 CacheManager 如下 Spring Cache 默认使用 ConcurrentMapCacheManager 作为缓存管理器。 通过使用 Spring Cache可以轻松地为应用程序中的方法调用提供缓存支持从而提高应用程序的性能和响应速度减少对数据库或其他资源的频繁访问。 每次调用需要缓存功能的方法时Spring 会检查检查指定参数的指定的目标方法是否已经被调用过。 如果有就直接从缓存中获取方法调用后的结果。如果没有就调用方法并缓 存结果后返回给用户。下次调用直接从缓存中获取。 二、Spring Cache使用 Spring Cache依赖如下 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-cache/artifactId /dependency在spring boot项目中无需添加 Spring Cache 的依赖,因为 Spring Boot 已经自动集成了 Spring Cache。 1、接入Redis使用Spring Cache 添加 Redis依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency项目配置文件application.yml中添加 Redis配置信息 spring:## Redis 配置信息redis:host: 127.0.0.1port: 6379password: xxxxxxdatabase: 11.1 Redis配置类 Redis默认使用 JdkSerializationRedisSerializer序列化器。 RedisTemplate 中k和v默认的序列化方案是 JdkSerializationRedisSerializer 。RedisTemplateString, Object 中k和v默认的序列化方案是 JdkSerializationRedisSerializer 。StringRedisTemplate 中k和v默认的序列化方案是 StringRedisSerializer 。默认情况下前面不会有前缀。 Configuration public class RedisConfiguration {PrimaryBeanpublic RedisTemplateString, Object redisTemplate(RedisConnectionFactory factory) {RedisTemplateString, Object redisTemplate new RedisTemplate();redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());redisTemplate.setValueSerializer(RedisSerializer.java());redisTemplate.setHashValueSerializer(RedisSerializer.java());redisTemplate.setConnectionFactory(factory);// 调用 afterPropertiesSet()方法执行初始化操作redisTemplate.afterPropertiesSet();return redisTemplate;} }1.2 Spring Cache配置类 EnableCaching注解开启缓存功能一般放在启动类或者配置类上。 CacheManager可以不用注入Spring框架会自动注入的。如果我们手动注入会使用我们自己注入的适合自定义相关配置信息。 下面使用 RedisCacheManager作为缓存缓存管理。 EnableCaching Configuration public class CacheConfiguration {Beanpublic CacheManager cacheManager(RedisConnectionFactory connectionFactory) {RedisCacheManager cacheManager RedisCacheManager.create(connectionFactory);return cacheManager;} }2、核心注解使用 Spring Cache提供了下面几个核心注解完成缓存功能的实现。 EnableCaching开启缓存功能Cacheable定义缓存用于触发缓存CachePut定义更新缓存触发缓存更新CacheEvict定义清除缓存触发缓存清除Caching组合定义多种缓存功能CacheConfig定义公共设置位于class之上 2.1 Cacheable注解 Cacheable注解定义缓存数据或者获取缓存数据操作。 Cacheable 注解可以应用于类或方法上。当应用于类上时表示该类的所有方法的返回值都可以被缓存当应用于方法上时表示特定方法的返回值可以被缓存。 该注解标注的方法每次被调用前都会触发缓存校验校验指定参数的缓存是否已存在已发生过相同参数的调用若存在直接返回缓存结果否则执行方法内容最后将方法执行结果保存到缓存中。 2.1.1 主要属性 主要属性如下 value必填指定缓存数据存放在哪块命名空间缓存名。用于指定要操作的缓存名称或缓存管理器的名称。可以是一个字符串也可以是一个字符串数组用于指定多个缓存名称。cacheNames与 value 差不多二选一即可。key可选指定缓存条目的键用于唯一标识缓存中的条目。SpEL 表达式可以用于动态地生成键值。如果不指定 keySpring Cache 将会使用默认的键生成策略来生成键值。condition条件符合则缓存。指定一个 SpEL 表达式用于判断是否执行缓存操作。只有当表达式的值为 true 时才会执行缓存操作。默认为空表示始终执行缓存操作。unless条件符合则不缓存。指定一个 SpEL 表达式用于判断是否不执行缓存操作。只有当表达式的值为 false 时才会执行缓存操作。默认为空表示始终执行缓存操作。keyGenerator指定一个自定义的键生成器用于生成缓存条目的键值。默认为空表示使用默认的键生成策略。key/keyGenerator二选一使用。cacheManager指定一个自定义的缓存管理器用于指定缓存的实现。默认为空表示使用默认的缓存管理器。cacheResolver指定一个自定义的缓存解析器用于解析缓存的实现。默认为空表示使用默认的缓存解析器。sync指定是否启用同步模式。如果设置为 true那么缓存操作将在调用方法的同一线程中执行否则将在后台线程中异步执行。默认为 false。 2.1.2 使用 Cacheable(value userCache_, key #id, unless #resultnull)Overridepublic UserDTO getById(Long id) {if (id null || id 0L) {return null;}UserDO userDO userMapper.selectById(id);return do2DTO(userDO);}unless参数里的 #result为方法的返回值。所以判断方法返回值为 null 时则不缓存。 2.2 CachePut注解 CachePut注解更新缓存数据操作。 CachePut与 Cacheable 不同CachePut 不会检查缓存中是否已经存在相同键的条目而是直接将方法的返回值更新到缓存中。 该注解用于更新缓存无论结果是否已经缓存都会在方法执行结束插入缓存相当于更新缓存。一般用于更新方法之上。 2.2.1 主要属性 主要属性如下 value必填指定缓存数据存放在哪块命名空间缓存名。用于指定要操作的缓存名称或缓存管理器的名称。可以是一个字符串也可以是一个字符串数组用于指定多个缓存名称。cacheNames与 value 差不多二选一即可。key可选指定缓存条目的键用于唯一标识缓存中的条目。SpEL 表达式可以用于动态地生成键值。如果不指定 keySpring Cache 将会使用默认的键生成策略来生成键值。condition条件符合则缓存。指定一个 SpEL 表达式用于判断是否执行缓存操作。只有当表达式的值为 true 时才会执行缓存操作。默认为空表示始终执行缓存操作。unless条件符合则不缓存。指定一个 SpEL 表达式用于判断是否不执行缓存操作。只有当表达式的值为 false 时才会执行缓存操作。默认为空表示始终执行缓存操作。keyGenerator指定一个自定义的键生成器用于生成缓存条目的键值。默认为空表示使用默认的键生成策略。key/keyGenerator二选一使用cacheManager指定一个自定义的缓存管理器用于指定缓存的实现。默认为空表示使用默认的缓存管理器。cacheResolver指定一个自定义的缓存解析器用于解析缓存的实现。默认为空表示使用默认的缓存解析器。 2.2.2 使用 CachePut(cacheNames userCache_, key #updateRequest.userId, unless #result null)Overridepublic UserDTO update2(UserUpdateRequest updateRequest) {Long id updateRequest.getUserId();if (id null || id 0) {return null;}// 修改用户信息UserDO updateDO new UserDO();BeanUtils.copyProperties(updateRequest, updateDO);updateDO.setUpdateTime(LocalDateTime.now());userMapper.updateById(updateDO);// 演示效果UserDO userDO userMapper.selectById(id);return do2DTO(userDO);}注意这里设置的 key一定要和执行缓存保存的方法设置 key一致否则无法准确更新。 使用方法参数作为 key的示例 Cacheable(valueusers, key#id)public User find(Integer id) {return null;}Cacheable(valueusers, key#p0)public User find(Integer id) {return null;}// 推荐使用Cacheable(valueusers, key#user.id)public User find(User user) {return null;}Cacheable(valueusers, key#p0.id)public User find(User user) {return null;}除了上述使用方法参数作为 key之外Spring还为我们提供了一个 root对象可以用来生成 key。通过该 root对象我们可以获取到以下信息。 2.3 CacheEvict注解 CacheEvict注解删除缓存数据操作。 2.3.1 主要属性 主要属性如下 value必填指定缓存数据存放在哪块命名空间缓存名。用于指定要操作的缓存名称或缓存管理器的名称。可以是一个字符串也可以是一个字符串数组用于指定多个缓存名称。cacheNames与 value 差不多二选一即可。key可选指定缓存条目的键用于唯一标识缓存中的条目。SpEL 表达式可以用于动态地生成键值。如果不指定 keySpring Cache 将会使用默认的键生成策略来生成键值。condition条件符合则缓存。指定一个 SpEL 表达式用于判断是否执行缓存操作。只有当表达式的值为 true 时才会执行缓存操作。默认为空表示始终执行缓存操作。eyGenerator指定一个自定义的键生成器用于生成缓存条目的键值。默认为空表示使用默认的键生成策略。key/keyGenerator二选一使用。cacheManager指定一个自定义的缓存管理器用于指定缓存的实现。默认为空表示使用默认的缓存管理器。cacheResolver指定一个自定义的缓存解析器用于解析缓存的实现。默认为空表示使用默认的缓存解析器。allEntries是否清空所有缓存默认为 false。如果指定为 true则方法调用后将立即清空所有的缓存。beforeInvocation是否在方法执行前就清空默认为 false。如果指定为 true则在方法执行前就会清空缓存。 2.3.2 使用 CacheEvict(value userCache_, key #id, condition #result.success true)//CacheEvict(value userCache_, allEntries true)Overridepublic BaseOperateResult deleteById(Long id) {BaseOperateResult operateResult new BaseOperateResult();if (id null || id 0L) {operateResult.setSuccess(false);operateResult.setErrorCode(DemoErrorCodeEnum.ID_IS_NOT_NULL.errorCode());return operateResult;}UserDTO oldDTO getById(id);if (oldDTO null) {operateResult.setSuccess(Boolean.FALSE);operateResult.setErrorCode(DemoErrorCodeEnum.RECORD_NOT_FOUND.errorCode());return operateResult;}// 不允许删除管理员账号if (admin.equals(oldDTO.getUsername())) {operateResult.setSuccess(Boolean.FALSE);operateResult.setErrorCode(DemoErrorCodeEnum.NOT_DELETE_ADMIN_USER.errorCode());return operateResult;}// 用户逻辑删除UserDO updateDO new UserDO();updateDO.setUserId(id);updateDO.setDelFlag(CommonConstants.DELETE_FLAG_DELETED);userMapper.updateById(updateDO);operateResult.setId(id);operateResult.setSuccess(true);return operateResult;}注意 这里设置的 key一定要和执行缓存保存的方法设置 key一致否则无法准确删除。condition参数里的 #result为方法的返回值。所以判断方法返回值的 success true 时则执行删除缓存操作。如果配置了 allEntries属性则会删除 value为命名空间下的所有缓存条目的键此时配不配 key属性都不会影响 allEntries属性操作。 3、全局配置Cache参数信息(了解) 参考文章spring-bootredis实现缓存功能https://www.jianshu.com/p/be2c09cd27d8 项目配置文件application.yml中可以添加 cache配置信息。 注意 如果使用 Spring框架自动注入 CacheManager的方式下面配置会生效。如果使用我们手动注入的自定义了 CacheManager方式下面配置不会生效而是使用我们自定义的相关配置。 spring:## Redis 配置信息redis:host: 127.0.0.1port: 6379password: xxxxxxdatabase: 1## Spring cache配置信息cache:# 缓存的类型redistype: redisredis:# 缓存数据key是否使用前缀默认是trueuse-key-prefix: true#缓存数据key的前缀在上面的配置为true时有效key-prefix: demo:# redis中缓存超时的时间默认60000mstime-to-live: 120000参考文章 SpEL表达式详解https://blog.csdn.net/weixin_43888891/article/details/127520555 – 求知若饥虚心若愚。
http://www.pierceye.com/news/280398/

相关文章:

  • 钢管公司网站建设国外平面设计欣赏网站
  • 网站建设如何销售济南专门做网站的公司
  • 2018年淘宝客网站怎么做iis网站建设中
  • 网站倒计时代码企业网站建设运营方案
  • 课程网站开发过程东莞外贸模板建站
  • asp.net 网站提速廊坊企业官网搭建
  • 网站开发全过程电商数据分析
  • 代理 指定网站 hostwordpress图片无限放大
  • 中材建设有限公司招标网站包装设计网课答案
  • python云服务器网站开发实例外贸小家电网站推广
  • 郑州做网站公司中天猫商城的商品来源
  • 织梦网站首页互联网保险平台排名
  • 免费做链接的网站做动画相册在哪个网站好
  • 做思维导图好看的网站可以做富集分析的网站
  • wordpress 媒体库 cos百度网站怎样优化排名
  • 自助建站程序html样式模板
  • 公主岭网站建设筑梦网站建设
  • 昊源建设监理有限公司网站广州住房与城乡建设部网站
  • 如何免费建立自己网站wordpress媒体优化
  • 南京企业做网站网站建设的类型有几种
  • 不需要证件做网站相城区建设网站
  • 游戏推广网站如何做的全网投放广告的渠道有哪些
  • 飞数石家庄网站建设seo 关键词优化
  • 织梦新手网站建设建筑工程公司资质
  • 网站建设开什么名目外贸网站建设关键点
  • 大学生网站设计河南省建筑工程信息网
  • 安徽省住房和城乡建设厅网站首页wordpress评论框中加文字提示
  • 南京营销型网站建设公司杭州模板建站代理
  • 网页设计比较优秀的网站沈阳网站推广公司
  • 西安网站建设维护如何免费制作app软件