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

网站公司建设个服务号多少钱友情链接多久有效果

网站公司建设个服务号多少钱,友情链接多久有效果,网站的分页效果怎么做,建筑公司招聘信息一、介绍 Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。 Spring Cache只是提供了一层抽象,底层可以切换不同的cache实现。具体就…

一、介绍

Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。

Spring Cache只是提供了一层抽象,底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口。

针对不同的缓存技术需要实现不同的CacheManager:

CacheManager描述
EhCacheCacheManager使用EhCache作为缓存技术
GuavaCacheManager使用Google的GuavaCache作为缓存技术
RedisCacheManager使用Redis作为缓存技术

 

 

二、注解

在SpringCache中提供了很多缓存操作的注解,常见的是以下的几个:

注解说明
@EnableCaching开启缓存注解功能
@Cacheable在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
@CachePut将方法的返回值放到缓存中
@CacheEvict将一条或多条数据从缓存中删除

在spring boot项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用@EnableCaching开启缓存支持即可。

例如,使用Redis作为缓存技术,只需要导入Spring data Redis的maven坐标即可。

 

 

三、使用方式

3.1、@EnableCaching注解

在引导类上加该注解,就代表当前项目开启缓存注解功能。

 

3.2、@CachePut注解

@CachePut 说明:

作用: 将方法返回值,放入缓存

value: 缓存的名称, 每个缓存名称下面可以有很多key

key: 缓存的key ----------> 支持Spring的表达式语言SPEL语法

案例演示:

在save方法上加注解@CachePut

 

当前UserController的save方法是用来保存用户信息的,我们希望在该用户信息保存到数据库的同时,也往缓存中缓存一份数据,我们可以在save方法上加上注解 @CachePut,用法如下:

/**
* CachePut:将方法返回值放入缓存
* value:缓存的名称,每个缓存名称下面可以有多个key
* key:缓存的key
*/
@CachePut(value = "userCache", key = "#user.id")
@PostMapping
public User save(User user){userService.save(user);return user;
}

key的写法如下:

#user.id : #user指的是方法形参的名称, id指的是user的id属性 , 也就是使用user的id属性作为key ;

#user.name: #user指的是方法形参的名称, name指的是user的name属性 ,也就是使用user的name属性作为key ;

#result.id : #result代表方法返回值,该表达式代表以返回对象的id属性作为key ;

#result.name : #result代表方法返回值,该表达式 代表以返回对象的name属性作为key ;

 

3.3、@CacheEvict注解

@CacheEvict 说明:

作用: 清理指定缓存

value: 缓存的名称,每个缓存名称下面可以有多个key

key: 缓存的key ----------> 支持Spring的表达式语言SPEL语法

案例演示:

在 delete 方法上加注解@CacheEvict

 

当我们在删除数据库user表的数据的时候,我们需要删除缓存中对应的数据,此时就可以使用@CacheEvict注解, 具体的使用方式如下:

/**
* CacheEvict:清理指定缓存
* value:缓存的名称,每个缓存名称下面可以有多个key
* key:缓存的key
*/
@CacheEvict(value = "userCache",key = "#p0")  //#p0 代表第一个参数
//@CacheEvict(value = "userCache",key = "#root.args[0]") //#root.args[0] 代表第一个参数
//@CacheEvict(value = "userCache",key = "#id") //#id 代表变量名为id的参数
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id){userService.removeById(id);
}

在 update 方法上加注解@CacheEvict

 

在更新数据之后,数据库的数据已经发生了变更,我们需要将缓存中对应的数据删除掉,避免出现数据库数据与缓存数据不一致的情况。

//@CacheEvict(value = "userCache",key = "#p0.id")   //第一个参数的id属性
//@CacheEvict(value = "userCache",key = "#user.id") //参数名为user参数的id属性
//@CacheEvict(value = "userCache",key = "#root.args[0].id") //第一个参数的id属性
@CacheEvict(value = "userCache",key = "#result.id")         //返回值的id属性
@PutMapping
public User update(User user){userService.updateById(user);return user;
}

  

3.4、@Cacheable注解

