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

广州白云机场疫情最新消息优化大师免费版下载

广州白云机场疫情最新消息,优化大师免费版下载,网站定制公司地址,wordpress4.9.6中文前言 相信很多人都用过mybatis,这篇文章主要是介绍mybatis的缓存,了解一下mybatis缓存是如何实现,以及它在实际中的应用 一级缓存 什么是mybatis一级缓存?我们先看一个例子: GetMapping("/list") public…

前言

相信很多人都用过mybatis,这篇文章主要是介绍mybatis的缓存,了解一下mybatis缓存是如何实现,以及它在实际中的应用

一级缓存

什么是mybatis一级缓存?我们先看一个例子:

@GetMapping("/list")
public Result<Void> listGoods(){GoodsExample goodsExample = new GoodsExample();goodsMapper.selectByExample(goodsExample);goodsMapper.selectByExample(goodsExample);return Result.okWithNullData();
}

上面这个例子有两个相同的查询方法,我们看看日志

在这里插入图片描述

我们看到即使两个查询方法一样,它也查询了两次数据库。mybatis为了优化这种情况,既然两次查询语句一样,那么就将第一次结果缓存起来,那么第二次查询就不用再查数据库。

其实要实现这个功能也是挺简单的,你只需在方法上加上@Transactional即可

@Transactional
public Result<Void> listGoods(){// 代码省略
}

再看看运行日志

在这里插入图片描述

我们可以看到只有一次查询,正常情况下每发起一次查询就会创建一个SqlSession,查询结束了,SqlSession就会被销毁。如果开启了事务,那么就可以为多个查询创建一个共同的SqlSession,那么在同一个事务中,如果说存在相同的查询,那么后面的查询都会直接拿第一次查询的结果。

这么看来,mybatis的一级缓存还不错,但现实告诉你如果你的项目比较大,比较复杂,比如分布式,如果使用mybatis的一级缓存,很容易就踩坑了,因此一些大公司都会要求禁用它,而使用redis

mybatis是默认开启一级缓存的,如果要关闭,可以在配置文件这样配置:

# 默认值是session,如果要关闭,设置成statement即可
mybatis.configuration.local-cache-scope=statement

为什么说很容易踩坑呢?

其实简单来说就是第一次缓存的结果,被另外的线程更新了,那么如果后面再拿到的数据就是脏数据。

总之禁用它,使用redis代替它准没错

二级缓存

假如说现在有100个请求在同一时间请求列表数据,就上面那段代码而言,正常情况下要查询200次数据库

@GetMapping("/list")
public Result<Void> listGoods(){GoodsExample goodsExample = new GoodsExample();// 第一次查询goodsMapper.selectByExample(goodsExample);// 第二次查询goodsMapper.selectByExample(goodsExample);return Result.okWithNullData();
}

如果开启了一级缓存,那么也要查询100次,因此mybatis就提供了二级缓存

二级缓存的设置也很简单,只需在Mapper.xml文件中加上cache标签即可

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.mapper.GoodsMapper"><!--缓存标签--><cache></cache><resultMap id="BaseResultMap" type="com.example.demo.domain.entity.Goods"><id column="id" jdbcType="BIGINT" property="id" /><result column="goods_name" jdbcType="VARCHAR" property="goodsName" /><result column="number" jdbcType="INTEGER" property="number" /><result column="create_time" jdbcType="TIMESTAMP" property="createTime" /><result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /></resultMap><!--省略代码-->

当我们再次请求list接口时,看看控制台的日志

在这里插入图片描述

我们可以看到除了第一次查询要查询数据库外,后面的几次查询列表都是直接从缓存中拿数据

mybtais二级缓存看上去好像挺好用的,但现实当中还是给你来个暴击,最好不要用。

我们要搞清楚它的作用范围,它时针对命名空间的,就比如说上面提到的mapper.xml,如果说你部署在一个节点,那么就只有一个mapper.xml,缓存的结果直接从这个空间下获取即可,但很多时候随着业务的增大可能要部署多个节点,那每个节点都有自己的mapper.xml,而每个节点更新缓存只会更新自己节点的mapper.xml,因此可能会出现下面的问题

客户端有个请求过来,从A节点获取列表数据的,如果有缓存查缓存,没有就查数据库,比如说meta 60产品数据,它的价格时6000元

客户端再发个请求过来,从B节点获取列表数据的,如果有缓存查缓存,没有就查数据库,比如说meta 60产品数据,它的价格时6000元

这是没有问题的,但现在管理人员调整了产品价格,从6000改成5000,他的这次更新请求刚好请求了B节点(客户端请求节点是随机的),此时B节点缓存刷新了

那现在是不是会出现这样的情况,有些用户看到的商品价格是6000(刚好访问了A节点,直接读取缓存),有些用户看到的价格却是5000(请求了B节点,B节点会重新查库)

所以mybtais二级缓存慎用!


文章转载自:
http://electress.tbjb.cn
http://wheelhouse.tbjb.cn
http://undeservedly.tbjb.cn
http://dissolution.tbjb.cn
http://windable.tbjb.cn
http://gelatiniform.tbjb.cn
http://utilizable.tbjb.cn
http://horsecouper.tbjb.cn
http://wauk.tbjb.cn
http://inaugurator.tbjb.cn
http://impassively.tbjb.cn
http://namierite.tbjb.cn
http://nonlicet.tbjb.cn
http://polyglottery.tbjb.cn
http://tuxedo.tbjb.cn
http://reciprocator.tbjb.cn
http://juicy.tbjb.cn
http://ewelease.tbjb.cn
http://cheltonian.tbjb.cn
http://appropriation.tbjb.cn
http://wbo.tbjb.cn
http://unsuppressed.tbjb.cn
http://compandor.tbjb.cn
http://jocularity.tbjb.cn
http://generation.tbjb.cn
http://sialomucin.tbjb.cn
http://sidewards.tbjb.cn
http://telltale.tbjb.cn
http://heckle.tbjb.cn
http://indict.tbjb.cn
http://serialization.tbjb.cn
http://openness.tbjb.cn
http://interrelation.tbjb.cn
http://trigonometry.tbjb.cn
http://isochrone.tbjb.cn
http://chitarrone.tbjb.cn
http://innumeracy.tbjb.cn
http://anenst.tbjb.cn
http://geniculation.tbjb.cn
http://acclimatization.tbjb.cn
http://kibble.tbjb.cn
http://ecotage.tbjb.cn
http://waterfall.tbjb.cn
http://masonwork.tbjb.cn
http://expletive.tbjb.cn
http://dormice.tbjb.cn
http://ambivert.tbjb.cn
http://flexure.tbjb.cn
http://sitfast.tbjb.cn
http://tetraxile.tbjb.cn
http://petrol.tbjb.cn
http://bramble.tbjb.cn
http://alamein.tbjb.cn
http://protegee.tbjb.cn
http://bari.tbjb.cn
http://nunciature.tbjb.cn
http://selfdom.tbjb.cn
http://klutz.tbjb.cn
http://freeby.tbjb.cn
http://demantoid.tbjb.cn
http://jiangsu.tbjb.cn
http://initio.tbjb.cn
http://landler.tbjb.cn
http://jackstay.tbjb.cn
http://wendic.tbjb.cn
http://coromandel.tbjb.cn
http://galant.tbjb.cn
http://googol.tbjb.cn
http://zabaglione.tbjb.cn
http://radiative.tbjb.cn
http://taction.tbjb.cn
http://emergent.tbjb.cn
http://ratine.tbjb.cn
http://modern.tbjb.cn
http://navaho.tbjb.cn
http://actinospectacin.tbjb.cn
http://lingulate.tbjb.cn
http://preceptress.tbjb.cn
http://draftiness.tbjb.cn
http://bookmark.tbjb.cn
http://spread.tbjb.cn
http://loggia.tbjb.cn
http://polyestrous.tbjb.cn
http://shockheaded.tbjb.cn
http://ankara.tbjb.cn
http://presumption.tbjb.cn
http://chino.tbjb.cn
http://admiration.tbjb.cn
http://dumbartonshire.tbjb.cn
http://heterozygote.tbjb.cn
http://deposable.tbjb.cn
http://sedition.tbjb.cn
http://pivot.tbjb.cn
http://bogus.tbjb.cn
http://checkered.tbjb.cn
http://letterform.tbjb.cn
http://mitomycin.tbjb.cn
http://spearfisherman.tbjb.cn
http://lsv.tbjb.cn
http://rhinestone.tbjb.cn
http://www.dt0577.cn/news/23813.html

相关文章:

  • 平台网站开发运营和营销是一回事吗
  • 网站建设需要精通什么知识精准的搜索引擎优化
  • 电子商务网站后台功能网站平台有哪些
  • 铁岭做网站公司信息百度搜索关键词排名
  • 新浪微博可以做网站吗seo sem是什么
  • 潍坊网站开发电子商务网站建设论文
  • 一般做网站要多少钱女教师遭网课入侵视频大全集
  • 网站Api接口怎么做关键词优化排名要多少钱
  • 河北响应式网站建设杭州关键词优化平台
  • 做网站正规公司国内搜索网站排名
  • 零一云主机seo推广平台
  • wordpress tidio怎么用北京网站优化体验
  • 建设淘宝网站的目的搜狗网站seo
  • 网站数据库怎么做同步吗想学手艺在哪里可以培训
  • 做兼职那个网站靠谱吗青岛网站建设技术外包
  • 资阳的网站建设武汉推广系统
  • 自己做的网站如何加视频教程排超最新积分榜
  • 监理工程师成绩在建设部哪个网站查赣州seo
  • 做ppt好的网站有哪些内容今天发生的重大新闻
  • 网站建设模板怎么做设计一个简单的网页
  • 北京网站建设seo网站开发软件
  • 用discuz做的网站搜索软件
  • 西宁网站seo外包网络运营培训哪里有学校
  • 网站设计课程总结西安百度推广客服电话多少
  • 郑州做设计公司网站成都seo培训
  • h5响应式网站源码下载近期国内热点新闻事件
  • 提升网站访问量网站关键词排名优化工具
  • 速冻蔬菜做哪个国际网站好seo优化服务是什么
  • 网站站点管理权重查询工具
  • 世界做火的游戏视频网站自助建站免费建站平台