使用redis作为缓存,数据还需要存入数据库中吗?
https://blog.csdn.net/wypersist/article/details/79955704
使用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://www.zhihu.com/question/21419897
使用redis作为缓存,数据还需要存入数据库中吗?相关推荐
- 将页面数据转json存入数据库
SSM+layui前台页面将数据转json存入数据库 最近做了一个添加的功能,页面中的字段并不是和数据库变字段一 一对应的,页面中好几个字段的值要把它们转为json,然后存入数据库表中的一个字段. 1 ...
- redis和sqlserver数据同步_SQLServer数据库之redis数据库的数据导入到SQLServer数据库中...
本文主要向大家介绍了SQLServer数据库之redis数据库的数据导入到SQLServer数据库中,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. #!/usr/bin/ ...
- Python爬虫获取简书的用户、文章、评论、图片等数据,并存入数据库
Python爬虫获取简书的用户.文章.评论.图片等数据,并存入数据库 爬虫定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维 ...
- 用纯ASP代码实现图片上传并存入数据库中
用纯ASP代码实现图片上传并存入数据库中 热 ★ 用纯ASP代码实现图片上传并存入数据库中 用ASP编写网站应用程序时间长了,难免会遇到各式各样的问题,其中关于如何上传文件到服务器恐 ...
- php 数组存入mysql_PHP将数组存入数据库中的四种方式
1.implode()和explode()方式 2.print_r()和自定义函数方式 3.serialize()和unserialize()方式 4.json_encode()和json_decod ...
- Pandas的学习(读取mongodb数据库集合到DataFrame,将DataFrame类型数据保存到mongodb数据库中)
1.读取mongodb数据库集合到DataFrame import pymongo import pandas as pdclient = pymongo.MongoClient("数据库连 ...
- PHP将数组存入数据库中的四种方式
最近突然遇到了一个问题,如何用PHP将数组存入到数据库中,经过自己的多方查找和研究,总结了以下四种方法: 1.implode()和explode()方式 2.print_r()和自定义函数方式 3.s ...
- mongoose换成mysql_如何将MongoDB数据库的数据迁移到MySQL数据库中
FAQ v2.0终于上线了,断断续续忙了有2个多月.这个项目是我实践的第一个全栈的项目,从需求(后期有产品经理介入)到架构,再到设计(有征询设计师的意见).构建(前端.后台.数据库.服务器部署),也是 ...
- sql——如何将html代码存入数据库中
要注意两点: 1.在SQL语句中,如果要存入单引号,应该使用两个单引号来代替一个单引号 如: insert into article(title,category,content,author_acc ...
- Softing dataFEED OPC Suite将西门子PLC数据存储到Oracle数据库中
一 背景 现代工业产品不仅生产批量大,而且过程自动化程度高,这对于用户追溯产品设计与制造过程中产生的数据而言,无疑是个新的挑战.与此同时,制造商们对产品制造过程中产生的大量工艺数据也愈发重视,并不断寻 ...
最新文章
- 分析解决Java运行时异常
- LintCode 1692. 组队打怪(田忌赛马,二分查找)
- CentOS 7 上安装 MySQL5.7
- Hadoop之内存问题
- Spark内核解析之七:核心组件解析
- 华为发布会2019鸿蒙,鸿蒙,来了!华为正式发布鸿蒙OS操作系统
- AD软件使用开发步骤思路与实践
- 【白皮书】以太坊 (Ethereum ):下一代智能合约和去中心化应用平台
- LeetCode93—Restore IP Addresses
- 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
- python虚拟数字人直播间带货
- 甘特图制定项目计划,提高项目管理效率
- 做DSP最应该懂得157个问题
- echarts,x轴y轴,配置参数详情
- 软件和硬件的质量曲线
- 到底什么是响应式布局,响应式布局如何去写
- PRML 1.1 多项式曲线拟合
- spring邮件发送带抄送和附件
- 瑞昱RTL9210B固件升级方案,绿联M.2双协议硬盘盒升级固件教程
- 这两天猎头的电话有点多
热门文章
- 15种音乐效果器合集 ArturiaFX Collection 2021.1 mac版
- mac Desktop 在Terminal 无法访问,错误提示:ls: .: Operation not permitted
- 用FL Studio制作反向人声音效(Vocal Chops)
- 软件测试就业必备知识点自学软件测试-Dotest-2019
- 1-Java基础语法-Java初识
- 利用js解析php的表单数据
- App架构设计经验谈:服务端接口的设计
- docker swarm集群
- CentOS 6.X配置 NFS以及启动和mount挂载
- 使用火狐解决网站图片不能复制下载的问题