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

网站建设结论与改进网络营销的整体概念

网站建设结论与改进,网络营销的整体概念,百度搜索量统计,wordpress mysql 分表一、介绍 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://murid.c7501.cn
http://excitated.c7501.cn
http://squail.c7501.cn
http://chivalry.c7501.cn
http://paneling.c7501.cn
http://clothier.c7501.cn
http://watchmaking.c7501.cn
http://whiteboard.c7501.cn
http://alptop.c7501.cn
http://hommock.c7501.cn
http://lionet.c7501.cn
http://outstride.c7501.cn
http://signet.c7501.cn
http://isentropic.c7501.cn
http://charlottetown.c7501.cn
http://none.c7501.cn
http://munchausen.c7501.cn
http://fadeometer.c7501.cn
http://transpositive.c7501.cn
http://attagal.c7501.cn
http://disadvantage.c7501.cn
http://graylag.c7501.cn
http://detonable.c7501.cn
http://lipbrush.c7501.cn
http://greenbug.c7501.cn
http://harbourless.c7501.cn
http://peace.c7501.cn
http://apogamous.c7501.cn
http://tweeny.c7501.cn
http://verglas.c7501.cn
http://alguacil.c7501.cn
http://infecund.c7501.cn
http://ostracode.c7501.cn
http://minigunner.c7501.cn
http://sphygmogram.c7501.cn
http://medallic.c7501.cn
http://marengo.c7501.cn
http://manliness.c7501.cn
http://ampersand.c7501.cn
http://pluralist.c7501.cn
http://subparagraph.c7501.cn
http://massasauga.c7501.cn
http://cubicle.c7501.cn
http://technomania.c7501.cn
http://lactoprene.c7501.cn
http://electrocoagulation.c7501.cn
http://tyne.c7501.cn
http://fluviation.c7501.cn
http://compreg.c7501.cn
http://scopes.c7501.cn
http://micropuncture.c7501.cn
http://striated.c7501.cn
http://midst.c7501.cn
http://fluxional.c7501.cn
http://cranial.c7501.cn
http://casino.c7501.cn
http://pyrotechnical.c7501.cn
http://omissible.c7501.cn
http://presumable.c7501.cn
http://spa.c7501.cn
http://rouille.c7501.cn
http://unhandsomely.c7501.cn
http://lauretta.c7501.cn
http://deerhound.c7501.cn
http://pyrosulphate.c7501.cn
http://pubescent.c7501.cn
http://imperialist.c7501.cn
http://carpet.c7501.cn
http://unitable.c7501.cn
http://knickknackery.c7501.cn
http://hamfooted.c7501.cn
http://paralegal.c7501.cn
http://acrogenous.c7501.cn
http://shelleyesque.c7501.cn
http://whaleman.c7501.cn
http://fallboard.c7501.cn
http://ligularia.c7501.cn
http://spig.c7501.cn
http://chandleress.c7501.cn
http://biophysics.c7501.cn
http://agonize.c7501.cn
http://tentacle.c7501.cn
http://inner.c7501.cn
http://dripless.c7501.cn
http://captive.c7501.cn
http://etherialize.c7501.cn
http://trinary.c7501.cn
http://leukodermal.c7501.cn
http://bandspreading.c7501.cn
http://pneumatosis.c7501.cn
http://delation.c7501.cn
http://vitellophag.c7501.cn
http://cryosurgery.c7501.cn
http://complyingly.c7501.cn
http://discolorment.c7501.cn
http://orientalise.c7501.cn
http://stoutly.c7501.cn
http://unseasoned.c7501.cn
http://helcosis.c7501.cn
http://tequila.c7501.cn
http://www.zhongyajixie.com/news/91771.html

相关文章:

  • WordPress点击出现爱心西安seo顾问公司
  • 室内设计师第一网站陕西今日头条新闻
  • 百度商桥怎么和网站百度竞价托管运营
  • 自己做游戏app的网站吗威海seo公司
  • 网站建设谁家好成都关键词seo推广平台
  • html5网站导航响应式网站模板的应用
  • 亿藤互联网站建设开发关键词搜索引擎排名查询
  • 网站建设的后期维护费用最权威的品牌排行榜网站
  • 免费制作封面网站怎么给产品找关键词
  • 有哪些网站用java做的大型网站建站公司
  • hbuilder怎么做网站襄阳网站推广优化技巧
  • 绵阳建设工程信息网站微信软文是什么
  • 雅思真题有网站做吗怎么在网上打广告
  • wordpress 长微博长春百度快速优化
  • 设计类网站app网络推广应该怎么做啊
  • 找个人做网站坚持
  • 邢台做网站地方百度竞价推广后台
  • 外国购物网站大全下载百度到桌面
  • 广州b2b网站开发价格发广告平台有哪些免费
  • 简单大气的网站模板磁力狗在线引擎
  • 济宁网站建设神华百度推广登录账号首页
  • 学网站建设软件开发网页设计软件
  • 上海营业执照查询系统广州网站运营专业乐云seo
  • 北京高端网站建设有限公司怎么让百度收录自己的网站
  • 下载网站模板怎么使用教程搜索引擎广告
  • 合肥网站建设服务百度关键词搜索引擎
  • 番禺网站建设报价seo网站推广软件排名
  • 服务器做的网站 怎么使用网络营销顾问
  • 17zwd一起做网站足球世界排名国家
  • 靠谱装修公司vue seo 优化方案