MySQL:锁的学习

1. 分类 1.1. 对锁的态度 乐观锁; 悲观锁; 1.2. 属性分类 排他锁; 共享锁; 1.3. 粒度级别分类 全局锁; 页级锁; 表级锁; 行级锁; 2. 对锁的态度 2.1. 乐观锁 乐观的认为别人不会去修改数据,没有锁,在确定修改时再重新查询一遍数据,如果数据被修改了就放弃修改数据。 一般是读的为主。如果频繁的写入,会导致较高的失败率。 乐观锁通过 CAS 或者版本机制来

- 阅读全文 -

Go : GMP 模型深入理解

一、基础知识学习 1.1 概述 计算机最早是时候是单进程时代,一次只能执行一个进程任务,其他进程想执行任务,只能等待排队。 后面出现了多进程、多线程,可以同时执行多个进程/线程任务,但是这个是并非真正的同时执行。而是将CPU的执行时间切分成一个个时间单位(时间片),然后将这些进程/线程切换着执行。 如果一个进程资源很大,那么这个进程的创建、销毁、切换都会占用很大的时间,切换时会有切换成本。 1.

- 阅读全文 -

RPC学习:进阶到 gRPC

所有代码详见代码仓库,rpc、grpc 目录 一、RPC 入门 1.1 介绍 RPC 全称叫做远程过程调用,是分布式系统中不同节点通信的一种流行的方式。我在刚开始学习的时候一直有一个误区,就是 RPC 是服务端调用客户端使用的,在实践上手后才恍然大悟,它是服务端与服务端之间的事件。 在刚刚入门的阶段的时候,我还有一个小小的疑问:那就是我直接用 http 传输,然后用 json 格式转换消息不行吗?

- 阅读全文 -

GO 代码的一些查漏补缺

一、入门 1. 地址引用错误 1.1 代码 func main() { slice := []int{0,1,2,3} m := make(map[int]*int) for key,val := range slice { m[key] = &val } for k,v := range m { fm

- 阅读全文 -

微服务学习:理念

一、 是什么 一种架构模式,将一个很大的代码库拆分成若干个小模块,一个模块即一个服务,符合单一职责,对外提供服务,服务之间通信基于网络,某一个服务内部的修改不会影响服务调用方的变动。 1.1 优势 编程语言没有限定,不同模块可以使用单独的技术语言; 各个模块独立,升级或者出现问题,不会影响其他模块,不会有扩散性; 易于扩展,可以给某个单独模块提升扩展; 1.2 问题 微服务是基于分布式的系统,

- 阅读全文 -

MySQL查询的执行过程概述

一、MySQL查询时的简要执行过程 连接器 查询缓存 解析器 预处理 优化器 执行器 二、连接器 TCP 三次握手; 校验用户的账号密码; 根据用户分配权限,对用户修改权限不影响当前会话; 三、查询缓存 查询缓存(Query Cache)以 key-value 键值对的形式存储。key 就是 SQL 语句,必须完全对应。同时如果对数据表内的一条数据进行更新,就会导致整张表的查询缓存失效。

- 阅读全文 -