传统MySQL+Memcached架构遇到的问题 实际MySQL 是适合进行海量存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: 1. MySQL需要不断的进行拆库
传统MySQL+Memcached架构遇到的问题
实际MySQL 是适合进行海量存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:
1. MySQL需要不断的进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。
2. Memcached与MySQL数据库数据一致性问题。
3. Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。
4. 跨机房cache同步问题。
众多NoSQL百花齐放,如何选择
最近几年,业界不断涌现出很多各种各样的NoSQ产品,那么如何才能正确地使用好这些作品,最大化地发挥其长处,是我们需要深入研究和思考的问题,实际归根结底最重要的是了解这些产品的定位,并且了解到每款产品的tradeoffs,在实际应用中做到扬长避短,总体上这些NoSQL主要用于解决以下几种问题
1. 少量数据存储,高速读写访问。此类产品通过数据全部in-momery的方式保证高速访问,同时提供数据落地的功能,实际这正是Radis最主要的适用场景。
2. 海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。
3. 这方面最具代表性的是dynamo和bigtables 2篇论文所阐述的思路。前者是一个完全无中心的设计,节点之间通过gossip方式传递集群信息,数据保证最终一致性,后者是一个中心化的方案设计,通过类似一个分布式锁服务来保证强一致性,数据写入先写内存和redo log,然后定期compat归并到磁盘上,将随机写优化为顺序写,提高写入性能。
4. Schema free,auto-sharding等。比如目前常见的一些文档数据库都是支持schema-free的,直接存储json格式数据,并且支持auto-sharding等功能,,比如mongodb。
面对这些不同类型的NoSQL产品,我们需要根据我们的业务场景选择最合适的产品。
Redis适用场景,如何正确的使用
前面已经分析过,Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢?
1.网络IO模型
Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如,Memcached最常用的stats 命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。
(Memcached网络IO模型)
Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。
2.内存管理方面
Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除,原因可以参考Timyang的文章:
Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。
Redis更适合作为存储而不是cache。
3.数据一致性问题
Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。
4.存储方式及其它方面
Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能
Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS
进行枚举操作,但不能在线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其dump文件,枚举出所有数据,Redis还同时提供了持久化和复制等功能。
5.关于不同语言的客户端支持
在不同语言的客户端方面,Memcached和Redis都有丰富的第三方客户端可供选择,不过因为Memcached发展的时间更久一些,目前看在客户端支持方面,Memcached的很多客户端更加成熟稳定,而Redis由于其协议本身就比Memcached复杂,加上作者不断增加新的功能等,对应第三方客户端跟进速度可能会赶不上,有时可能需要自己在第三方客户端基础上做些修改才能更好的使用。
根据以上比较不难看出,当我们不希望数据被踢出,或者需要除key/value之外的更多数据类型时,或者需要落地功能时,使用Redis比使用Memcached更合适。
关于Redis的一些周边功能Redis除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub、scripting等,对于此类功能需要了解其实现原理,清楚地了解到它的局限性后,才能正确的使用,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢失的,又比如聚合计算和scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。
总的来说Redis作者是一位非常勤奋的开发者,可以经常看到作者在尝试着各种不同的新鲜想法和思路,针对这些方面的功能就要求我们需要深入了解后再使用。
总结:后续关于Redis文章计划:
关于作者

用户在使用wallpaperengine时可以下载各种不同类型的壁纸,有很多用户不知道为什么wallpaperengine一直在更新,它是一款创意制作软件,软件中需要时刻更新最新的工具以及素材。为什么wallpaperengine一直在更新1、WallpaperEngine每次使用时都要进行更新,这是正常现象。2、WallpaperEngine是一款创意制作软件,软件中需要时刻更新最新的工具以及素材。3、每次使用都要更新,但更新文件包并不大,更新速度很快。4、订阅的壁纸只要有一个有更新他就跟着更

这篇分析报告探讨了 SUPRA 币在 2025 年的潜在增长潜力,识别了影响其价值的潜在市场因素、技术发展和监管变化。该报告评估了 OKX 生态系统的扩展、DeFi 行业的增长、机构投资、技术创新和监管环境改善等因素,这些因素可能会在未来几年推动 SUPRA 币的上涨。报告还考虑了潜在的下跌因素,包括市场竞争、监管风险、技术问题、市场情绪和经济衰退。

锁仓是一种常见的机制,私募币锁仓也是市场上常见的一个策略,指将一定数量的代币锁定在特定的钱包地址或智能合约中,使其在一段时间内无法自由交易或转移。作为投资者可能会好奇是不是市场上的私募币都要锁仓吗?通常来说是要锁仓的,有的投资者就会疑惑为什么私募币都要锁仓?就资料分析来看,锁仓的目的通常是为了促进项目的长期发展,增加代币的价值,同时显示项目方的承诺和信心。接下来小编为大家详细说说这个问题。私募币都要锁仓吗?私募币都要锁仓,私募币锁仓就是投资者在购买私募代币后,需要在一定时期内不得出售或转移这些代

笔记本可以用充电宝供电吗由于笔记本电脑的电池电压、充电电流以及充电接口与充电宝不一致,因此无法使用充电宝给笔记本电脑充电。这是由于技术规格的差异导致的。充电宝通常的输出电压是5V或者5.2V。而笔记本电脑的充电电压要求至少为13.5V,有些甚至需要更高的电压,如19.5V或者20V,才能正常充电。所以,如果想要用充电宝给笔记本电脑充电,需要确保充电宝能够提供足够的电压。当笔记本电脑充电时,通常需要3A以上的电流。然而,充电宝的标称电流只有2.1A。现在市面上的笔记本电脑都使用圆型接口,不同厂家的

币圈犹如独立岛屿组成的世界,每个区块链(岛屿)拥有独特货币和规则。跨链桥就像一座连接岛屿的桥梁,让用户可以安全地跨链转移代币。它提升了互操作性,促进了价值流动,拓展了应用场景,甚至可以提升效率。不过,跨链桥也存在安全、中心化和技术复杂性等风险,选择信誉良好的跨链桥至关重要。通过跨链桥,币圈得以构建一个更加互联互通的区块链新世界。

比特币自 2009 年发行以来经历了剧烈的价格波动,从 2011 年的 2.01 美元低点飙升至 2021 年的 68,000 美元高点。价格波动受供需关系、监管政策、经济状况和技术创新等因素影响。例如,2017 年,由于需求激增,比特币价格飙升至近 20,000 美元,而 2022 年,美联储收紧货币政策导致价格大幅下跌。

本文介绍了 BTC 币上线的知名交易所,并提供了详细的分步指南,指导读者如何购买和交易 BTC 币。列出的交易所包括 OKX、币安、火币、Coinbase 和 Kraken,每家交易所都提供了独特的平台功能。指南涵盖账户创建、入金、购买 BTC 币和安全存储等关键步骤。本文还讨论了选择交易所的因素,以及确保 BTC 币安全性的最佳实践。通过遵循本文中的说明,读者可以轻松开始使用 BTC 币的交易和投资。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

Atom editor mac version download
The most popular open source editor

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.
