数据多的时候为什么要使用redis而不用mysql?
通常来说,当数据多、并发量大的时候,架构中可以引入Redis,帮助提升架构的整体性能,减少Mysql(或其他数据库)的压力,但不是使用Redis,就不用MySQL。
因为Redis的性能十分优越,可以支持每秒十几万此的读/写操作,并且它还支持持久化、集群部署、分布式、主从同步等,Redis在高并发的场景下数据的安全和一致性,所以它经常用于两个场景:
缓存
经常会被查询,但是不经常被修改或者删除的数据;比如数据字典,业务数据中的热点数据;这样不仅提升查询效率,还可以减少数据库的压力;
经常被查询,实时性要求不高数据,比如网站的最新列表、排行榜之类的数据,只需要定时统计一次,然后把统计结果放到Redis中提供查询(请不要使用select top 10 from xxxx)。缓存可以方便数据共享,比如我先用电脑网页打开X东,选了两件商品放到购物车里面,再登录手机APP,也是可以看到购物车里面的商品的。
判断数据是否适合缓存到Redis中,可以从几个方面考虑:会经常查询么?命中率如何?写操作多么?数据大小?
我们经常采用这样的方式将数据刷到Redis中:查询的请求过来,现在Redis中查询,如果查询不到,就查询数据库拿到数据,再放到缓存中,这样第二次相同的查询请求过来,就可以直接在Redis中拿到数据;不过要注意【缓存穿透】的问题。
缓存的刷新会比较复杂,通常是修改完数据库之后,还需要对Redis中的数据进行操作;代码很简单,但是需要保证这两步为同一事务,或最终的事务一致性。
高速读写
常见的就是计数器,比如一篇文章的阅读量,不可能每一次阅读就在数据库里面update一次。
高并发的场景很适合使用Redis,比如双11秒杀,库存一共就一千件,到了秒杀的时间,通常会在极为短暂的时间内,有数万级的请求达到服务器,如果使用数据库的话,很可能在这一瞬间造成数据库的崩溃,所以通常会使用Redis(秒杀的场景会比较复杂,Redis只是其中之一,例如如果请求超过某个数量的时候,多余的请求就会被限流)。
这种高并发的场景,是当请求达到服务器的时候,直接在Redis上读写,请求不会访问到数据库;程序会在合适的时间,比如一千件库存都被秒杀,再将数据批量写到数据库中。
所以通常来说,在必要的时候引入Redis,可以减少MySQL(或其他)数据库的压力,两者不是替代的关系 。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
Redis和MySQL的应用场景是不同的。
通常来说,没有说用Redis就不用MySQL的这种情况。
因为Redis是一种非关系型数据库(NoSQL),而MySQL是一种关系型数据库。
和Redis同类的数据库还有MongoDB和Memchache(其实并没有持久化数据)
那关系型数据库现在常用的一般有MySQL,SQL Server,Oracle。
我们先来了解一下关系型数据库和非关系型数据库的区别吧。 1.存储方式
关系型数据库是表格式的,因此存储在表的行和列中。他们之间很容易关联协作存储,提取数据很方便。而Nosql数据库则与其相反,他是大块的组合在一起。通常存储在数据集中,就像文档、键值对或者图结构。2.存储结构
关系型数据库对应的是结构化数据,数据表都预先定义了结构(列的定义),结构描述了数据的形式和内容。这一点对数据建模至关重要,虽然预定义结构带来了可靠性和稳定性,但是修改这些数据比较困难。而Nosql数据库基于动态结构,使用与非结构化数据。因为Nosql数据库是动态结构,可以很容易适应数据类型和结构的变化。3.存储规范
关系型数据库的数据存储为了更高的规范性,把数据分割为最小的关系表以避免重复,获得精简的空间利用。虽然管理起来很清晰,但是单个操作设计到多张表的时候,数据管理就显得有点麻烦。而Nosql数据存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储成了一个整体,这样整块数据更加便于读写4.存储扩展
这可能是两者之间最大的区别,关系型数据库是纵向扩展,也就是说想要提高处理能力,要使用速度更快的计算机。因为数据存储在关系表中,操作的性能瓶颈可能涉及到多个表,需要通过提升计算机性能来克服。虽然有很大的扩展空间,但是最终会达到纵向扩展的上限。而Nosql数据库是横向扩展的,它的存储天然就是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载。5.查询方式
关系型数据库通过结构化查询语言来操作数据库(就是我们通常说的SQL)。SQL支持数据库CURD操作的功能非常强大,是业界的标准用法。而Nosql查询以块为单元操作数据,使用的是非结构化查询语言(UnQl),它是没有标准的。关系型数据库表中主键的概念对应Nosql中存储文档的ID。关系型数据库使用预定义优化方式(比如索引)来加快查询操作,而Nosql更简单更精确的数据访问模式。6.事务
关系型数据库遵循ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),而Nosql数据库遵循BASE原则(基本可用(Basically Availble)、软/柔性事务(Soft-state )、最终一致性(Eventual Consistency))。由于关系型数据库的数据强一致性,所以对事务的支持很好。关系型数据库支持对事务原子性细粒度控制,并且易于回滚事务。而Nosql数据库是在CAP(一致性、可用性、分区容忍度)中任选两项,因为基于节点的分布式系统中,很难全部满足,所以对事务的支持不是很好,虽然也可以使用事务,但是并不是Nosql的闪光点。7.性能
关系型数据库为了维护数据的一致性付出了巨大的代价,读写性能比较差。在面对高并发读写性能非常差,面对海量数据的时候效率非常低。而Nosql存储的格式都是key-value类型的,并且存储在内存中,非常容易存储,而且对于数据的 一致性是 弱要求。Nosql无需sql的解析,提高了读写性能。8.授权方式
大多数的关系型数据库都是付费的并且价格昂贵,成本较大(MySQL是开源的,所以应用的场景最多),而Nosql数据库通常都是开源的。
所以,在实际的应用环境中,我们一般会使用MySQL存储我们的业务过程中的数据,因为这些数据之间的关系比较复杂,我们常常会需要在查询一个表的数据时候,将其他关系表的数据查询出来,例如,查询某个用户的订单,那至少是需要用户表和订单表的数据。
查询某个商品的销售数据,那可能就会需要用户表,订单表,订单明细表,商品表等等。
而在这样的使用场景中,我们使用Redis来存储的话,也就是KeyValue形式存储的话,其实并不能满足我们的需要。
即使Redis的读取效率再高,我们也没法用。
但,对于某些没有关联少,且需要高频率读写,我们使用Redis就能够很好的提高整个体统的并发能力。
例如商品的库存信息,我们虽然在MySQL中会有这样的字段,但是我们并不想MySQL的数据库被高频的读写,因为使用这样会导致我的商品表或者库存表IO非常高,从而影响整个体统的效率。
所以,对于这样的数据,且有没有什么复杂逻辑关系(就只是隶属于SKU)的数据,我们就可以放在Redis里面,下单直接在Redis中减掉库存,这样,我们的订单的并发能力就能够提高了。
个人觉得应该站出来更正一下,相反的数据量大,更不应该用redis。
为什么?
因为redis是内存型数据库啊,是放在内存里的。
设想一下,假如你的电脑100G的资料,都用redis来存储,那么你需要100G以上的内存!使用场景
缓存
Redis最明显的用例之一是将其用作缓存。只是保存热数据,或者具有过期的cache。
例如facebook,使用Memcached来作为其会话缓存。faceboo使用memcached来缓解数据库负,使用超过800台服务器为用户提供超过28 TB的内存。
队列
排行榜/计数
Pub 发布/ Sub订阅
总之,没有见过哪个大公司数据量大了,换掉mysql用redis的。
欢迎关注,解锁更多,同步进步!
题主你错了,不是用redis代替MySQL,而是引入redis来优化。
BAT里越来越多的项目组已经采用了redis+MySQL的架构来开发平台工具。
如题主所说,当数据多的时候,MySQL的查询效率会大打折扣。我们通常默认如果查询的字段包含索引的话,返回是毫秒级别的。但是在实际工作中,我曾经遇到过一张包含10个字段的表,1800万+条数据,当某种场景下,我们不得不根据一个未加索引的字段进行精确查询的时候,单条sql语句的执行时长有时能够达到2min以上,就更别提如果用like这种模糊查询的话,其效率将会多么低下。
我们最开始是希望能够通过增加索引的方式解决,但是面对千万级别的数据量,我们也不敢贸然加索引,因为一旦数据库hang住,期间的所有数据库写入请求都会被放到等待队列中,如果请求是通过http请求发过来的,很有可能导致服务发生分钟级别的超时不响应。
经过一番调研,最终敲定的解决方案是引入redis作为缓存。redis具有运行效率高,数据查询速度快,支持多种存储类型以及事务等优势,我们把经常读取,而不经常改动的数据放入redis中,服务器读取这类数据的时候时候,直接与redis通信,极大的缓解了MySQL的压力。
然而,我在上面也说了,是redis+MySQL结合的方式,而不是替代。原因就是redis虽然读写很快,但是不适合做数据持久层,主要原因是使用redis做数据落盘是要以效率作为代价的,即每隔制定的时间,redis就要去进行数据备份/落盘,这对于单线程的它来说,势必会因"分心"而影响效率,结果得不偿失。
以上就是我的浅见,欢迎各位在下方点赞,留言。
我是苏苏思量,来自BAT的java开发工程师,每天都会分享科技类见闻,欢迎关注我,与我共同进步。
楼主你好,首先纠正下,数据多并不是一定就用Redis,Redis归属于NoSQL数据库中,其特点拥有高性能读写数据速度,主要解决业务效率瓶颈。下面就详细说下Redis的相比MySQL优点。(关于Redis详细了解参见我近期文章:https://www.toutiao.com/i6543810796214813187/ )
读写异常快
Redis非常快,每秒可执行大约10万次的读写速度。
丰富的数据类型
Redis支持丰富的数据类型,有二进制字符串、列表、集合、排序集和散列等等。这使得Redis很容易被用来解决各种问题,因为我们知道哪些问题可以更好使用地哪些数据类型来处理解决。原子性
Redis的所有操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新的值。丰富实用工具
Redis是一个多实用工具,可用于多种用例,如:缓存,消息队列(发布/订阅),通知,key值过期等等。支持异机主从复制
Redis支持主从复制的配置,它可以实现主服务器的完全拷贝。
以上为开发者青睐Redis的主要几个可取之处。但是,请注意实际生产环境中企业都是结合Redis和MySQL的特定进行不同应用场景的取舍。如缓存——热数据、计数器、消息队列(与ActiveMQ,RocketMQ等工具类似)、位操作(大数据处理)、分布式锁与单线程机制、最新列表(如新闻列表页面最新的新闻列表)以及排行榜等等 可以看见Redis大显身手的场景。可是对于严谨的数据准确度和复杂的关系型应用MySQL等关系型数据库依然不可替。
更多技术了解,关注小伍
web应用中一般采用MySQL+Redis的方式,web应用每次先访问Redis,如果没有找到数据,才去访问MySQL。
如何使用redis和mysql要根据具体业务场景去选型。redis和mysql不是一个类型的产品,应用场景也不太一样,还是要看你的需求来决定。本质区别
1、mysql:数据放在磁盘 redis:数据放在内存。
2、redis适合放一些频繁使用,比较热的数据,因为是放在内存中,读写速度都非常快,一般会应用在下面一些场景。排行榜、计数器、消息队列推送、好友关注、粉丝。
首先要知道mysql存储在磁盘里,redis存储在内存里,redis既可以用来做持久存储,也可以做缓存,而目前大多数公司的存储都是mysql + redis,mysql作为主存储,redis作为辅助存储被用作缓存,加快访问读取的速度,提高性能。
使用场景区别
1、mysql支持sql查询,可以实现一些关联的查询以及统计;
2、redis对内存要求比较高,在有限的条件下不能把所有数据都放在redis;
3、mysql偏向于存数据,redis偏向于快速取数据,但redis查询复杂的表关系时不如mysql,所以可以把热门的数据放redis,mysql存基本数据。
mysql的运行机制
mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库。第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复地访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。
Redis持久化
由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。
如有不同观点,欢迎发表评论。如果喜欢我的回答,欢迎"点赞、分享"。
数据量多少绝对不是选择redis和mysql的准则,因为无论是mysql和redis都可以集群扩展,约束它们的只是硬件(即你有没有那么多钱搭建上千个组成的集群),我个人觉得数据读取的快慢可能是选择的标准之一,另外工作中往往是两者同是使用,因为mysql存储在硬盘,做持久化存储,而redis存储在内存中做缓存提升效率。
Redis和MySQL的应用场景是不同的。
通常来说,没有说用Redis就不用MySQL的这种情况。
因为Redis是一种非关系型数据库(NoSQL),而MySQL是一种关系型数据库。
和Redis同类的数据库还有MongoDB和Memchache(其实并没有持久化数据)
那关系型数据库现在常用的一般有MySQL,SQL Server,Oracle。
我们先来了解一下关系型数据库和非关系型数据库的区别吧。
存储方式
关系型数据库是表格式的,因此存储在表的行和列中。他们之间很容易关联协作存储,提取数据很方便。而Nosql数据库则与其相反,他是大块的组合在一起。通常存储在数据集中,就像文档、键值对或者图结构;
关系型数据库为了维护数据的一致性付出了巨大的代价,读写性能比较差。在面对高并发读写性能非常差,面对海量数据的时候效率非常低。而Nosql存储的格式都是key-value类型的,并且存储在内存中,非常容易存储,而且对于数据的 一致性是 弱要求。Nosql无需sql的解析,提高了读写性能;所以,在实际的应用环境中,我们一般会使用MySQL存储我们的业务过程中的数据,因为这些数据之间的关系比较复杂,我们常常会需要在查询一个表的数据时候,将其他关系表的数据查询出来,例如,查询某个用户的订单,那至少是需要用户表和订单表的数据。
查询某个商品的销售数据,那可能就会需要用户表,订单表,订单明细表,商品表等等。
而在这样的使用场景中,我们使用Redis来存储的话,也就是KeyValue形式存储的话,其实并不能满足我们的需要。
即使Redis的读取效率再高,我们也没法用。
但,对于某些没有关联少,且需要高频率读写,我们使用Redis就能够很好的提高整个体统的并发能力。
例如商品的库存信息,我们虽然在MySQL中会有这样的字段,但是我们并不想MySQL的数据库被高频的读写,因为使用这样会导致我的商品表或者库存表IO非常高,从而影响整个体统的效率。
所以,对于这样的数据,且有没有什么复杂逻辑关系(就只是隶属于SKU)的数据,我们就可以放在Redis里面,下单直接在Redis中减掉库存,这样,我们的订单的并发能力就能够提高了。
redis是放在内存的~!
没有说不可以,就怕公司架构师、领导、高管有偏见,怕丢数据、不安全,其实技术牛的公司,完全可以不用MySQL
三鲜汤是哪三样,怎么做?三鲜汤貌似最常见的家常菜了,不过就像嘿!蛋炒饭最简单也最困难一样呼呼哈嘿!从简单的虾皮葱花紫菜冲开水,到干贝火腿鲍翅吊鸡汤,一家一个做法,一个地方一个习惯,大江南北所谓鲜味食材尽数
为什么华为手机不降价还涨价了?这是什么情况?芯片少了,产能不足。不仅手机。像某些新能源汽车,也因缺少芯片产能不足等情况,现在如此大的市场需求下,订车后几个月才能到货没关注过这些问题,反正这些东西,要买才去看看大笑,不管降价涨
危险!武汉粗心家长忘记取出保温杯里的干燥剂,冲泡奶粉给新生女婴喝下刚出生的女婴突然连续呕吐口唇发紫,医生紧急排查原因发现,竟是粗心家属忘记取出新保温杯里的干燥剂,宝宝误喝泡了干燥剂的水冲泡的奶粉所致。经过产科儿科的联合救治,宝宝化险为夷。真的太险
医院儿科显示屏走红,小患者名字日渐任性,护士明白老师难处了头条创作挑战赛随着时代发展,家长给学生取名带有鲜明的时代特征,80后家长取名还比较中规中矩,而现在年轻家长很多都是90后,他们给学生取名更讲究个性有趣,力求一名惊人,没有想到名字对
80岁还是小又就好了陈小齐又又快12岁了,但妈妈还喊他小又。小又当儿童当得真是好。吃喝拉撒睡非常省心,节约大人的体力。从婴儿时期就是如此。如果是古代,一定乐意立他为太子。但家里并没有皇位要继承。公共场
盐酸阿比多尔胶囊用于儿童流感治疗有据可依本文由四川省人民医院儿科副主任医师杨文青医生原创撰稿根据疾控部门流感监测,当前我国流感病毒活动水平有所增,多以甲型流感为主,关于甲流的话题也频频登上热搜。儿童是流感流行期间的脆弱人
中疾控提醒冬春季预防流行性脑膜炎很重要宝爸宝妈请注意!冬春季预防流行性脑膜炎很重要。流行性脑膜炎,顾名思义是一种以脑膜炎为主的疾病,通常称作流脑。虽然流脑和流感都是呼吸道传染病,都是在冬春季节高发,但本质不同,流脑是细
为什么在头条上感觉到看到的女排球迷全是江苏球迷和天津球迷呢?因为这两支队伍都是当今国内排坛劲旅,两队经常在全运会,女排联赛,冠亚军决赛中相遇。两队都拥有世界级球星,江苏有张常宁,龚翔宇,奥运会冠军。天津有李赢莹,王媛媛,姚迪世界杯冠军。因此
阔腿裤搭配什么样的鞋子好看?阔腿裤是一件非常百搭的单品,无论是服装搭配风格还是其他单品与之相搭配都很少会出错。但是有一个前提,只要你选对了阔腿裤的款式。百搭款的阔腿裤应该是指九分或是七分这种露出脚踝的阔腿裤,
HudaBeauty这个品牌怎么样?有哪些东西值得买?HUDABEAUTY是一位美妆KOL自创的同名品牌,创始人HudaKattan是中东人,因为有一门化妆的好手艺于是来到洛杉矶当一位专业彩妆师。2000年,美妆博主还没有现在这么多如
直播对社会有贡献么?越来越多人入行,对社会有什么影响?直播带货营销,是現代科技革命兴起的一种快信快捷快达的一种销售方式。是历史发展的必然趋势。从目前来看,直播带货营销充分发挥了社会经济效益发展。一是名人主播名星网红直播带货。如央視主播
亚历山大谈常规时间最后一攻我相信曼恩北京时间12月24日,雷霆主场迎战鹈鹕。全场战罢,鹈鹕加时128125力克雷霆。赛后,雷霆后卫谢伊吉尔杰斯亚历山大接受采访时,谈及球队在常规时间最后一攻的选择。我本可以更努力地对抗
央视12月25日体育频道节目预告CCTV5体育频道0005实况录像2022年世界艺术体操锦标赛个人单项决赛2(53分钟版)0106实况录像(奥林匹克)2022年卡塔尔世界杯半决赛阿根廷队克罗地亚队0236实况录像
珍惜时间我国著名作家鲁迅说过时间,每天得到的都是二十四小时,可是一天的时间能给勤勉的人带来只智慧和力量,给懒散的人只留下一片悔恨。是呀,时间是多么珍贵!岳飞曾说过若等闲,白了少年头,空悲切
面对时间的态度人生就是,踏上时间之矢,从生到死。必须意识到,人的时间是有限的,时间是有方向的。时间在方向上,可以分为过去现在未来。对这三个时间段的态度,将直接影响我们的一生。人的行为受环境影响,
20世纪末最后的美少女广末凉子42岁素颜仍然美!童颜保养靠这几招初恋带动日系透明感美女复古风潮,被誉为20世纪末最后的美少女的广末凉子睽违22年再推写真集CestlaVie,今年已经42岁的她招牌笑容依旧素颜仍然美翻天。广末凉子16岁甫出道就成
厌女母亲与女儿的厌女症母亲通过厌恶女儿的女人味而在女儿心中根植自我厌恶厌恶的意识,女儿则通过目睹母亲的不满足不如意而轻蔑母亲。从小母亲教育女孩子的都是她们在男权社会下的生存法则,但是女孩子看多了母亲在这
突然发现自己妈妈是假的怎么办自己的生活习性妈妈全然不了解很怕突然发现自己妈妈是假的怎么办自己的生活习性妈妈全然不了解像是变了一个人一样我叫小雪,出生在一个普通家庭。我是独生子女,爸妈对我还算宠爱。但就在前几天,我发现眼前这个跟我朝夕相处多年
盘点妈妈应该停止哺乳的五种情况大家都知道哺乳是妈妈的天性,但是并不是每一个妈妈都适合给宝宝哺乳,那么妈妈在什么情况下应该停止给宝宝哺乳呢?接下来我就给大家盘点一下,发生以下状况的时候,应该立即停止哺乳。(1)妈
科普摇一摇,晶体婴儿也会长得快新华社东京12月24日电(记者钱铮)轻轻摇晃或搅拌食盐浓溶液,细小的食盐晶体就会出现。古人制盐时就注意到了这种现象,日本研究人员借助现代科技解释了其中原理,即摇一摇这样的机械刺激如
国内最不能错过的博物馆之一!打卡三星堆博物馆,保姆级攻略来了四川德阳旅行,又怎能不去一次三星堆博物馆?!这是我来德阳最向往的一个地方。沉睡三千年,一醒惊天下!三星堆博物馆是国家一级博物馆,绝对是国内最不能错过的博物馆之一,而且一定要去实地感
全省第二!嘉兴新创建省级工业互联网平台22家来源嘉兴日报嘉兴在线作为数字新基建,工业互联网是制造业数字化转型的关键支撑,也是企业通过数字技术助力决策提质增效的有效举措。今天,记者从市经信局获悉,今年嘉兴新创建省级工业互联网平