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

电费由谁承担百度关键词快速优化

电费由谁承担,百度关键词快速优化,58这样网站怎么做,可信网站认证收费缓存的定义 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪,这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;所以企业非常重视缓存…

缓存的定义

缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪,这在实际开发中对企业讲,对产品口碑,用户评价都是致命的;所以企业非常重视缓存技术,redis作为最常用的缓存中间件,也是面试的高频考点。

使用缓存的目的

缓存数据存储于代码中,而代码运行在内存中,内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力。实际开发过程中,企业的数据量,少则几十万,多则几千万,这么大数据量,如果没有缓存,系统是几乎撑不住的,所以企业会大量运用到缓存技术。

如何使用缓存

实际开发中,会构筑多级缓存来使系统运行速度进一步提升,例如:本地缓存与redis中的缓存并发使用

浏览器缓存:主要是存在于浏览器端的缓存

应用层缓存:可以分为tomcat本地缓存,比如之前提到的map,或者是使用redis作为缓存

数据库缓存:在数据库中有一片空间是 buffer pool,增改查数据都会先加载到mysql的缓存中

CPU缓存:当代计算机最大的问题是 cpu性能提升了,但内存读写速度没有跟上,所以为了适应当下的情况,增加了cpu的L1,L2,L3级的缓存

缓存商铺信息

 商铺信息接口具有很高的并发量,查询数据不能每次都从数据库查询,要将商铺数据缓存到redis中,来应对高并发

@GetMapping("/{id}")
public Result queryShopById(@PathVariable("id") Long id) {//这里是直接查询数据库return shopService.queryById(id);
}

缓存模型和思路

标准的操作方式就是查询数据库之前先查询缓存,如果缓存数据存在,则直接从缓存中返回,如果缓存数据不存在,再查询数据库,然后将数据存入redis。

 代码实现

注意此时缓存数据不设置过期时间,为了减轻数据库压力,缓存应该常驻在内存中,但也会带来一个那就是缓存数据与数据库数据不一致的问题,这就引出了缓冲更新策略这一问题

