Mysql8.0为什么取消了缓存查询的功能

这篇具有很好参考价值的文章主要介绍了Mysql8.0为什么取消了缓存查询的功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先我们介绍一下MySQL的缓存机制

【MySQL缓存机制】简单的说就是缓存sql文本及查询结果,如果运行完全相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL。

但如果表中任何数据或是结构发生改变,包括INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等,最简单的就是我们在SQL语句中多了空格啥的,注释,或者是大小写,那么hashmap中的key和value对应都是不一样的,那么使用这个表的所有缓存查询将不再有效。。

缓存是对系统性能优化的重要手段。。。

主要是因为

1.MySQL缓存是基于Hashmap的:查询语句的字符大小写、空格或者注释的不同,缓存查询都会认为是不同的查询(因为他们的hash值会不同)

2.MySQL会对每条接收到的SELECT类型的查询进行hash计算,然后查找这个查询的缓存结果是否存在。虽然hash计算和查找的效率已经足够高了,一条查询语句所带来的开销可以忽略,但一旦涉及到高并发,有成千上万条查询语句时,hash计算和查找所带来的开销就必须重视了。。。

3.也就是修改某个表的内容时,之前缓存的内容对于现在的数据来说就是错误的数据,所以我们要将之前的缓存数据删除,来保证数据的正确性。当向某个表写入数据的时候,必须将和这个表相关的所有缓存设置为失效,如果缓存内容很多,则消耗也会很大,可能使系统僵死,因为这个操作是靠全局锁操作来保护的。。

总结

所以综合上述的内容,我们知道原因就是如果数据都要缓存起来,一旦这些数据都发生改变时,需要更改,我们又需要把这些缓存删除,数据量大时,就会很慢,效率低。

解决思路是:把一些容易变动的数据还是存在磁盘上,而不是在缓存中,这样就是省去了缓存改来改去的问题。。

解决方案:运用了新的数据库Redis 

介绍一下redis ----Redis是当前比较热门的NoSQL系统之一---,Redis数据都是缓存在计算机内存中。。用redis去存储热点数据,也是那些在数据库中大量的人去访问的数据。。

NoSQL,泛指非关系型的数据库区别于关系数据库,它们不保证关系数据的ACID特性。。。。

 

这里我们又要引入事务的概念,如下:

事务定义

事务是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务。

       理解一:

       事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。

       理解二:

       事务可以看做是一个大的操作,它由一系列操作组成,这些操作要么全部成功,要么全部失败。

 

ACID---事务的四大特性 ---原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

A:事务是一个不可分割的整体,事务中的操作要么全部成功,要么全部失败。。

举一个SQL事务的例子:
begin
transaction; update account set money = money-100 where name = '张三'; update account set money = money+100 where name = '李四'; commit transaction;
这里面的两个操作必须都成功或者都失败。。。。。

 

B:我们来看一段狗屁话:事务必须使数据库从一个一致性状态变换到另外一个一致性状态,能理解?????

个人认为就是执行这操作能够达到你的目的,然后不出错,在编写中体现在语法和实现是否可行,在功能上就是可以保证最后的结果和你的想法是一致的。。。

 

I:隔离性体现在:多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

 

D:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

也就是说,给你造成了影响,你一旦告诉我你操作成功了,是不可以不执行的。。。。

 

 

本地事务的实现:

begin transaction;

  //1.本地数据库操作:张三减少100元。

  //2.本地数据库操作:李四增加100元。

commit transaction;


分布式事务的实现:

begin transaction;

  //1.本地数据库操作:张三减少100元。

  //2.远程调用:让李四增加100元。

commit transaction; 

 文章来源地址https://www.toymoban.com/news/detail-419476.html

到了这里,关于Mysql8.0为什么取消了缓存查询的功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023-05-24:为什么要使用Redis做缓存?

    2023-05-24:为什么要使用Redis做缓存? 答案2023-05-24: 缓存的好处 买啤酒和喝啤酒的例子可以帮助我们理解缓存的好处。 假设你在超市里买了一箱啤酒,如果你需要每次想喝啤酒就去超市购买,无疑会浪费很多时间和精力。而如果你将一部分啤酒放在家中的冰箱里,每次想喝

    2024年02月06日
    浏览(42)
  • Spring 为什么要用三级缓存来解决循环依赖(AOP),二级缓存不行吗

    解决有代理对象的循环依赖不一定要三级缓存,用二级甚至一级也能解决,下面讨论下Spring为什么选择三级缓存这个方案。 Spring最开始是没有三级缓存的,后面版本因为引入了AOP,有了代理对象,又因为存在循环依赖,为了保证依赖注入过程注入的是代理对象,且不完全打破

    2024年04月26日
    浏览(39)
  • 并发术语——缓存行填充【结合Boolean为什么占32位解释】

    当多个线程同时访问不同的数据,但这些数据位于同一缓存行时,可能会导致性能下降。缓存行填充是一种优化技术,通过在数据之间插入一些无意义的填充数据,使它们位于不同的缓存行上,从而避免了不同线程同时修改同一缓存行的情况。 想象一下,你和你的朋友同时在

    2024年02月16日
    浏览(60)
  • [20231023]为什么刷新缓存后输出记录顺序发生变化6.txt

    [20231023]为什么刷新缓存后输出记录顺序发生变化6.txt --//前几天做了单表刷新缓存后输出记录顺序发生变化的情况,测试2个表的情况时遇到一个奇怪的现象。 --//我前面的测试18c,如果使用10046跟踪看不到我遇到的情况,我想使用strace跟踪,发现该机器配置使用asm,strace跟踪无法

    2024年02月06日
    浏览(50)
  • [20231013]为什么刷新缓存后输出记录顺序发生变化3.txt

    [20231013]为什么刷新缓存后输出记录顺序发生变化3.txt --//当年提的问题,链接http://blog.itpub.net/267265/viewspace-2763181/= [20210316]为什么刷新缓存后输出记录顺序发生变化.txt, --//正好别人问我,顺便我重复看了一下,顺便解答这个问题,实际上也许解答不对,许多行为我仅仅是猜测

    2024年02月08日
    浏览(46)
  • 大数据面试题:HBase为什么查询快

    面试题来源: 《大数据面试题 V4.0》 大数据面试题V3.0,523道题,679页,46w字 可回答:1)HBase为什么读快;2)HBase是根据rowkey查询,当数据量相当大的时候,是怎么读的很快的 参考答案: 1、基于LSM树的存储方式 HBase采用基于LSM树的存储方式,这种存储方式将数据分为内存和

    2024年02月12日
    浏览(45)
  • ElasticSearch(七):ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月08日
    浏览(81)
  • ElasticSearch第七讲:ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月19日
    浏览(52)
  • ElasticSearch第七讲 ES查询速度为什么那么快

    介绍给大家一个开源SpringCloud项目。整合了大部分开源中间件,详情信息可以查看文档: spring cloud开源组件开发 另外自己以后博客所讲解的代码内容,都会我的Git上同步(GitHub同步)GIT地址 ES使用的数据结构是倒排索引,在对搜索内容进行分词的时候,会根据搜索内容分词结

    2023年04月25日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包