• 开发之缓存与数据库优化


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

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

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

  • 相关阅读:
    AGC005D ~K Perm Counting
    运行python脚本后台执行
    java枚举类型
    java可变参数长度
    java 泛型数组列表
    java抽象类
    java final使用
    java继承
    java 对象
    java 重载
  • 原文地址:https://www.cnblogs.com/Profound/p/11187241.html
Copyright © 2020-2023  润新知