海量数据下正确的访问redis要注意的事情有很多,基本上可以从服务治理,数据,redis正确使用三个方面来讲。
成都创新互联公司主营平山网站建设的网络公司,主营网站建设方案,成都app软件开发,平山h5重庆小程序开发公司搭建,平山网站营销推广欢迎平山等地区企业咨询
既然是海量数据,那么服务肯定要拆分成多个服务,最常见的采用“大中台,小前台”的概念,中台分各个服务中心,各个中心去维护自己中心负责的服务,向上游前台提供数据和服务。比如一个做内容付费的公司可以有内容中心、商品中心、交易中心
用户中心、促销中心、基础中心、开放平台等,中心之间采用RPC通信或者数据共享。
在做好服务治理和数据划分的基础上,这个时候就是重点讲如何正确使用redis的时候了,个人列举了部分细则仅供大家参考:
熟练使用五种数据结构(String、Set|、Hash、List、ZSet)以及每种数据结构的适用场景和注意事项;
防止缓存雪崩,即避免大批量缓存同一时间段集中过期,导致大量请求都怼到数据库上,导致数据库连接数爆满、宕机;
防止缓存穿透,避免redis中热点key存入了null或者不存在,导致大量请求绕过redis请求数据库去了;
避免大key的存在:比如一个redis集群是16G,共8个节点,每个节点平均分配2G的内存,这时候如果有一个大的hash key占用内存超过2G了,这个时候尽管集群还有剩余的空间,这个大key的写入依旧会失败,单个key是无法做到集群的,另外再想想如果一个hash存储了大量的数据,考虑一下性能问题?
禁止使用keys、flushall、flushdb等,运维同学通过redis的rename机制禁掉命令,或者使用scan的方式渐进式处理;
批量读写redis请采用pipeline管道的方式;
要保证Redis不会挂掉,也就是提高Redis的高可用性,可以从这么几个方面考虑。
Redis单副本:也就是只部署一台Redis,不需要节点之间的数据同步,架构简单,部署方便;但是单台机器毕竟是有风险的,按照题目中【海量数据】的场景,是不能达到高可用要求的。
Redis主从:主从实例可以部署在不同的物理服务器上,充分利用多台服务器的资源,在主库发生故障的时候,可以进行主备切换,从而保证系统的稳定运行,甚至可以做到读写分离,主库专门用作写操作,一台或多台备库进行读操作;但是当主库发生故障的时候(如果没有HA方案的话),是需要手动进行主备切换的。
Redis Sentinel:部署架构分为两部分【Sentinel集群】和【数据集群】;Sentinel集群是由多个Sentinel节点组成的分布式集群,通常是2N+1台服务器,可以实现故障发现和转移、客户端通知等功能;数据集群用于存储数据;它能够解决主从模式下的自动切换问题,并且数据集群是可以横向扩展的;当然这个架构实现和部署起来,也更为复杂一些;并且这个架构不能做到读写分离。
Redis Cluster:Redis 3.0集群,是分布式集群解决方案之一,物理架构中配置2N个节点(主从一一对应),主节点提供读写操作,从节点作为备份;数据分布保存在多个节点上,是一种无中心的架构,如果有部分节点发生故障,能够实现故障自动转移和切换,用投票机制完成备库升级为主库(下文的Redis分片章节,还会介绍到Redis Cluster)。
比如你的视图是create view v_name asselect ....from ... where...先试试 as下面的代码 看看有数据没 select ....from ... where.. 执行看看....如果没救说明本来就没....还有一个意思你就说 视图不包含实际数据。。确实是这样的。。。视图只是一堆语句。。除非你给 视图加了聚集索引 这个时候他包含数据
对于这种大数据量系统业界已经有不少成熟方案
最简单的是读写分离,写操作只在主库写,配置自动同步到从库。部分读操作改成操作从库,减少主库数据库压力。
还可以让给应用加一个redis缓存,查询时先读缓存,读不到再读数据库。
如果改成这样,压力还是太大,就要考虑分表。
分表思路很多,例如把热点数据放一张表,非热点数据放一张表。或者按用户id尾号做hash,分表分布在不同表。
如果读写要求已经超过单机支撑能力,那就要考虑集群,你可以搜索一下怎么用mycat搭建数据库集群
数据库的写入量高,是一个很常见的技术瓶颈,场景如央视春晚发红包,千万级别的写入qps。而解决方案有很多,笔者分享一些目前业界最成熟有效的措施:
一、分表
将数据分摊到多个表上,流量也将分摊到多个表上,可以提高数据库读写的吞吐量。
如将一个表从1个,分解为256个。
二、缓存
我们可以将数据库中的热点数据,写入缓存中,将读请求的流量优先走缓存,这样可以分摊数据库的读压力。
如使用Redis来存储热点数据,而使用Canal将MySQL中的热点数据同步到Redis中。
三、异步
我们知道,MySQL数据库日志系统,有一个持久化日志redolog,原理是数据库为了减少磁盘IO的次数,将要写入数据库的数据先在内存中暂存,后续再批量写入磁盘中,这边是异步的一种案例。
我们的系统设计,也可以参考这个模式,将要写入数据库中的操作通过发送mq暂存到Kafka中,再通过消费mq的方式,将数据写入数据库,从而避免流量过大,一下子将数据库打死了。
四、分库
经过压测得知,一个16核32G内存500G硬盘的MySQL,它的写入极限是5600/s,这是硬件上的极限,从软件层面已无法提升。
如使用MyCat就是构建数据库集群,以增加更多的数据库实例,从硬件层面上解决问题。
五、其他
以上是互联网大厂最常用的优化方案,只要你肯花心思,总有优化的空间。
到此,以上就是小编对于redis 热点数据的问题就介绍到这了,希望这2点解答对大家有用。
网页名称:写入mysql数据库的数据量很大,数据库架构该怎么去设计?
当前路径:http://www.shufengxianlan.com/qtweb/news37/524837.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联