hibernate二级缓存的作用_java一级缓存二级缓存

起因

一直都没找到二级缓存在php中应用的比较好的资料和案例,由于范凯RobbinWeb 应用的缓存设计模式和Hibernate二级缓存的启示,记下这篇二级缓存在Eloquent ORM中的应用。

过程

比如博客的首页调用最新的20篇文章,相信不少同学在刚开始使用缓存的时候,会写下如下代码:

hibernate二级缓存的作用_java一级缓存二级缓存

当然,模型中还能预加载每篇文章的分类,作者和tag信息,看起来没有任何问题,而且非常符合人类直觉。但是,放大到全站缓存来看,还是有很大的改善空间。

首先,首页缓存的是一个包含20个article对象的集合,集合的每一个单独的article对象除了在首页出现,还会在分类、作者和tag等列表页出现,还有文章详情页,而缓存的集合数据没办法在这些页面间共用,重复缓存大量相同的article对象是对内存资源的很大浪费,要是article中的text字段content没有单独拆分出去,内存浪费得就更严重了。

其次,不像详情页数据改动很少,首页作为列表页来说,更新频率很高,设置的缓存时间比较短,一般是分钟级别,缓存命中率并不高。

为了有效解决这两个问题,二级缓存就派上用场了,先说下自己对二级缓存的理解。

一级缓存可以看成是数据库里存的数据的一个镜像,只不过把数据从数据库搬到内存,一个key对应一条记录。key一般为表的标识符,比如key为articles:1存的value就是id=1的article对象。一级缓存时间可以设得比较长,甚至forever也行,对象修改删除时,只要删除对应的key就行。

二级缓存可以看成业务逻辑的缓存,首页最新20条文章 就属于业务逻辑,只缓存这20条文章的id,极大地节省了内存占用。等需要用到具体的数据再去一级缓存取,一级缓存没有才去查询数据库,由于都是主键查询,不会造成表的描述,查询效率非常高。即使二级缓存很快过期,一级缓存也不会失效。

个人觉得理解二级缓存最难的是要接受n+1查询这点,这个问题争议很大,明明各种ORM为了避免n+1使用了预加载,我们反而要抛弃它。包括我当初阅读范凯的《Web 应用的缓存设计模式》也心存疑惑,直到去了解了Hibernate二级缓存机制和自己在项目中的实践发现,还真是他说的那样。

拆分n+1条查询的方式,看起来似乎非常违反大家的直觉,但实际上这是真理,我实践经验证明:数据库服务器的瓶颈往往是磁盘IO,而不是SQL并发数量。因此

拆分n+1条查询本质上是以增加n条SQL语句为代价,简化复杂SQL,换取数据库服务器磁盘IO的降低

当然这样做以后,对于ORM来说,有额外的好处,就是可以高效的使用缓存了。

使用二级缓存来重构latestArticles方法

hibernate二级缓存的作用_java一级缓存二级缓存

除了返回Collection,还可以返回Generator。

hibernate二级缓存的作用_java一级缓存二级缓存

吐槽

在专栏发布界面,好不容易写到这里,结果手贱划了下浏览器刷新的鼠标手势,内心瞬间奔崩,砸电脑的心都有了 。虽然看提示有自动保存,可只有标题被保存了,内容还是空空如也。转眼想想历史上那些不小心毁了书稿写出世界名著的作家,自己也只有硬着头皮把内容回忆出来,所以后面的内容就一笔带过了。

更新与删除

一级缓存的更新和删除可能通过模型的updated和deleted事件来清除对应的缓存。二级缓存由于缓存时间比较短,影响不大。

关联关系

关联模型的缓存可能通过accessor来设置一个虚拟的属性来设置,比如在Article模型与Content模型是一对一的关系。

在Article中:

hibernate二级缓存的作用_java一级缓存二级缓存

本文【hibernate二级缓存的作用_java一级缓存二级缓存】由作者: 前端后端 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4305.html

(0)
上一篇 2023-03-11 08:07:44
下一篇 2023-03-08 10:35:56

