开发之缓存与数据库优化
此文仅入门,需要扩展挖深,自行钻研
缓存-redis
数据库-mysql
1. 缓存
什么是缓存?
定义 缓存是系统快速响应的一种关键性技术,是一组被保存起来以备将来使用的东西,介于应用开发和系统开发之间,是产品经理们经常顾及不到的地方,也是技术架构设计的非功能性约束。
分类
按软件系统所处的位置不同分类
- 客户端缓存
- 服务端缓存
- 网络中的缓存
按规模和部署方式分类:
- 单体缓存
- 缓存集群
- 分布式缓存
为什么要用缓存?
为什么要用缓存,我们这里仅从软件开发层面来分析,首先你必须了解关于系统的性能的一些指标。
系统的性能的指标一般包括:
- 响应时间:系统对用户的请求作出的响应时间,它完整的记录了整个系统处理请求的时间。
- 延迟时间:一般指系统处理完请求后,由于网络传输到用户之间的网络延迟时间。
- 吞吐量:指单位时间内系统处理请求的数量。无并发的系统中,它与响应时间成反比。
- 并发用户数:指系统能够同时承载的正常使用系统功能的用户数量,它比 吞吐量更能直观的反应系统的性能
- 资源利用率:反映的是一段时间内资源平均被占用的情况
系统的性能,反映在从浏览器到网络,再到服务器,甚至数据库等各个应用层面。而在各个层面使用缓存将大大提升整个系统的性能。
- 缓存离客户端越近,响应时间则越快;缓存离数据库越近,则响应时间越长。
- 缓存是一种用空间换时间的概念。
- 如果带宽收费(流量付费),那么缓存就是变相的省钱利器。
- 并发要求较高的功能,那么缓存的主要功能就体现的十分精准了。
-
- 对内,减轻数据库资源服务器的压力
-
- 对外,提供系统的响应时间,能够允许更高的并发量,保证系统的正常运行。
- 发展到今天,缓存已经不仅仅限于这些功能。由于篇幅有限,仅仅作介绍,方便我们开发做参考:
-
- 业务功能解耦:
-
- 分布式锁的使用、秒杀、队列服务
-
- 定时任务的使用
-
- 消息服务
缓存怎么用?
那么缓存怎么用呢,那些数据适合用于缓存呢?这里仅仅以redis这种缓存数据库为例,简单的讲一讲服务端的缓存使用。
-
关于redis 的基本使用,在Spring中如何调用api等基础性功能,自行百度(PS:烂大街了)
-
redis 属于应用级别的缓存,区别与项目中的运行内存,用于弥补应用内存不足或者服务器硬件条件有限的情况;当然也是为了防止高并发来保证系统稳定性。
-
redis 支持的数据格式能够满足业务开发中的99%以上的格式,并且支持分布式,开源,社区比较活跃,所以是首选的技术
-
redis支持满足各种条件的容错策略,这个需要自己了解
-
redis分布式支持拓扑和哨兵机制两种分布式策略满足扩展和稳定性
-
redis 支持本地化存储操作,并提供了2种方式来本地化
-
redis 不仅仅如此,还有很多高级功能:消息队列,机器学习,布隆过滤,bit存储等 大家有时间,可以去了解一下。这些东西都是可以百度到的。
适合缓存的使用场景
- 读密集的业务数据
- 有大量的热数据
- 对响应时效要求高的
- 对一致性要求不是很严格的
- 需要分布式锁的
不适合的场景
- 读少的
- 更新频繁的
- 一致性要求严格的
2. 数据库
什么是mysql数据库?
什么是mysql,大家平时都用,但是让你表达一下,啥是mysql?是否心里能表达清楚呢?闭上眼睛,自问一下。 wiki 上是这么介绍的
MySQL is an open-source relational database management system (RDBMS). Its name is a combination of "My", the name of co-founder Michael Widenius's daughter,[7] and "SQL", the abbreviation for Structured Query Language.
MySQL is free and open-source software under the terms of the GNU General Public License, and is also available under a variety of proprietary licenses. MySQL was owned and sponsored by the Swedish company MySQL AB, which was bought by Sun Microsystems (now Oracle Corporation).[8] In 2010, when Oracle acquired Sun, Widenius forked the open-source MySQL project to create MariaDB.
- 自行百度翻译
如果你觉得你了解什么是mysql,那么这里我罗列一些问题,如果你能都知道,那么你就真的了解mysql了,如果不清楚,也没关系,百度了解一下,mysql的知识真的不要太多。
- 我们平时说的mysql,是数据库还是mysql实例,它们的关系和区别是什么?
- 你知道mysql的数据存储文件是什么格式的吗?这种格式有啥意义呢
- mysql为什么不支持全文索引
- mysql 速度快是因为不支持事务吗?
- mysql数据量大于1000万性能会急剧下降吗?
- 你知道mysql 有多少种存储引擎?你知道公司目前用的是哪种存储引擎,为啥选了这种,相对于其他的存储引擎,它有哪些牛逼的地方?
问题很多?不,如果你接触过mysql的体系,这些都是入门必备。如果觉得你缺少这些知识,那么不妨找本书看看,找一两篇博客,补补。
为什么要用mysql?
这个应该大家都多少知道点,为啥用,因为阿里也在用啊,淘宝早期就是用mysql打天下的。那么从专业的角度考虑,为啥阿里选了mysql,而不是其他呢?
- 开源,开源,开源!
- 免费,运维免费,使用免费
- 性能极佳
- 社区支持特别好,插件式存储引擎支持
mysql怎么用?
这个怎么用,增删改查了,大家都会一点点,这里要提的是如何优化mysql。
- 所谓的优化MySQL,那必须熟悉mysql,了解存储引擎,才能谈优化。
- 优化MySQL,其实就是按照MySQL的规则来写SQL,不要瞎搞。
这里我不打算班门弄斧,以下的博客都是比较优秀的,大家一起来学习。