转载请注明出处哈:http://carlosfu.iteye.com/blog/2269678
一、缓存的成本和收益是什么:
既然要讨论是否真的需要缓存这个问题,就要知道缓存带来的成本与收益(好处、坏处)是什么?
收益 | 成本 | |
缓存 + 后端存储(资源) |
1. 加速读写 2. 降低后端负载 |
1. 数据不一致性 2. 代码维护成本 3. 架构复杂度
|
上面的表格应该清楚的表达了使用缓存后的收益和成本分别是什么。下面将进行详细的解析
二、缓存成本与收益详解:
1. 收益是很明显的,通常来说一个设计还不错的缓存系统,能够帮助你的业务实现加速读写,同时帮助降低了后端负载。
(1) 加速读写:通常来说加速是明显的,因为缓存通常都是全内存的系统,而后端(可能是mysql、甚至是别人的HTTP, RPC接口)都有速度慢和抗压能力差的特性,通过缓存的使用可以有效的提高用户的访问速度同时优化了用户的体验。
(2) 降低后端负载:通过缓存的添加,如果程序没有什么问题,在命中率还可以的情况下,可以帮助后端减少访问量和复杂计算(join、或者无法在优化的sql等),在很大程度降低了后端的负载。
2. 成本:
(1) 数据不一致性:无论你的设计做的多么好,缓存数据与权威数据源(可以理解成真实或者后端数据源)一定存在着一定时间窗口的数据不一致性,这个时间窗口的大小可大可小,具体多大还要看一下你的业务允许多大时间窗口的不一致性。
(2) 代码维护成本:加入缓存后,代码就会在原数据源基础上加入缓存的相关代码,例如原来只是一些sql, 现在要加入k-v缓存,必然增加了代码的维护成本。
(3) 架构复杂度:加入缓存后,例如加入了redis-cluster,一般来说缓存不会像Mysql有专门的DBA,很有可能没有专职的管理人员,所以也增加了架构的复杂度和维护成本。
三、如何选择?
如果当前系统的访问速度和访问量能够满足现有的要求,就不必增加缓存,其实像mysql并没有那么差,一台运行良好的Mysql,扛个QPS=1000没什么问题。
如果要加入选择了缓存,一定要能给出足够的理由,不是为了简单的show技术和想当然,最好的方法就是用数据说话:加速比有多少、后端负载降低了多少。
四、什么样的场景需要缓存?
在公司里,据我观察,无论怎么更新架构,使用各种新技术,但是80%的项目还是离不开SQL的,下面我们以SQL作为后端数据源、以Redis作为缓存层,说一下哪些场景是需要缓存的。
1、复杂开销大的计算、降低后端负载
以Mysql为例子,一些复杂的操作或者计算(例如大量联表操作、一些分组计算),如果不加
缓存,大量流量将在这些复杂计算的执行。
2. 加速请求响应
即使单条后端数据足够快(例如select * from table where id=?),那么依然可以利用redis/memcache将这些操作进行merge做优化(例如:cache(select * from table where id in(id1,id10....idK))),从而优化整个IO链的相应时间。
附图一张:
相关推荐
4、模板缓存,只需要一次解析,提升性能。 六、自定义扩展类目录 迅睿CMS有全局Library目录,专门用于扩展类库,与Librarys用法不太一样,但原理一样。 1、全局Library调用。 2、可继承全局Library函数类。 3...
Install-Package Linq2DynamoDb.AspNet.DataSource 请也看一下系列文章( , , ,)。 AWS DynamoDB是一个很酷,高度可用且高度耐用的NoSQL数据库。 但是,由于其吞吐能力的限制,它可能会得到: 出乎意料的缓慢...
本文是针对渐进式Web应用程序技术的系列文章的一部分。 使用的外部API是: (使用性能缓存策略) (使用新鲜度缓存策略)1.更新npm库首先安装或更新本地项目的npm依赖项: npm install2.运行生产版本执行生产版本:...
复制代码 代码如下:<?... header(‘Last-Modified: ‘ . gmdate(‘D, d M Y H:i:s’) .... 您可能感兴趣的文章:PHP使用header()输出图片缓存实例PHP输出缓存ob系列函数详解基于PHP输出缓存(output_b
第一部分对Redis进行了介 绍,说明了Redis的基本使用方法、它拥有的5种数据结构以及操作这5种数据结构的命令,并讲解了如何使用Redis去构建文章展示网站、cookie、购物车、网页缓存、数据库行缓存等一系列程序。...
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于...
下一轮 这是使用React构建的渐进式Web应用程序。...阅读本系列的所有文章,整个过程-用Next.js构建渐进式Web应用- 和 想要一起玩 分叉,然后克隆并 npm install 为了发展 npm run dev 用于生产 npm r
认真读完该系列文章之后,学习者会快速了解并掌握 Spring Boot 在项目中最常用的技术点,作者课程的最后,会基于课程内容搭建一个 Spring Boot 项目的空架构,该架构也是从实际项目中剥离出来,学习者可以运用该架构...
这一系列的 Glide 文章为基础的Demo Glide官方中文文档: 辅助文章: 辅助源码文章: 辅助源码文章: 项目亮点 玩转开源库 Glide 学一点架构封装 简单爬取必应图片 项目截图 App体验地址: 如果你还没有熟悉RxJava的用法...
2、系统模块:系统管理-文章模块-产品模块-软件模块-采集模块-会员模块-留言板-说明-数据库管理-广告-评论等一系列功能!二次开发很方便! 3、后台使用Jquery ajax实现,调试更方便! 4、后台使用kindeditor v...
ASP.NET Core MVC从入门到精通系列文章。 本系列文章共计20篇,主要包括ASP.NET Core MVC项目创建,启动运行,以及命名约定,创建控制器,视图,模型,接收参数,传递数据ViewData,ViewBag,路由,页面布局,...
周末设计都市门户D8模板优质、低价!用心设计、用心服务!提供免费安装调试一次、免费使用指导、...4.频道页面设置需要在“频道详细设置”里列表页模板名和文章页模板名选择周末设计模板页面文件;5.上传导入DIY文件
产品简介:本作品是一款在线职业培训APP原型模板,用户可通过平台购买或免费进行视频课程学习,主要有课程购买、视频播放、视频缓存、课程推广、文章、课程订单等功能,所有元件均可复用,既可作为移动端原型设计...
他们为此进行了一系列的实验、开发了各种工具、写了大量的文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高网站性能。 Excetional Performance团队总结出了一系列可以提高网站速度的方法。可以分为7大...
前言..................................................................................................................................................2 第一讲 Linux基础..................................
2、系统模块:系统管理-文章模块-产品模块-软件模块-采集模块-会员模块-留言板-说明-数据库管理-广告-评论等一系列功能!二次开发很方便! 3、后台使用Jquery ajax实现,调试更方便! 4、后台使用kindeditor v4.1.4...
从零开始的7天Golang计划 README中文版本7天用Go从零实现系列7天能写什么呢?类似gin的web框架?类似groupcache的分布式缓存?或者一个简单的Python解释器?希望这个仓库能给你答案。推荐先阅读,这篇文章了解Go的...
我们使用了缓存技术来减少数据库查询和网络请求的次数,以提高系统的响应速度。我们还使用了队列系统来处理并发请求和长时间运行的任务,以保证系统的并发能力和稳定性。此外,我们还采用了安全性的最佳实践,如输入...
本系列文章的作者通过自己长期的实际项目工作经历,总结出了他对于 HACMP 设计 实施的经验。本系列会分为 4 部分,会向您详细地介绍实施 HACMP 过程中会经历 的各个过程,如设计,配置,安装,测试等。本文为第 2 ...