相关推荐

  • python爬虫有什么用处_python爬虫要学多久

    首先,Python语言是比较适合自学的,一方面Python语言的语法比较简单,另一方面Python语言的应用场景非常多,相关的开发案例也非常多。Python作为当前流行程度比较高的全场景编程语言,在未来的工业互联网时代会有大量的应用,而且与Java语言主要应用在IT互联网行业不同,Python语言在传统行业领域也有广泛的应用。 自学Python可以按照以下几…

    2023-03-10
    400
  • 嵌入式家电是什么意思

    现代家居美学讲究严谨,家电流行嵌入式风格,尤其是要严丝合缝才算做得好。其实最难做嵌入式安装的就是冰箱,安装上突出一块儿或者两侧留缝都不太好。如何选择一款合适的嵌入式冰箱正成为需求新的需求趋势。 正装修或打算装修的业主们不要急,TCL冰洗将在2月21日召开春季发布会将会发布超薄零嵌系列冰箱,据说能轻松做到无缝嵌入哦。 先来问大家一个问题:你认为的“嵌入式”冰箱…

    2023-03-20
    000
  • 安卓应用软件开发方向,安卓软件开发难学吗

    很多人想要从业安卓android软件开发,认为这个行业拥有非常大的就业和升值空间,而事实也是,安卓android软件开发成为近年来大热的高薪职业之一,安卓软件开发的IT程序员平均工资都在年薪20万左右。 很多人想要学习安卓android软件开发,又担心自己没有IT基础,不知道安卓软件开发的门槛有多高,怕报了班交了学费学不好浪费了钱。那么安卓android软件…

    2023-03-20
    000
  • jsp实现购物车功能总结

    原文: https://www.cnblogs.com/wang-meng/p/5854773.html 今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗? 2)用户登陆了用户名密码,添加商品,关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在…

    2023-03-14
    200
  • 无限制搜索器不好用了

    现如今我们需要买什么东西时,习惯在京东或淘宝这样的电商平台上搜,而不会首先打开搜索引擎。即便你用搜索引擎搜,很多时候也是搜不到的。 这种现象当然不限于在淘宝、京东,也一样存在于很多以内容见长的 App,比如今日头条、抖音、快手,当然还包括拥有大量公众号文章的微信等等。 互联网上的全部信息都可以通过搜索引擎搜到的年代早已过去,许多内容来源都形成了对搜索引擎封闭…

    2023-03-21
    000
  • windows7硬盘分区调整c盘,不重装系统扩大c盘

    当我们的电脑c盘资料越来越多,容量不够的时候,我们其实可以不重装系统扩大c盘。那么操作呢?我们可以先将其它盘的空间调整到C盘,来为C盘扩展分区等等。下面我教你们不重装系统扩大c盘操作方法。 专用工具/原材料: 软件版:Windows10系统软件 品牌类型:AlienwareX17 方法/流程: C盘扩展卷进入磁盘分区: 1、如何操作不重做系统扩展c盘?点击鼠…

    2023-03-13
    700
  • cad转jpg线条不明显怎么办

    CAD文件转JPG图片如何转才能非常清晰呢?大家都知道CAD图纸设计出来,是需要拿出来进行实地参考和浏览的,将它转换成图片会让我们在外面观看时方便很多。但是很多种转换方法转换出来的图片都不怎么清晰,今天教大家两种能够清晰转换的方法,有需要的小伙伴快来一起学习吧。 方法一:在线网站转换 使用在线网站转换文件格式,有时候可以帮助我们解决燃眉之急。CAD在线转换器…

    2023-03-16
    100
  • 什么是命令行参数形式_命令行参数是什么

    ffmpeg命令行功能强大,本文简单介绍一下命令行解析过程。 命令行解析函数如下 我们以下面命令行为例 ffmpeg -y -ss 4 -i 1.ts -vframes 1 -f image2 -s 640×360 out.jpg在ffmpeg_opt.c文件中通过两个函数split_commandline、parse_optgroup解析命令行参数并保存在…

    2023-03-12
    700
  • Hp小型机监控2301端口 惠普打印机1602怎么连接wifi

    其实就是局域网打印机共享,方法如下: 1、给打印机设置IP,先把路由器或者是交换机引出来的网上插到打印机上面。 2、然后点击打印机设置——网络配置——无线菜单,最好是在里面给打印机设置一个固定的IP。 3、然后就是在电脑上面下载安装打印机的驱动程序,安装驱动的时候选择网络安装,这样就会自动搜索连接网络局域网内共享的打印机,安装完毕之后驱动,就可以显示打印机无…

    2023-03-13
    600
  • c语言程序是由什么组成_C语言源程序的扩展名是

    1、源代码文件 存放程序代码的文件,即我们编辑代码的文件,称为源代码文件。 C语言源程序文件的扩展名为“.c”。源代码文件是相对目标文件和可执行文件而言的,一般是用高级语言写出来的。 2、目标文件 源代码经过编译所得到的二进制代码,称为目标文件。 目标文件的扩展名为“.obj”(Windows)或“.o”(Linux)。目标文件已经是机器指令,但还不能运行,…

    2023-03-09
    700

发表回复

登录后才能评论
返回顶部
错说博客上线啦!