如何使用redis缓存加索引处理数据库百万级并发

如何使用redis缓存加索引处理数据库百万级并发,第1张

1总的老说,优化方案中只有两种,一种是给查询的字段加组合索引。另一种是给在用户和数据库中增加缓存

2添加索引方案:面对1~2千的并发是没有压力的,在往上则限制的瓶颈就是数据库最大连接数了,在上面中我用show global status like 'Max_used_connections’查看数据库可以知道数据库最大响应连接数是5700多,超过这个数tomcat直接报错连接被拒绝或者连接已经失效

3缓存方案:在上面的测试可以知道,要是我们事先把数据库的千万条数据同步到redis缓存中,瓶颈就是我们的设备硬件性能了,假如我们的主机有几百个核心CPU,就算是千万级的并发下也可以完全无压力,带个用户很好的。

4索引+缓存方案:缓存事先没有要查询的数据,在一万的并发下测试数据库毫无压力,程序先通过查缓存再查数据库大大减轻了数据库的压力,即使缓存不命中在一万的并发下也能正常访问,在10万并发下数据库依然没压力,但是redis服务器设置最大连接数300去处理10万的线程,4核CPU处理不过来,很多redis连接不了。我用show global status like 'Max_used_connections'查看数据库发现最大响应连接数是388,这么低所以数据库是不会挂掉的。雷达下载更专业。

5使用场景:a几百或者2000以下并发直接加上组合索引就可以了。b不想加索引又高并发的情况下可以先事先把数据放到缓存中,硬件设备支持下可解决百万级并发。c加索引且缓存事先没有数据,在硬件设备支持下可解决百万级并发问题。d不加索引且缓存事先没有数据,不可取,要80多秒才能得到结果,用户体验极差。

6原理:其实使用了redis的话为什么数据库不会崩溃是因为redis最大连接数为300,这样数据库最大同时连接数也是300多,所以不会挂掉,至于redis为什么设置为300是因为设置的太高就会报错(连接被拒绝)或者等待超时(就算设置等待超时的时间很长也会报这个错)。

只论技术方面的话,通俗的说就是前端界面,后端逻辑,数据库,web服务器,以及真实服务器(云服务器或实实在在的硬件服务器)。

前端界面这一块,现在比较流行热门的技术有vuejs,vuejs是一个基于数据驱动的渐进式前端开源框架,不仅适用于PC端,也适总于移动端,现在很多大型的网站都在用vuejs。多说一句,vuejs的作者是中国人。

再说后端这一块,基本上是被springboot一统天下,springboot的IOC和AOP特性以及一系列的设计模式,让开发变得简单高效。

数据库这一块,市面上比较流行的有商业数据库有甲骨文公司的oracle,微软的sqlserver,开源的有postgresql,mysql,redis,sqlite等。

web服务器,比较常用的就是tomcat,nginx等。

服务器硬件的话,要么是云服务器(阿里云或者腾讯云),要么是真是的硬件服务器。

最后,网站开发,说简单也简单,就是三层构架,说难也难,其中涉及高并发大数据负载均衡的问题,都是现在热门的问题。如果想快速开发,建议借助现有的开源平台,快速高效,省时省力。

导读:Redis是被广泛使用的基础软件之一。对于工程师和,架构师,运维人员来说,了解Redis的高可用方案和背后的原理,是必备的基础知识。本文作者深入分析了Redis高可用的方方面面,并且做了有效总结,相信对广大读者可以起到很好的领路作用。

作者 codedump codedumpinfo 博主,多年从事互联网服务器后台开发工作。可访问作者博客阅读 codedump 更多文章。

Redis中为了实现高可用(High Availability,简称HA),采用了如下两个方式:

Redis中主从节点复制数据有全量复制和部分复制之分。

全量复制使用snyc命令来实现,其流程是:

