radis简单理解

radis简单理解radis简单理解

大家好,又见面了,我是你们的朋友全栈君。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)

 通过redis缓存数据。(目的不是加快查询的速度,而是减少数据库的负担)  

1redis只是缓存,不是数据库如mysql,所以redis中有的数据库,mysql中一定有。

2用户请求先去请求redis,如果没有,再去数据库中去读取。

3redis中缓存一些请求量比较大的数据(这些缓存数据,mysql中一定也是有的),没必要所有数据都缓存到redis中。

5之所以从缓存中拿数据会快,是因为缓存的数据存在于内存中,不像mysql的数据是存在磁盘上的,即不用经过从磁盘加载到内存这个过程(这个过程是非常耗时和低效的),直接从内存获取数据。

6当redis缓存崩溃的时候,那么不是海量的请求都去访问数据库了?数据库能抗住吗?

1)收下要分析,当成千亿个请求同时访问过来,数据库为什么会扛不住?

①超大量的并发,数据库扛不住。

举个例子就明白了。

10000万个plsql客户端,同时访问Oracle进行数据库查询、写入等操作,数据库肯定吃不消。

参考:http://blog.csdn.net/ideality_hunter/article/details/77621802

从这个角度来说,redis并不能帮什么忙。

②数据库存在低速设备上,每次访问数据库,都要经过io,即从磁盘调入内存的过程。这个才是使用redis等缓存机制的原因。

2)当redis奔溃了,成千亿个请求同时访问过来,数据库扛不住,该怎么办?

=====解答某些同学的提问,核心是,redis中存的数据,数据库中是否还要存的问题。

我的观点:

1前提:mysql中存all即所有的数据(redis只是缓存的mysql中的部分数据),redis中缓存mysql中存在的访问量超级大的数据。

2如果redis中没有我要的数据,那么其实这些请求并发量没有那么大(为什么?参看上面的前提),那么就去mysql访问,肯定并没有太大压力。

反方观点1:既然redis中存了,数据库为什么还要存呢?所以他们认为数据存入redis就不用存数据库了。

反方观点2:如果redis崩溃了,缓存丢失了,不是所有的请求都压到mysql了?mysql数据是存在硬盘上的,读取是低速的,mysql肯定扛不住。

我的解答:

解答反方观点1:这个不用争,redis是当缓存用的,不是当数据库用的。

解答反方观点2:我承认mysql这种情况下肯定扛不住,但是你全把数据放入redis风险不就更大了吗?因为我虽然慢,但是最起码没有丢失,但是你redis是放入内存的,所有数据都丢失了?

反方观点3:我的redis数据并没有丢啊,redis有灾备机制,因为redis会将其中的数据实时地存入磁盘,这样就不怕丢了。

解答反方观点3:那这不是回到我的思路上了吗?你存磁盘其实跟存数据库不是一个道理吗?方正都是存磁盘?你怎么能将99G或者更大的数据快速的从磁盘加载到redis即内存中呢?不可能的。

所以,咱们两种方式其实都是一样的,都解决不了,如果redis即内存崩溃了,然后重启redis之后,怎么快速的响应千万甚至过亿的请求。

我的方式:redis坏了,从数据库读取。

你的方式:redis坏了,从磁盘慢慢地恢复到redis,然后从redis读取。

反方观点5:如果redis崩溃了,我不光可以放入磁盘一种方式,我还可以放入所在集群中的其他机器如B的内存中啊,这样如果机器A的redis崩溃了,只需要去访问机器B的内存中去取所需要的内容即可。

解答反方观点5:①这种方式我没研究过,集群,竟然内存也是共享的?②就算你说的是对的,我的那种方式,也完全可以融入你的机制,如果redis崩溃了,也将数据转移到集群中的B的内存中。这样的话,咱俩的方式其实就一样了。

反方观点6:你如果也采取我的那种方式,将数据转移到集群中的其他机器的内存中,那么为什么还要再存入mysql中一份呢,完全没有必要,因为对于这部分数据,根本不会去mysql中去读取的,一直是在redis中读取就行了。

解答反方观点6:你是对的,我无言以对。但是我质疑你说的将数据转移到集群中其他机器上这种方式的可行性。

我对反方观点5的质疑:照你你这种机制,其实就可以不用硬盘了,你用内存就行了,你可以把所有的数据都存入redis了,还将用户等信息放入mysql中干什么?

反方解答我的质疑:mysql中存的是不经常访问的事情。

总结:

的确, 如果可以实现A机器崩溃时可以将redis中的数据转移到集群中机器B的内存中(我对这种方式的可行性是质疑的),那么,数据存入redis就可以不用存入mysql,但是这就颠覆了我及常人对缓存的理解,这其实就不是什么缓存,而是直接将redis当数据库来用了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106205.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 13个Python GUI库

    13个Python GUI库PythonPython是一门高级编程语言。它用于通用编程。Python语言由GuidovanRossum创建,并于1991年首次发布。Python的设计哲学着重于代码的可读性。因此空白在Python中具有重要的意义。Python提供了允许在小规模和大规模上编程的设计理念,而且具有一个非常庞大的标准库。Python使用动态类型系统,并具有自动内存管理功能。更多Python视…

    2022年7月20日
    14
  • SpringCloud 之 Zuul 网关搭建及配置

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:Anakki blog.csdn.net/qq_29519041/article/details/103654…

    2021年6月27日
    81
  • mac goland2022永久激活码_最新在线免费激活[通俗易懂]

    (mac goland2022永久激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1T…

    2022年3月31日
    709
  • 测试用例的设计方法:等价类划分法[通俗易懂]

    测试用例的设计方法:等价类划分法[通俗易懂]欢迎大家关注我的个人公众号:小朱谈软件测试,全是干货哦。测试用例的设计方法对测试人员来说,非常重要,在工作中,确实会用到。测试用例设计的越全面,线上问题肯定越少,合理地运用这些设计方法,可以减少冗余用例,提高测试效率和覆盖率。常见测试用例的设计方法有八种,下图中标红的是需要掌握的。优先级从等价类划分法,边界值分析法方向排序。每种设计方法,我都会分析,今天我们先一起看看什么是等价类划分法。等价类划分法:官方定义:将程序所有可能的输入数据…

    2022年10月18日
    4
  • [Java web]– spring3(2)「建议收藏」

    [Java web]– spring3(2)「建议收藏」1.复杂对象的创建:不能直接new的对象,需要一个相对复杂的创建过程。  :FactoryBean===============================================================================================2.复杂对象的创建流程:  2.1 定义类:implements FactoryBean&l…

    2025年9月29日
    6
  • 5个强大的Java分布式缓存框架_5个Java分布式缓存框架「建议收藏」

    5个强大的Java分布式缓存框架_5个Java分布式缓存框架「建议收藏」5个强大的Java分布式缓存框架1、Ehcache–Java分布式缓存框架Ehcache是一个Java实现的开源分布式缓存框架,EhCache可以有效地减轻数据库的负载,可以让数据保存在不同服务器的内存中,在需要数据的时候可以快速存取。同时EhCache扩展非常简单,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。官方网…

    2022年5月24日
    139

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号