MySQL锁
MySQL锁[TOC] 按照锁思想分类乐观锁 需要应用程序实现,MySQL自身并未实现。 悲观锁按照锁类型分类读锁(共享锁、S锁) 加了读锁的事务,允许该事务进行读,不允许其他事务进行修改 同一行数据,可以被多个事务获得读锁 其他事务不能再获取写锁,只能等获得读锁的所有事务释放后,才能加写锁 写锁(排他锁、X锁) 一个事务获取了写锁,那么该事务可以进行数据的查看及修改 在该事务提交(释放锁)之前,不允许其他事务对该数据进行读操作或者写操作,会被阻塞住 即添加了写锁之后,只允许拥有该锁的事务进行读、写 意向锁 意向锁的主要用途是显示某人正在锁定一行,或者将要锁定表中的一行 想获取读锁或者写锁,必须先获取意向锁 申请意向锁的动作是数据库自动完成的 意向共享锁(IS Lock)意向排他锁(IX Lock)按照锁级别分类全局锁(数据库级别) FTWRL主要包括3个步骤: 上全局读锁(lock_global_read_lock) 清理表缓存(close_cached_tables) 上全局COMMIT锁(make_global_read_lock_block_com...
SQL优化笔记(MySQL)
SQL优化笔记(MySQL)目标 减少IO次数 降低CPU的计算 基本原则 尽量少 join MySQL 的优势在于简单,但这在某些方面其实也是其劣势。MySQL 优化器效率高,但是由于其统计信息的量有限,优化器工作过程出现偏差的可能性也就更多。对于复杂的多表 Join,一方面由于其优化器受限,再者在 Join 这方面所下的功夫还不够,所以性能表现离 Oracle 等关系型数据库前辈还是有一定距离。但如果是简单的单表查询,这一差距就会极小甚至在有些场景下要优于这些数据库前辈。 尽量少排序 排序操作会消耗较多的 CPU 资源,所以减少排序可以在缓存命中率高等 IO 能力足够的场景下会较大影响 SQL 的响应时间。 对于MySQL来说,减少排序有多种办法,比如: 上面误区中提到的通过利用索引来排序的方式进行优化 减少参与排序的记录条数 非必要不对数据进行排序 … **尽量避免 select *** 很多人看到这一点后觉得比较难理解,上面不是在误区中刚刚说 select 子句中字段的多少并不会影响到读取的数据吗? 是的,大多数时候并...
MySQL事务
MySQL事务(InnoDB)事务的概念事务就是一个不可分割的操作单元,其中的多个操作被认为是一个整体,要么全部执行成功,要么执行失败。 事务的特性通常来说,我们一般认为事务具有四个特性。 隔离性 不同的事务之间,是互相隔离的,不会互相影响。 通过锁和MVCC来实现。 持久性 一旦事务执行完成,那么对事务中影响到的数据的变化,是永久的,一般是指持久化到磁盘上或者日志文件中。 通过redo log来实现 原子性 一个事务中的多个操作,被认为是一个整体,不可再分割,只要其中一个操作执行失败,就认为整个事务执行失败了。 基于undo log。 一致性 事务执行完成后,对于数据的变化,要求要一致。举例来说,转帐,A向B转账,B向C转账,在两个操作结束之后,数据结果要求一致。 通过回滚,以及恢复,和在并发环境下的隔离做到一致性,也就是基于上述的 redo log、undo log、MVCC等一起实现。 并发事务可能产生的问题数据丢失 多个事务选择同一行数据进行更新,最后一个提交的事务所做的修改覆盖了前面其他事务提交的更新。 脏读 事务A可以读到事务B未commit的数据 不可重...
Github搭建Hexo双分支博客防止本地文件丢失
转载于: Github搭建Hexo双分支博客防止本地文件丢失 一、关于搭建流程 创建仓库,Godbn.github.io 创建两个分支:master和hexo 在options里面设置hexo为默认分支(注意这个分支保存的是网站源文件,并不是生成后上传github上用于显示的) 使用以下命令拷贝仓库到本地桌面 git clone git@github.com:Godbn/Godbn.github.io.git 终端进入Godbn.github.io目录,依次执行 npm install hexo hexo init npm install npm install hexo-deployer-git (用于生成上传至github) 修改_config.yml中的deploy参数 下载hexo themes主题自己百度安装调试好,我目前使用的是Sky,地址我贴出来 https://github.c...
Tomcat概述
Tomcat概述1. Tomcat 核心组件 Connector(连接器): 由 端口号 + 协议 组成。 2. 核心组件协作过程 要点: 连接器可以有多个,不同的连接器可以对应同一个站点 同一个连接器下,可以有多个站点 即,连接器和站点之间的关系是多对多的。 站点和应用上下文之间是一对多的关系,即一个站点对应该站点下多个应用上下文。站点和资源同样是一对多的关系 3. 源码剖析3.1 server.xml Connector(连接器): port:端口 protocol:协议 Host(站点): name: 域名 appBase:站点对应资源的路径,可配置全路径或者相对路径,相对路径是相对于tomcat的根路径。 unpackWARs:是否自动将WAR文件解压 autoDeploy:是否自动部署 Context(应用上下文): 在Host对应的appBase目录下的文件夹是隐式的Context, 通过Context标签可以显示的设置Host下的Context 3.2 请求流程分析 Engine、Host、Context 每一层都有自己的一个pipl...
Tomcat 源码阅读环境搭建(9.0.53)
Tomcat 源码阅读环境搭建(9.0.53)1. 下载源码包打开tomcat官网 2. 解压之后,用 idea 打开文件夹 tomcat是使用ant来进行管理的,为方便使用,引入maven来处理依赖 在生成的pom.xml文件中,粘贴以下代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apach...
高并发名词
高并发名词1. PV(Page View) 页面浏览量统计,用户每刷新一次页面,PV值加一。 2. UV(User View) 用户访问量统计,根据用户来统计,同一个用户在系统里无论点击多少个页面,UV 统计只加一。 3. RT(Response Time) 响应时间。前端页面发出请求开始到接收到后台响应之间的时间。 一般来说, 1ms~100ms之间的响应,人们基本感觉不到这个请求的耗时; 1s左右的响应时间,人们明显能感觉的到系统反应慢,但勉强能接受; 大于3s的响应时间,人们已经无法接受了,基本都会认为系统有问题; 4. 并发用户数 并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量。 5. TPS(Transactions Per Second) 系统每秒处理交易数。 比如下单事务,中间可能调用多个接口,但是属于下单这个流程,完成一整个下单流程,TPS记为 1。 6. QPS(Query Per Second) 系统每秒处理查询次数,单位是次/秒。 对于互联网业务中,如果某些业务有且仅有一个请求连接,那么TPS=QPS=HPS,一般情况下用TPS来...
HTTP的Content-Length头字段
HTTP的Content-Length头字段Content-Length用于描述HTTP消息实体的传输长度(the transfer-length of the message-body)。 在HTTP协议中,消息实体长度和消息实体的传输长度是有区别的。 消息实体长度:消息实体本身的长度。 消息实体的传输长度:消息实体在传输时的长度。 比如说gzip压缩下,消息实体长度就是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。 在具体的HTTP交互中,客户端是如何获取消息长度的呢,主要基于以下几个规则:响应为1xx,204,304或者head请求,则直接忽视掉消息实体内容。 如果有Transfer-Encoding,则优先采用Transfer-Encoding里面的方法来找到对应的长度。比如说Chunked模式。 如果head中有Content-Length,那么这个Content-Length既表示实体长度,又表示传输长度。 如果实体长度和传输长度不相等(比如说设置了Transfer-Encoding),那么则不能设置Content-Length。如果设置了Transfe...
接口幂等性
接口幂等性1. 概念接口幂等性 一次和多次请求某一个资源,对资源本身所产生的的影响均与一次执行的影响相同。 幂等性是系统服务对外的一种承诺,承诺只要调用接口成功了,多次调用对系统的影响是一致的。 2. 幂等性与重复提交比较幂等性 更多使用的情况是第一次请求知道结果,但是由于网络抖动或连接超时等情况未进行正常返回,在这种情况下系统自动再次发起请求,其目的是确认第一次是否请求完成。 重复提交 更多使用的情况是第一次请求成功或请求结果暂未返回的情况下,人为的进行多次操作。 实际上二者表现的情况是一样的,都会多次的调用一个接口,并且传参相同。 3. SQL语句的幂等性3.1 SELECT1SELECT * FROM `table_name` WHERE id = 1024; select语句具有天然的幂等性,因为select语句只是进行查询,并不会修改数据。 3.2 UPDATE1UPDATE table_name SET column_xx = 'xxx' WHERE id = 1024; 像上面这个update语句,执行多次和执行一次是一样的效果,这样的是...
Linux安装Redis 6.0.5 ./install_server.sh报错
Linux安装Redis 6.0.5 ./install_server.sh报错linux 安装Redis6.0.5时进行到./install_server.sh时报错, 12This systems seems to use systemd.Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry! 解决方案: 1vi ./install_server.sh 注释下面的代码即可 12345678#bail if this system is managed by systemd#_pid_1_exe="$(readlink -f /proc/1/exe)"#if [ "${_pid_1_exe##*/}" = systemd ]#then# echo "This systems seems to use systemd...