您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
redis是否可以代替mysql进行数据存储?怎么样?
数据,数据库,缓存redis是否可以代替mysql进行数据存储?怎么样?
发布时间:2016-12-08加入收藏来源:互联网点击:
上面是redis的官网描述,redis是一个基于BSD协议开源的内存数据库,可用作数据库、缓存和消息队列,支持strings、hashes、lists、sets、sorted sets、bitmaps...等等数据结构。
每一种数据结构都有适合自己的应用场景,熟悉运用redis的各种数据结构,确实让各位有一种错觉“redis可以替代mysql”。
redis是基于内存存储的,采用IO单路复用模型。一个字就是快!对于并发访问量比较高的场景,使用redis可以避免流量直接冲向数据库层。
下面是个人使用redis和mysql的一些心得:
redis存业务数据,mysql存更细粒度或者基于数据模型对象的数据,redis是中间缓存层,mysql是数据存储层。
mysql中like/in/and/or/join等数据查询检索redis是无法支持的,通常情况下,我们会以mysql数据为基础数据,然后通过一系列的策略或者job跑出业务数据放到redis中存储,这是二者结合使用的典型应用场景。
redis对事务的支持还是比较简单的,所以很多复杂的数据落库场景很难用redis去支持,即便可以支持,那也需要花费高昂的代价,这个时候你突然想起来有一个mysql好像可以完美的支持事务。
大部分的业务请求基本上就到redis这一层就结束了,如果查不到数据那就查不到,不会再去数据库里面去查了,所以也不用考虑“缓存穿透”的问题。
redis中存储的大部分数据是不过期的,所以也没有“缓存雪崩”的问题。
redis能够让你的业务运行的更快,mysql能够让你的数据更安全。
那么问题来了,如何保证redis中存储的业务数据能够与mysql中存储的数据保持一致呢?所以我们需要做一套数据一致性的方案来保证这个前提。
综上,MySQL和redis各自有各自的应用场景,掌握好他们的特性,在不同的场景下应用最适合的存储方案才是编码之道。
欢迎大家积极参与讨论,一起学习,共同成长~
回答于 2019-09-11 08:43:50
基本上,作为一个靠开发维持生活的人,看到此类比较什么比什么好、什么能不能代替什么的问题,基本上会判定为是初学者的无聊撕逼,这种情况都是直接略过。但是,偶尔这些问题也会出自某些资深同行之口,那么可以分情况讨论。
如何回答这类问题,基本上取决于这个问题出现在什么场景下:
场景一:面试
可以考虑的回答:面试官你是认真的吗?贵司是真的考虑要这么干还是已经这么干了?我感觉我的职业生涯规划可能跟贵司的发展方向并不是非常匹配,所以,非常抱歉!我还有事,先走了。
场景二:技术分享
可以考虑拒绝回答。而且如果是公司内部的技术分享,基本上可以考虑找下家了。讨论这种问题的公司要么是太牛逼而毫无生存压力,要么是太垃圾而毫无生存机会。前者的可能性不会太大。所以,走为上策吧!
在各位大佬喷我之前,请先让我把话说完。
这个问题如果不是那么认真地提出来的话,我还有可能会假装认真地回答。
如果真有人认真地提出这个问题,我只能认为此人对待技术本身有点太不认真了。
当然,纯属个人看法。
好了,各位请随便喷吧!反正我也不会回来看。
回答于 2019-09-11 08:43:50
两者适用于不同的场景,谁也替代不了谁
redis主要用于热点数据的快速查询,数据要符合“查多改少”的特点,事务性差。
mysql存储的结构化数据,强调数据的一致性,需要数据高度一致的场景还是要关系型数据库出马,电信运营商、金融等行业oracle还是主流解决方案。
这两种数据库,在检索方式,存储容量上,也是不一样的。
MySQL是关系型数据库,可以通过多字段的检索来确定数据,而且,基于硬盘的存储,容量会大得多。
而Redis是kv数据库,虽然支持多种数据结构,但是本质上,依然是kv。它的高效检索是依赖于数据缓存在内存当中的。不能进行多条件联合检索,也不支持like等检索。
存在即合理,redis和关系型数据库是共生关系
大型系统都会同时看到redis、关系型数据库的身影,通过相互配合解决系统的高并发和数据的一致性。当然这里面要考虑缓存击穿、缓存雪崩、缓存和数据库的一致性等问题。
总之,两者是相辅相成的,欢迎探讨。
回答于 2019-09-11 08:43:50
Redis虽然支持持久化,但是对比MySQL有两个严重的缺陷:
1.不支持ACID事务
2.持久化的数据不记录操作的时间戳,误操作后无法回滚
如果对这两点不在意,使用redis存储数据也无所谓~
回答于 2019-09-11 08:43:50
Mysql是关系型数据库,而NOSQL譬如redis通常都是弱关系,如果你的数据相互之间关系非常弱,哪自然可以使用redis,反之如果你是强关系,使用redis则需要自己实现上层的数据模型关系,祝你好运
上一篇:暑假该怎么过?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |