开发之缓存与数据库优化

核能气质少年 提交于 2019-12-20 02:09:10

此文仅入门,需要扩展挖深,自行钻研

缓存-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,不要瞎搞。

这里我不打算班门弄斧,以下的博客都是比较优秀的,大家一起来学习。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!