自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 十二、缓存设计

缓存能够有效地加速应用读写速度,同时也可以降低后端负载,对日常应用地开发至关重要。但是将缓存加入应用架构后也会带来一些问题,本章将针对这些问题介绍缓存使用技巧和设计方案,包含如下内容:缓存的收益和成本分析。缓存更新策略的选择和使用场景。缓存粒度控制方法。穿透问题优化。无底洞问题优化。雪崩问题优化。热点key重建优化。一、缓存的收益和成本上图左侧为客户端直接调用存储层的架构,右侧为比较典型的缓存层+存储层架构,下面分析一下缓存加入后带来的收益和成本。收益如下:加速读写:因为缓存通

2021-07-08 17:12:29 249

原创 十一、持久化

Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成地数据丢失问题,当下次重启时利用之间持久化地文件即可实现数据恢复。理解掌握持久化机制对于对于Redis运维非常重要。一、RDBRDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。1、触发机制手动触发分别对应save和bgsave命令:save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上环境不建议使用。运行save命令对应

2021-07-07 11:26:40 129

原创 一、ThinkPHP架构

对于一个HTTP应用来说,从用户发起请求到响应输出结束,大致的标准请求流程如下:载入Composer的自动加载autoload文件实例化系统应用基础类think\App获取应用目录等相关路径信息加载全局的服务提供provider.php设置容器实例及应用对象实例,确保当前容器对象唯一从容器中获取HTTP应用类think\Http执行HTTP应用类的run方法启动一个HTTP应用获取当前请求对象实例(默认为app\Request继承think\Request)保存到容器执行think\Ap

2021-06-29 14:14:11 1767

原创 十、慢查询分析

许多存储系统(例如MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过超过预设阈值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似的功能。如图3-1所示,Redis客户端执行一条命令分为如下4个部分:1)发送命令2)命令排队3)命令执行4)返回结果需要注意,慢查询只统计步骤3)的时间,所以没有慢查询并不代表客户端没有超时问题。一、慢查询的两个配置参数对于慢查询功能

2021-06-28 17:31:15 326

原创 九、Redis Shell

Redis提供了redis-cli、redis-server、redis-benchmark等Shell工具。它们虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题。一、redis-cli详解第一章曾介绍过redis-cli,包括-h、-p参数,但是除了这些参数,还有很多有用的参数,要了解redis-cli --help命令来进行查看,下面将对一些重要参数的含义以及使用场景进行说明。1、-r-r(repeat)选项代表将命令执行多次,例如下面操作将会执行三次ping命令:redis-

2021-06-28 15:34:28 365

原创 八、Pipeline

一、Pipeline概念Redis客户端执行一条命令分为如下四个过程:1)发送命令2)命令排队3)命令执行4)返回结果其中1)+4)称为Round Trip time(RTT,往返时间)。Redis提供了批量操作命令(例如mget、mset等),有效地节约RTT。但大部分命令是不支持批量操作的,例如要执行n次hgetall命令,并没有mhgetall命令存在,需要消耗n次RTT。Redis的客户端和服务端可能部署在不同的机器上。例如客户端在北京,Redis服务器在上海,两地直线距离约1300公

2021-06-28 12:01:04 71

原创 七、事务与Lua

为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题。本节首先介绍Redis中事务的使用方法以及它的局限性,之后重点介绍Lua语言的基本使用方法,以及如何将Redis和Lua脚本进行集成,最后给出Redis管理Lua脚本的相关命令。一、事务熟悉关系型数据库的读者应该对事务比较了解,简单地说,事务表示一组动作,要么全部执行,要么全部不执行。例如在社交网站上用户A关注了用户B,那么需要在用户A的关注表中加入用户B,并且在用户B的粉丝表中添加用户A,这两个行为要么全部执

2021-06-25 13:59:47 278

原创 六、Bitmaps

一、数据结构模型现代计算机用二进制(位)作为信息的基础单位,1字节等于8位,例如“big”字符串是由3个字节组成,但实际在计算机存储时将其用二进制表示,“big”分别对应的ASCLL码分别是98、105、103,对应的二进制分别是01100010、01101001和01100111,如下图所示。许多开发语言都提供了操作位的功能,合理地使用位能够有效地提高内存使用率和开发效率。Redis提供了Bimaps这个“数据结构”可以实现对位地操作。把数据结构加上引号主要因为:Bitmaps本身不是一种数据结

2021-06-25 11:55:01 141