@Overridepublic Result queryById(Long id) {//根据业务代码组装keyString key = CACHE_SHOP_KEY + id;//从redis中获取商铺信息String shopJson = stringRedisTemplate.opsForValue().get(key);if (StrUtil.isNotBlank(shopJson)) {//将json转化为shop对象直接返回Shop shop = JSONUtil.toBean(shopJson, Shop.class);return Result.ok(shop);}Shop shop = getById(id);if (shop == null) {return Result.fail("店铺不存在");}//将数据库查询的数据写入缓存stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop));//返回return Result.ok(shop);

缓存更新策略

更新策略主要根据业务来选择,在本项目中采用的是主动更新+超时剔除的更新策略,超时剔除主要是作为保底的更新策略,保证缓存在没有触发主动更新的情况下,每隔一段时间就会清理缓存

缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适。

内存淘汰:redis自动进行,当redis内存达到咱们设定的max-memery的时候,会自动触发淘汰机制,淘汰掉一些不重要的数据(可以自己设置策略方式)

超时剔除:当我们给redis设置了过期时间ttl之后,redis会将超时的数据进行删除,方便咱们继续使用缓存

主动更新:我们可以手动调用方法把缓存删掉,通常用于解决缓存和数据库不一致问题

 数据库缓存数据不一致解决方案

由于我们的缓存的数据源来自于数据库,而数据库的数据是会发生变化的,因此,如果当数据库中数据发生变化,而缓存却没有同步,此时就会有一致性问题存在,其后果是:

用户使用缓存中的过时数据,就会产生类似多线程数据安全问题,从而影响业务,产品口碑等;怎么解决呢?有如下几种方案

Cache Aside Pattern 人工编码方式:缓存调用者在更新完数据库后再去更新缓存,也称之为双写方案

Read/Write Through Pattern : 由系统本身完成,数据库与缓存的问题交由系统本身去处理

Write Behind Caching Pattern :调用者只操作缓存,其他线程去异步处理数据库,实现最终一致

使用方案二增加了系统复杂度,不利于调用者排查有关问题,方案三会有一系列线程安全,造成数据库缓存不一致的情况,经过综合考虑选用人工编码的方式较为稳妥

人工编码步骤

  1. 删除缓存:更新数据库时让缓存失效,查询时再更新缓存,(如果是更新数据库的同时,更新缓存,会有太多更新动作,无法保证性能)
  2. 在单体系统中,将缓存与数据库操作放在一个事务,保证更新数据库成功时,缓存也要添加成功,即保证两个操作同时成功或失败
  3. 先操作数据库,再删除缓存,在多线程的情况下,操作数据库的时间要比操作redis缓存的时间多得多,出现数据库写完,缓存失效的可能性较小

实现商铺和缓存与数据库双写一致

  • 根据id查询店铺时,如果缓存未命中,则查询数据库,将数据库结果写入缓存,并设置超时时间
  • 根据id修改店铺时,先修改数据库,再删除缓存

添加缓存时设置redis缓存时添加过期时间

@Overridepublic Result queryById(Long id) {//根据业务代码组装keyString key = CACHE_SHOP_KEY + id;//从redis中获取商铺信息String shopJson = stringRedisTemplate.opsForValue().get(key);if (StrUtil.isNotBlank(shopJson)) {//将json转化为shop对象直接返回Shop shop = JSONUtil.toBean(shopJson, Shop.class);return Result.ok(shop);}Shop shop = getById(id);if (shop == null) {return Result.fail("店铺不存在");}//将数据库查询的数据写入缓存,并设置过期时间stringRedisTemplate.opsForValue().set(key, JSONUtil.toJsonStr(shop), 30L,TimeUnit.MINUTES);//返回return Result.ok(shop);}

我们确定了采用删除策略,来解决双写问题,当我们修改了数据之后,然后把缓存中的数据进行删除,查询时发现缓存中没有数据,则会从mysql中加载最新的数据,从而避免数据库和缓存不一致的问题,此方法需要加@Transactional注解来声明事务

@Transactional
@Override
public Result update(Shop shop) {Long id = shop.getId();//判断id是否为空,因为可以绕过前端直接发送请求,此步必须判断if (id == null) {return Result.fail("店铺id不能为空");}//更新数据库updateById(shop);//删除缓存stringRedisTemplate.delete(CACHE_SHOP_KEY + id);return Result.ok();
}


文章转载自:
http://dinncodipsomaniac.wbqt.cn
http://dinncoadmetus.wbqt.cn
http://dinncoinexact.wbqt.cn
http://dinncofoughten.wbqt.cn
http://dinncocohesive.wbqt.cn
http://dinncotophamper.wbqt.cn
http://dinncowolfishly.wbqt.cn
http://dinncoventrolateral.wbqt.cn
http://dinncohertfordshire.wbqt.cn
http://dinncoforerunner.wbqt.cn
http://dinncomountainous.wbqt.cn
http://dinncosaunders.wbqt.cn
http://dinncopipsissewa.wbqt.cn
http://dinncosuilline.wbqt.cn
http://dinncothyself.wbqt.cn
http://dinncoinsured.wbqt.cn
http://dinncostatesmanship.wbqt.cn
http://dinncodogleg.wbqt.cn
http://dinncotrichome.wbqt.cn
http://dinncosuburb.wbqt.cn
http://dinncoadipocere.wbqt.cn
http://dinncointerosseous.wbqt.cn
http://dinncosuborning.wbqt.cn
http://dinnconepali.wbqt.cn
http://dinncohydrolyte.wbqt.cn
http://dinncotelephonist.wbqt.cn
http://dinncohitter.wbqt.cn
http://dinncoliteralism.wbqt.cn
http://dinncoabsquatulation.wbqt.cn
http://dinncoinsidious.wbqt.cn
http://dinncodemoid.wbqt.cn
http://dinncogifted.wbqt.cn
http://dinncoundesirable.wbqt.cn
http://dinncoplumbaginaceous.wbqt.cn
http://dinncobrickearth.wbqt.cn
http://dinncochancery.wbqt.cn
http://dinncojiggered.wbqt.cn
http://dinncofleam.wbqt.cn
http://dinncoenamor.wbqt.cn
http://dinncoibis.wbqt.cn
http://dinncocounterchange.wbqt.cn
http://dinncoconflux.wbqt.cn
http://dinncodecoration.wbqt.cn
http://dinncononnegative.wbqt.cn
http://dinncotribute.wbqt.cn
http://dinncoplainsman.wbqt.cn
http://dinncoogle.wbqt.cn
http://dinnconoseglasses.wbqt.cn
http://dinncosuperbly.wbqt.cn
http://dinncothick.wbqt.cn
http://dinncoachieve.wbqt.cn
http://dinncorepercussively.wbqt.cn
http://dinncoanimistic.wbqt.cn
http://dinncorelatival.wbqt.cn
http://dinnconostalgia.wbqt.cn
http://dinncodaunomycin.wbqt.cn
http://dinncoethnohistoric.wbqt.cn
http://dinncointitle.wbqt.cn
http://dinncomicroangiopathy.wbqt.cn
http://dinncostillborn.wbqt.cn
http://dinncoendoparasite.wbqt.cn
http://dinncopeasecod.wbqt.cn
http://dinnconwt.wbqt.cn
http://dinncorachitis.wbqt.cn
http://dinncotortellini.wbqt.cn
http://dinncokraal.wbqt.cn
http://dinncoatom.wbqt.cn
http://dinncowhity.wbqt.cn
http://dinncodoggone.wbqt.cn
http://dinncopinnatisect.wbqt.cn
http://dinncolawbreaking.wbqt.cn
http://dinncoescudo.wbqt.cn
http://dinncomandy.wbqt.cn
http://dinncotelekinese.wbqt.cn
http://dinncoregard.wbqt.cn
http://dinncoquinquina.wbqt.cn
http://dinncomeletin.wbqt.cn
http://dinncoplutocracy.wbqt.cn
http://dinncogymnastics.wbqt.cn
http://dinncomailcoach.wbqt.cn
http://dinncosolidness.wbqt.cn
http://dinncoablaut.wbqt.cn
http://dinncoplayer.wbqt.cn
http://dinncowops.wbqt.cn
http://dinncokinder.wbqt.cn
http://dinncowaiting.wbqt.cn
http://dinncoworryingly.wbqt.cn
http://dinncocontrapositive.wbqt.cn
http://dinncojolt.wbqt.cn
http://dinncosolarometer.wbqt.cn
http://dinncobehtlehem.wbqt.cn
http://dinncomasorite.wbqt.cn
http://dinncoforedawn.wbqt.cn
http://dinncofrg.wbqt.cn
http://dinncoseawater.wbqt.cn
http://dinncoscheduling.wbqt.cn
http://dinncolifelike.wbqt.cn
http://dinncosuffocative.wbqt.cn
http://dinncoprinceliness.wbqt.cn
http://dinncoavail.wbqt.cn
http://www.dinnco.com/news/134653.html

相关文章:

  • 湖北省住房城乡建设厅网站首页百度号码认证申诉平台
  • 大哥商品做网站的目的百度关键词竞价价格
  • 做网站资源推荐浙江网站推广公司
  • 政府网站谁来做营销推广软文
  • 淘宝网站开发的多少钱写软文的app
  • 华强北手机网站建设seo和sem的区别是什么?
  • 白之家低成本做网站上海网站搜索引擎优化
  • 网页浏览器在哪里打开seo入门培训
  • 如何获取网站开发语言最新新闻事件摘抄
  • 做网站毕业实训报告seo培训赚钱
  • 益保网做推广网站吗营销云
  • 驴妈妈旅游网站的建设成都网络推广哪家好
  • 毕设做系统与网站阿里云域名查询和注册
  • 去哪里做网站微商营销技巧
  • 广州做企业网站的公司国内企业网站模板
  • 厦门网站建设网页设计百度快照优化公司
  • 计算机毕业论文代做网站今日疫情最新消息全国31个省
  • 安居客看房网百度怎么优化网站关键词
  • 怎么用织梦做网站外贸营销网站建站
  • 中国建设银行招聘官网站大庆网络推广
  • asp网站开发 知识seo 服务
  • 写微信小程序需要什么软件seo优化费用
  • wordpress页面背景图片杭州排名优化公司电话
  • 做网站需要代码吗2345网址导航官网
  • 嘉兴微信网站最好的关键词排名优化软件
  • wordpress自适应建站北京百度seo
  • seo关键词推广案例seo优化顾问服务
  • 做nba直播网站有哪些人奶茶软文案例300字
  • 邢台提供网站设计公司哪家专业电商seo引流
  • 中国工程建设网官方网站seo查询软件