@Cacheable 说明:

作用: 在方法执行前,spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中

value: 缓存的名称,每个缓存名称下面可以有多个key

key: 缓存的key ----------> 支持Spring的表达式语言SPEL语法

案例演示:

在getById上加注解@Cacheable

 

/**
* Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中
* value:缓存的名称,每个缓存名称下面可以有多个key
* key:缓存的key
*/
@Cacheable(value = "userCache",key = "#id")
@GetMapping("/{id}")
public User getById(@PathVariable Long id){User user = userService.getById(id);return user;
}

缓存非null值  

 

在@Cacheable注解中,提供了两个属性分别为: condition, unless 。

  • condition : 表示满足什么条件, 再进行缓存 ;
  • unless : 表示满足条件则不缓存 ; 与上述的condition是反向的 ;

 具体实现方式如下:

/*** Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key* condition:条件,满足条件时才缓存数据* unless:满足条件则不缓存*/
@Cacheable(value = "userCache",key = "#id", unless = "#result == null")
@GetMapping("/{id}")
public User getById(@PathVariable Long id){User user = userService.getById(id);return user;
}

注意: 此处,我们使用的时候只能够使用 unless, 因为在condition中,我们是无法获取到结果 #result的

在list方法上加注解@Cacheable

 

在list方法中进行查询时,有两个查询条件,如果传递了id,根据id查询; 如果传递了name, 根据name查询,那么我们缓存的key在设计的时候,就需要既包含id,又包含name。 具体的代码实现如下:

@Cacheable(value = "userCache",key = "#user.id + '_' + #user.name")
@GetMapping("/list")
public List<User> list(User user){LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(user.getId() != null,User::getId,user.getId());queryWrapper.eq(user.getName() != null,User::getName,user.getName());List<User> list = userService.list(queryWrapper);return list;
}

 

 

四、集成Redis

在使用上述默认的ConcurrentHashMap做缓存时,服务重启之后,之前缓存的数据就全部丢失了,操作起来并不友好。在项目中使用,我们会选择使用redis来做缓存,主要需要操作以下几步:

pom.xml

 

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

application.yml

 

spring:redis:host: localhostport: 6379password: root@123456database: 0cache:redis:time-to-live: 1800000   #设置缓存过期时间,可选
http://www.15wanjia.com/news/8635.html

相关文章:

  • ppt模板制作教程步骤seo要点
  • 网站建设功能需求百度新闻客户端
  • 宿迁市建设局网站怎么投诉打广告在哪里打最有效
  • 上海 顶尖 网站设计黑帽seo培训网
  • 企业网站 手机站网络推广的方式和途径有哪些
  • 移动端网站开发注意些什么优化百度seo技术搜索引擎
  • 做网站怎么切psd图如何做google推广
  • 教育网站建设策划书刚刚中国出啥大事了
  • 网站copyright写法社群运营的经典案例
  • dw做简单小说网站韶关seo
  • 专门做动漫的网站比较好用的搜索引擎
  • 商丘做网站推广站长工具权重查询
  • 建筑工程网校官网上海搜索引擎优化公司
  • asp网站做视频链接搜索
  • 网站建设全套西安seo优化推广
  • 网站建设需要会搜索关键词优化
  • 做网站 珠海通过百度指数不能判断出
  • 手机怎样用网站做成软件一个万能的营销方案
  • 做论文常用网站谷歌seo网站排名优化
  • 福州营销网站建设老品牌seo云优化平台
  • wordpress 外链缩略图深圳关键词优化软件
  • 阿里巴巴网站分类板块做全屏厦门seo顾问屈兴东
  • 已有网站做google推广百度长尾关键词挖掘工具
  • app网站建站系统下载广州seo公司排名
  • 好看网站手机版怎么做百度推广的代理
  • 鄂州网站设计制作公司免费访问国外网站的app
  • 天津网络广告公司seo快速排名优化公司
  • 义乌网站建站新媒体运营培训课程
  • 襄阳住房城乡建设厅官方网站百度平台商家我的订单查询
  • 做商业地产常用的网站免费seo网站自动推广