旧版本全量复制功能,其最大的问题是从服务器断线重连时,即便在从服务器上已经有一部分数据了,也需要进行全量复制,这样做的效率很低,于是新版本的Redis在这部分做了改进。

新版本Redis使用psync命令来代替sync命令,该命令既可以实现完整全同步也可以实现部分同步。

执行复制的双方,主从服务器,分别会维护一个复制偏移量:

主服务器内部维护了一个固定长度的先进先出队列做为复制积压缓冲区,其默认大小为1MB。

在主服务器进行命令传播时,不仅会将写命令同步到从服务器,还会将写命令写入复制积压缓冲区。

每个Redis服务器,都有其运行ID,运行ID由服务器在启动时自动生成,主服务器会将自己的运行ID发送给从服务器,而从服务器会将主服务器的运行ID保存起来。

从服务器Redis断线重连之后进行同步时,就是根据运行ID来判断同步的进度:

有了前面的准备,下面开始分析psync命令的流程:

前面两种情况主服务器收到psync命令之后,会出现以下三种可能:

Redis使用哨兵机制来实现高可用(HA),其大概工作原理是:

以上将Redis节点分为两类:

以上是大体的流程,这个流程需要解决以下几个问题:

以下来逐个回答这些问题。

哨兵节点通过三个定时监控任务监控Redis数据节点的服务可用性。

每隔10秒,每个哨兵节点都会向主、从Redis数据节点发送info命令,获取新的拓扑结构信息。

Redis拓扑结构信息包括了:

这样,哨兵节点就能从info命令中自动获取到从节点信息,因此那些后续才加入的从节点信息不需要显式配置就能自动感知。

这一操作实际上完成了两件事情: 发现新的哨兵节点:如果有新的哨兵节点加入,此时保存下来这个新哨兵节点的信息,后续与该哨兵节点建立连接。 交换主节点的状态信息,作为后续客观判断主节点下线的依据。

每隔1秒,每个哨兵节点向主、从数据节点以及其他sentinel节点发送ping命令做心跳探测,这个心跳探测是后续主观判断数据节点下线的依据。

上面三个监控任务中的第三个探测心跳任务,如果在配置的down-after-milliseconds之后没有收到有效回复,那么就认为该数据节点“主观下线(sdown)”。

为什么称为“主观下线”?因为在一个分布式系统中,有多个机器在一起联动工作,网络可能出现各种状况,仅凭一个节点的判断还不足以认为一个数据节点下线了,这就需要后面的“客观下线”。

当一个哨兵节点认为主节点主观下线时,该哨兵节点需要通过”sentinel is-master-down-by addr”命令向其他哨兵节点咨询该主节点是否下线了,如果有超过半数的哨兵节点都回答了下线,此时认为主节点“客观下线”。

当主节点客观下线时,需要选举出一个哨兵节点做为哨兵领导者,以完成后续选出新的主节点的工作。

这个选举的大体思路是:

可以看到,这个选举领导者的流程很像raft中选举leader的流程。

在剩下的Redis从节点中,按照以下顺序来选择新的主节点:

选择了新的主节点之后,还需要最后的流程让该节点成为新的主节点:

原文地址:

https://wwwcodedumpinfo/post/20190409-redis-sentinel/

参考阅读:

GIAC全球互联网架构大会深圳站将于2019年6月举行,掌阅资深架构师,畅销图书《Redis 深度历险:核心原理与应用实践》作者钱文品将作为数据库专场的讲师出席2019年GIAC深圳站,并做关于Redis高性能,高可用方面的的演讲。本届GIAC数据库专场邀请阿里云前数据库总负责人余峰作为出品人,议题如下。

参加 GIAC,盘点2019年最新技术,目前 购买75折优惠 ,多人购买有更多优惠。识别二维码 了解大会更多详情。

投票机制。

在主从复制中由哨兵(sentinel)来完成这些操作,哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何使用redis缓存加索引处理数据库百万级并发

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情