您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
redis是否可以代替mysql进行数据存储?怎么样?
数据,数据库,缓存redis是否可以代替mysql进行数据存储?怎么样?
发布时间:2016-12-08加入收藏来源:互联网点击:
redis是否可以代替mysql进行数据存储?怎么样?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
Redis本身是支持数据持久化的,很多有些程序员都会觉得Redis应该可以替代MySQL,但是我们在使用一项技术的时候,不是看它能不能,而是要看它适合不适合;而在大部分场景下,Redis是无法替代MySQL的。
MySQL是关系型数据库,数据储存在磁盘上,数据的格式是我们熟知的二维表格的样式。关系型数据库具有很多强大的功能;大部分都支持SQL语句查询,对事务也有很好的支持。
Redis被称作非关系型数据库,属于内存数据库,数据都储存在内存中(Redis有RDB持久化策略),Redis支持的数据类型也比较多,比如字符串,HASH,List等。
MySQL和Redis没有竞争的关系,通常当并发访问量比较大的时候,特别是读操作很多,架构中可以引入Redis,帮助提升架构的整体性能,减少Mysql(或其他关系型数据库)的压力;
不是MySQL or Redis;而是MySQL + Redis ;
因为Redis的性能十分优越,可以支持每秒十几万此的读/写操作,并且它还支持持久化、集群部署、分布式、主从同步等,Redis在高并发的场景下数据的安全和一致性,所以它经常用于这些场景:
经常要被查询,但是CUD操作频率低的数据;比如数据字典,确定了之后很少被修改,是可以放到缓存中的;还有热点数据,查询极为频繁的数据,放到Redis中可以减少MySQL的压力;
经常被查询,但是实时性要求不高数据,比如购物网站的热销排行榜,定时统计一次后把统计结果放到Redis中提供查询(请不要每次都使用select top 10 from xxxx)。
缓存还可以做数据共享(Session共享),在分布式的架构中,把用户的Session数据放到Redis中。
高并发场景下的计数器,比如秒杀,把商品库存数量放到Redis中(秒杀的场景会比较复杂,Redis只是其中之一,例如如果请求超过某个数量的时候,多余的请求就会被限流);
因为Redis对高并发的支持和单线程机智,它也经常用作分布式锁;
Redis虽然功能强大、性能高效,但是也不是万能的,项目在引入Redis的时候,需要考虑的问题也比较多,并且会带来额外的开发和运维的工作量。
首先要判断数据是否适合缓存到Redis中,可以从几个方面考虑:数据会被经常查询么?命中率如何?写操作多么?数据大小?数据一致性如何保证?
我们经常采用这样的方式将数据刷到Redis中:查询的请求过来,现在Redis中查询,如果查询不到,就查询数据库拿到数据,再放到缓存中,这样第二次相同的查询请求过来,就可以直接在Redis中拿到数据;不过要注意【缓存穿透】的问题。
缓存的刷新会比较复杂,通常是修改完数据库之后,还需要对Redis中的数据进行操作;代码很简单,但是需要保证这两步为同一事务,或最终的事务一致性。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
回答于 2019-09-11 08:43:50
首先可以明确一点的是:Redis可以对MySQL中的部分数据进行存储,但Redis是无法代替MySQL来做数据存储的。Redis是非关系型数据库,MySQL是关系型数据库,听上去都是数据库,但两者的定位及应用场景是完全不同的。
数据库的目的及功能
数据库是专门用来存储数据的地方,可以理解成是一个电子档案馆。数据库需要具备最基本的新增、更新、查询、删除等操作,另外要在并发操作下保证数据的隔离性和一致性。
为什么会存在非关系型数据库(NoSQL)?
我们知道,传统的关系型数据库都是持久化存储的,数据是存放在硬盘中的。随着数据量的扩大,无论是写入还是查询操作都会产生IO开销。为了解决写读数据带来的IO瓶颈就出现了NoSQL技术。
Redis非关系型数据库的初衷及不足
Redis作为一种非关系型数据库的代表,它是基于内存的高性能Key-Value数据库。它支持每秒十几万次的读写操作,在读写性能上远远超过传统的关系型数据库。
Redis读写速度之所以这么快,是因为它将数据直接存放在内存中进行操作的。但是问题也来了,如果使用Redis来做数据存储,那内存开销是相当大的,出于成本考虑我们一般只使用Redis来存储热点数据。
另外一方面,虽然Redis也支持数据持久化,但是Redis的数据查询能力很差而且事务支持不完善。这样一比较,在数据存储能力上,Redis远远比不上MySQL这类关系型数据库。
综上,Redis一般都是配合MySQL来使用的,也无法代替MySQL来做数据持久存储。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!
回答于 2019-09-11 08:43:50
redis是不可以代替mysql进行数据存储的。redis和mysql不应该是竞争的关系,而是一对好基友。在实际工作中针对不同的场景,根据redis和mysql的各自优点采用不同的存储方案,合理的运用两者才能达到理想的效果。
NoSQL是“Not Only SQL”的意思,本质上是跟SQL形成互补关系的应用。
之所以有“redis是否可以代替mysql进行数据存储”这样的疑问,一定是有很多人认为redis是可以替代mysql的。我也不可否认,在特定的场景下或者说小型web服务的场景下,redis确实可以替代mysql做数据存储。但是这是有前提条件的,绝不能就可以说redis可以代替mysql进行数据存储的。
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
上一篇:暑假该怎么过?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |