- 博客(16)
- 收藏
- 关注
原创 深入理解redis:整体框架
保存在内存的好处是读写很快,毕竟内存的访问速度一般都在百 ns 级别。但是,潜在的风险是一旦掉电,所有的数据都会丢失。 保存在外存,虽然可以避免数据丢失,但是受限于磁盘的慢速读写(通常在几 ms 级别),键值数据库的整体性能会被拉低。 ...
2021-01-17 23:05:11
109
原创 mysql:事务隔离
在 MySQL 中,事务支持是在引擎层实现的。你现在知道,MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。 隔离性与隔离级别 提到事务,你肯定会想到 ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),今天我们就来说说其中 I,也就是“隔离性”。 SQL 标准的事务隔离级别包括:读未提交(
2021-01-11 10:52:41
33
原创 Mysql学习:数据库锁
根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。 1.全局锁 全局锁的典型使用场景是,做全库逻辑备份。 官方自带的逻辑备份工具是 mysqldump。当 mysqldump 使用参数–single-transaction 的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。而由于 MVCC 的支持,这个过程中数据是可以正常更新的。 你一定在疑惑,有了这个功能,为什么还需要 FTWRL 呢?一致性读是好,但前提是引擎要支持这个隔离级别。比如,对于 MyISAM 这种不支
2021-01-04 09:45:14
53
原创 普通索引和唯一索引
这个记录要更新的目标页不在内存中。 这时,InnoDB 的处理流程如下:对于唯一索引来说,需要将数据页读入内存,判断到没有冲突,插入这个值,语句执行结束;对于普通索引来说,则是将更新记录在 change buffer,语句执行就结束了。 普通索引使用change buffer,可以减少内存访问,因此优先选择普通索引。 例外: 因为 merge 的时候是真正进行数据更新的时刻,而 change buffer 的主要目的就是将记录的变更动作缓存下来,所以在一个数据页做 merge 之前,change b
2020-12-21 10:42:58
38
原创 netty学习之:多路复用通讯方式
Netty架构按照Reactor模式设计和实现,它的服务端通信序列图如下: 客户端通信序列图如下: Netty 的IO线程NioEventLoop由于聚合了多路复用器Selector,可以同时并发处理成百上千个 客户端 Channel,由于读写操作都是非阻塞的,这就可以充分提升 IO 线程的运行效率,避免由于 频繁IO阻塞导致的线程挂起。 ...
2020-10-16 17:57:02
367
原创 TCP粘包问题
1. 粘包和拆包 产生TCP粘包和拆包问题的主要原因是,操作系统在发送TCP数据的时候,底层会有一个缓冲区,例如1024个字节大小,如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP则会将多个请求合并为同一个请求进行发送,这就形成了粘包问题;如果一次请求发送的数据量比较大,超过了缓冲区大小,TCP就会将其拆分为多次发送,这就是拆包,也就是将一个大的包拆分为多个小包进行发送。 2.解决方案 (1)固定长度法:客户端在发送数据包的时候,每个包都固定长度,比如1024个字节大小,如果客户端发送的数据长
2020-09-29 17:49:28
122
原创 NIO
阻塞与非阻塞:进程在访问某个资源时,是否等待 阻塞:等待资源准备就绪再返回 非阻塞:不等,直接返回,隔一会过来看看 同步与异步:访问数据时,是否等待IO完成 同步:等待 异步:干别的,等着IO通知 NIO:同步非阻塞IO 请求后干别的,一会来查一下,IO操作需要等待 ...
2020-09-04 18:32:55
90
原创 Redis Cluster模式介绍与部署
一、数据分布 redis cluster采用哈希分区规则:离散度好、数据分布业务无关、无法顺序访问 1.节点取余分区:hask(key)%N,N为节点数量 优点:简单,常用于数据库分库分表 缺点:节点数量变化导致数据重新迁移 2.一致性哈希分区:每个节点分配一个token,构成一个哈希环,根据哈希值在环上找到第一个大于等于该哈希值的token节点 优点:节点的变动只影响相邻节点数据 缺点:节点变动导致数据无法移动,节点越小影响范围越大 3.虚拟槽分区 使用哈希函数把数据映射到固定范围的整数
2020-08-14 18:59:58
239
原创 CopyOnWriteArrayList源码解析
ArrayList ArrayList基于数组方式实现,无容量的限制(会扩容) 添加元素时可能要扩容(所以最好预判一下),删除元素时不会减少容量(若希望减少容量,trimToSize()),删除元素时,将删除掉的位置元素置为null,下次gc就会回收这些元素所占的内存空间。 线程不安全 add(int index, E element):添加元素到数组中指定位置的时候,需要将该位置及其后边所有的元素都整块向后复制一位 get(int index):获取指定位置上的元素时,可以通过索引直接获取(O(1))
2020-07-31 16:21:29
155
原创 ElasticSearch学习笔记三:es kibana操作语句
索引基本操作 1.新建索引 PUT employees 2.新建mapping POST /employees/_doc/_mapping { "properties": { "birth_date": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" }, "emp_no": { "type": "long" }, "first_name": { "type": "text", "fields": { "keyword":
2020-07-24 18:37:09
357
原创 ElasticSearch学习三:安全相关配置
一:集群身份认证与用户鉴权 elasticsearch默认是没有开启任何安全防范措施的,任何人只要知道了IP和端口就可以访问数据。为此,可以通过x-pack插件开启用户身份认证与鉴权功能。 1.安装x-pack 下载安装包x-pack-6.2.3.zip elasticsearch上安装x-pack 在每个es节点上执行 bin/elasticsearch-plugin install file:x-pack-6.2.3.zip kibana上安装x-pack 在安装kibana的机器上执行
2020-07-17 18:38:02
480
原创 ElasticSearch学习笔记二:基本概念
基本概念 近实时(NRT) Elasticsearch是近实时搜索平台,从索引文档到可搜索到这段时间之间存在少许延迟(通常为一秒钟)。 簇 集群是一个或多个节点(服务器)的集合,这些节点一起保存您的全部数据,并在所有节点之间提供联合索引和搜索功能。集群由唯一名称标识,默认情况下为“ elasticsearch”。该名称很重要,因为如果节点被设置为通过其名称加入群集,则该节点只能是群集的一部分。确保不要在不同的环境中重复使用相同的集群名称,否则最终可能会导致节点加入了错误的集群。 节点 ...
2020-07-12 19:41:29
192
原创 ElasticSearch学习笔记一:安装ES,kibana
一.ES安装部署 1.安装ES linux系统安装 1.下载安装包 curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz 2.解压 tar -xzvf elasticsearch-7.8.0-linux-x86_64.tar.gz 3.进入目录 cd elasticsearch-7.8.0 4.启动 ./bin/elasticsearch
2020-07-03 18:45:24
328
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人