原创 五、HyperLogLog

HyperLogLog并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等。HyperLogLog提供了3个命令:pfadd、pfcount、pfmerge。例如2016-03-06的访问用户是uuid-1、uuid-2、uuid-3、uuid-4,2016-03-05的访问用户是uuid-4,uuid-5,uuid-6,uuid-7。一、添加pfadd key element [el

2021-06-25 10:16:16 108

原创 四、Redis发布订阅

Redis提供了基于“发布?订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以受到该消息,如下图所示。Redis提供了若干命令支持该功能,在实际应用开发时,能够为此类问题提供实现方法。1、命令Redis主要提供了发布消息、订阅频道、取消订阅以及按照模式订阅和取消订阅等命令。1、发布消息publish channel message下面操作会向channel:sports频道发布一条消息“Tim w

2021-06-24 17:05:59 178

原创 三、GEO

Redis3.2版本提供了GEO(地理信息定位)功能,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能,对于需要实现这些功能的开发者来说是一大福音。GEO功能是Redis的另一位作者Matt Stancliff借鉴NoSQL数据库Ardb实现的,Ardb的作者来自中国,它提供了优秀的GEO功能。一、增加地理位置信息geoadd key longitude latitude member [longitude latitude member ...]longitude、la

2021-06-23 14:58:58 95

原创 二、Redis API的理解和使用

Redis提供了5种数据结构,理解每种数据结构的特点对于Redis开发运维非常重要,同时掌握Redis的单线程命令处理机制,会使数据结构和命令的选择事半功倍。

2021-06-15 14:38:59 264

原创 一、初识redis

一、Redis简介Redis是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此Redis可以满足很多的应用场景,而且因为Redis会将所有数据都存放在内存中,所以它的读写性能非常惊人。不仅如此,Redis还可以将内存的数据利用快照和日志的形式保存到硬盘

2021-06-15 12:00:50 143

原创 五、MySQL配置参数优化与设计规范

一、MySQL配置参数优化虽然MySQL提供了合适的默认值,但是仍然需要根据业务场景来优化配置参数。max_connections:最大连接数。如果经常遇到"Too many connections"的错误,是因为max_connections太小了。这个错误很常见,因为应用程序没有正确地关闭与数据库地连接,需要设置连接数比默认151更大地值。不要盲目去提高这个值,而应该注意优化业务中的SQL语句,让SQL快速执行完成,以释放掉连接。另外,建议在应用程序端使用连接池。query_cache_type

2021-06-10 14:37:16 159

原创 四、SQL语句性能优化

说起SQL语句性能优化,相信所有人都了解一些简单的技巧:不使用SELECT * 、不使用NULL字段、合理地使用索引、为字段选择恰当地数据类型等。你是否真地理解这些优化技巧?是否理解其背后地工作原理?本章从理论和实战角度出发,讲解这些优化建议背后地原理。一、MySQL查询过程很多SQL查询工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。所以,如果希望MySQL能够获得更快的查询性能,那么最好的方法就是搞明白MySQL是如何优化和执行SQL查询的。当向MySQL发送一个SQ

2021-06-08 12:01:55 230

原创 三、MySQL事务和锁

InnoDB数据库引擎支持事务。事务具有ACID(原子性、一致性、隔离性和持久性),还有不同的隔离级别(具有不同的隔离性)。事务的隔离级别是同通过锁的机制来实现的。锁在计算机中是协调多个进程或线程并发访问某一资源的一种机制。在数据库中,除了传统的计算资源(CPU、RAM、I/O等)争用之外,数据也是一种供许多用户共享访问的资源。数据库在进行并发访问的时候会自动对相应的对象进行加锁,以保证数据并发访问的一致性。InnoDB存储引擎既支持行级锁,也支持表级锁,但默认情况下采用行级锁。一、MySQL事务概述

2021-06-04 16:16:03 215

原创 MySQL安装windows平台

1、MySQL官网下载MySQL2、以管理员身份打开命令行进入mysql的bin目录下3、安装MySQL的服务mysqld --install4、初始化MySQLmysqld --initialize --console初始化MySQL会产生一个随机密码。5、开启MySQL的服务net start mysql;6、登录验证mysql -u root -p不知道为什么密码总不对7、停止MySQL 服务net stop mysql8、设置跳过验证mysqld --sh

2021-06-03 22:00:46 138

原创 二、InnoDB存储引擎体系结构

从MySQL5.5版本开始,InnoDB是默认的表存储引擎,特点是支持

2021-06-03 15:41:49 156

原创 一、MySQL架构介绍

一、MySQL存储引擎MySQL数据库及其分支版本主要的存储引擎有InnoDB、MyISAM、Memory等。简单地理解,存储引擎就是指表地类型以及表在计算机上的存储方式。存储引擎的概念是MySQL的特色,使用的是一个可插拔存储引擎架构,能够在运行的时候动态加载或者卸载这些存储引擎。不同的存储引擎决定了MySQL数据库中的表可以用不同的方式来存储。我们可以根据数据的特点来选择不同的存储引擎。在MySQL中的存储引擎有很多种,可以通过SHOW ENGINES语句来查看。下面重点关注InnoDB、MyIS

2021-06-02 14:43:15 80

原创 十二、精通MySQL存储引擎

如何保证数据并发访问的一致性和有效性是所有数据库必须解决的一个问题。另外,锁冲突也是影响数据库并发性能的一个重要因素。应用程序在选择锁类型时,需要根据实际运行的需要选择最佳的所类型。本章主要从MySQL的逻辑组成和数据库存储引擎方面介绍MySQL的整体架构,讨论MySQL锁机制的特点,以及解决MySQL锁问题的一些方法或建议,让读者能从整体上把握MySQL,理解MySQL的各个逻辑层是如何工作的。一、MySQL架构MySQL服务器由SQL层和存储引擎层构成。SQL层的主要功能包括权限判断、SQL解析功能

2021-05-26 15:52:01 107

原创 十一、MySQL权限与安全管理

MySQL是一个多用户数据库,具有功能强大地访问控制系统,可以为不同用户指定允许地权限。MySQL用户可以分为普通用户和root用户。root用户是超级管理员,拥有所有权限,包括创建用户、删除用户和修改用户地密码等管理权限。用户管理包括管理用户账户、权限等。一、权限表MySQL服务器通过权限表来控制用户对数据库地访问,权限表存放在MySQL数据库中,由MySQL_install_db脚本初始化。存储账户权限信息地表主要有user、db、table_priv、columns_priv和procs_priv

2021-05-24 15:22:59 747

原创 十、性能优化

一、优化简介优化MySQL数据库是数据库管理员和数据库开发人员的必备技能。MySQL优化,一方面是找出系统的瓶颈,提高MySQL数据库整体的性能;另一方面需要合理的结构设计和参数调整,以提高用户操作相应的速度;同时还要尽可能节省系统资源,以便系统可以提供更大负荷的服务。MySQL数据库优化是多方面的,原则是减少系统的瓶颈,减少资源的占用,增加系统的反应速度。例如,通过优化文件系统,提高磁盘I\O的读写速度;通过优化操作系统调度策略,提高MySQL在高负荷情况下的负载能力;优化表结构、索引、查询语句等使查

2021-05-18 16:40:19 161 1

原创 九、存储过程和函数

一、创建存储过程和函数存储过程可以分为存储过程和函数。在MySQL中,创建存储过程和函数使用的语句分别是CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句来调用存储过程,只能用输出变量返回值。函数可以从语句外调用(引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。1、创建存储过程创建存储过程,需要使用CREATE PROCEDURE语句,基本语法格式如下:CREATE PROCEDURE sp_name([proc_parameter])[charact

2021-05-18 15:54:14 283

原创 八、关于索引

索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达某个位置去搜寻数据文件,而不必查看所有数据。一、索引简介索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速度。本节将介绍索引的含义、分类和设计原则。1、索引的含义和特点。索引是一个单独的、存储在磁盘上的数据库结构,包含着对数据表里所有记录的引用指针。使用索引可以快速找

2021-05-12 11:31:36 263

原创 七、插入、更新与删除数据

一、插入数据在使用数据库之前,数据库中必须要有数据,MySQL中使用INSERT语句向数据库表插入新的数据记录。可以插入的方式有插入完整的记录、插入记录的一部分、插入多条记录、插入另一个查询的结果。1、为表的所有字段插入数据使用基本的INSERT语句插入数据要求指定表名称和插入到新纪录中的值。基本语法格式为:INSERT INTO table_name(column_list) VALUES(value_list);table_name指定要插入数据的表名,column_list指定要插入数据的

2021-05-11 17:07:16 572

原创 六、查询数据

数据库管理系统的一个重要功能就是查询数据,查询数据不应只是简单返回数据库中存储的数据,还应该根据需要对数据进行筛选以及确定数据以什么样的格式显示。MySQL提供了功能强大、灵活的语句来实现这些操作。一、基本查询语句MySQL从数据表中查询数据的基本语句为SELECT语句。SELECT语句的基本格式是:SELECT { * | <字段列表> } [ FROM <表1>,<表2>... [ WHERE <表达式> ] [G

2021-05-06 11:04:45 1429

原创 五、运算符

222

2021-05-03 20:24:10 100

原创 四、数据类型

数据库表由多列字段构成,每个字段指定了不同的数据类型。指定字段的数据类型之后,也就决定了向字段插入的数据内容,例如,当要插入数值的时候,可以将它们存储为整数类型,也可以将它们存储为字符串类型。不同的数据类型也决定了MySQL在存储它们的时候使用的方式,以及在使用它们的时候选择什么运算符号进行运算。一、MySQL数据类型介绍MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。(1)数值类型:包括整数类型TINYINT、SMALLINT、MEDIUM、INT、BIGINT、浮点小数数据

2021-04-26 16:20:32 667

原创 三、数据表的基本操作

在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的,每一行代表一条唯一的记录,每一列代表记录中的一个域。一、创建数据表在创建完数据库之后,接下来的工作就是创建数据表。所谓创建数据表,指的是在已经创建好的数据库中建立新表。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程。1、创建表的语法形式在创建数据表之前,应该使用语句“USE <数据库名&gt

2021-04-23 11:16:45 2367

原创 二、数据库的基本操作

MySQL安装好以后,首先需要创建数据库,这是使用MySQL各种功能的前提。一、创建数据库MySQL安装完成之后,将会在其data目录下自动创建几个必需的数据库,可以使用“SHOW DATABASES;”语句来查看当前所有存在的数据库,输出语句如下。SHOW DATABASES;创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理,如果管理员在设置权限的时候为用户创建了数据库,则可以直接使用,否则需要自己创建数据库。MySQL中创建数据库的基本SQL语法格式为:CREATE DATABASE

2021-04-21 15:12:11 83

原创 一、初识MySQL

一、数据库基础1、什么是数据库数据库是一个长期存储在计算机内的、有组织的、有共享的统一管理的数据集合。它是一个按数据结构来存储和管理数据的计算机软件系统。数据库包括两层含义:保管数据的“仓库”,以及数据管理的方法和技术。2、表在关系数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成。行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,有相应的描述信息,如数据类型、数据宽度等。3、数据类型数据类型决定了数据在计算机中的存储格式

2021-04-19 15:16:49 222

原创 CentOS8 操作系统安装 Docker

Docker安装需要比较高的系统权限,请与管理员确认,或使用root权限进行安装。1. CentOS 安装DockerCentOS8 的推荐的新包管理工具是 dnf,所以我们使用 dnf 来安装 Docker。 CentOS7 的版本只需要将 dnf 替换成 yum 即可。1.添加软件源dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo2.更新软件包索引dnf updat

2021-04-09 11:29:31 130

原创 安装开发工具IDEA及插件

安装IDEA安装(1)打开IDEA官网(2)单击“DOWNLOAD”按钮,选择“Community”下载IDEA免费版。(3)在下载完成后,双击下载的安装程序,按照提示一步一步单击“Next”按钮,完成安装。安装Spring Assistant 插件(1)启动安装好的开发工具IDEA,单击菜单栏“File->Settings->plugins”命令。(2)进入页面,在搜索框输入关键词“Spring Assistant”后,安装插件。配置IDEA的Maven环境单击菜单栏的“Fi

2021-03-15 17:26:34 120

原创 Java基础 Java语言基础

1、Java主类结构Java语言是面向对象的程序设计语言,Java程序的基本组成单元是类,类体中又包含属性与方法两部分。每一个应用程序都必须包含一个main()方法,含有main()方法的类称为主类。package Number;public class First { static String s1="hello"; public static void main(String[] args){ String s2="Java"; System.

2021-02-21 22:37:10 150

原创 Java基础 I/O(输入/输出)

1、 流概述流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。虽然I/O流通常与磁盘文件存取有关,但程序的源和目的地也可以是键盘、鼠标、内存或显示器窗口等。java由数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据。源可以是文件、网络、压缩包或其他数据。输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据把信息传递到目的地。输出流的目标可以是文件、网络、压缩包、控制台和其

2021-02-12 16:36:49 265 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除