Skip to content

Commit d4fea22

Browse files
authored
Merge pull request Snailclimb#289 from dongzl/master
阅读PDF 第六部分 至 第十三部分文章,修正其中一些小错误
2 parents 274c6d4 + 55bd22b commit d4fea22

File tree

5 files changed

+71
-67
lines changed

5 files changed

+71
-67
lines changed

docs/dataStructures-algorithms/数据结构.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且
112112

113113
[完全二叉树](https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91)(百度百科)
114114

115-
完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树
115+
完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树
116116
* ### 3 满二叉树
117117

118118
[满二叉树](https://baike.baidu.com/item/%E6%BB%A1%E4%BA%8C%E5%8F%89%E6%A0%91)(百度百科,国内外的定义不同)
@@ -122,7 +122,7 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且
122122

123123
[数据结构之堆的定义](https://blog.csdn.net/qq_33186366/article/details/51876191)
124124

125-
堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆
125+
堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆
126126
* ### 4 二叉查找树(BST)
127127

128128
[浅谈算法和数据结构: 七 二叉查找树](http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html)
@@ -131,7 +131,7 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且
131131

132132
1. 若任意节点的左子树不空,则左子树上所有结点的 值均小于它的根结点的值;
133133
2. 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
134-
3. 任意节点的左、右子树也分别为二叉查找树
134+
3. 任意节点的左、右子树也分别为二叉查找树
135135
4. 没有键值相等的节点(no duplicate nodes)。
136136

137137
* ### 5 平衡二叉树(Self-balancing binary search tree)
@@ -144,7 +144,7 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且
144144
2. 根节点总是黑色的;
145145
3. 每个叶子节点都是黑色的空节点(NIL节点);
146146
4. 如果节点是红色的,则它的子节点必须是黑色的(反之不一定);
147-
5. 从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)
147+
5. 从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)
148148

149149
- 红黑树的应用:
150150

@@ -166,9 +166,9 @@ Set 继承于 Collection 接口,是一个不允许出现重复元素,并且
166166

167167
[《B-树,B+树与B*树的优缺点比较》](https://blog.csdn.net/bigtree_3721/article/details/73632405)
168168

169-
B-树(或B树)是一种平衡的多路查找(又称排序)树,在文件系统中有所应用。主要用作文件的索引。其中的B就表示平衡(Balance)
169+
B-树(或B树)是一种平衡的多路查找又称排序树,在文件系统中有所应用。主要用作文件的索引。其中的B就表示平衡(Balance)
170170
1. B+ 树的叶子节点链表结构相比于 B- 树便于扫库,和范围检索。
171-
2. B+树支持range-query(区间查询)非常方便,而B树不支持。这是数据库选用B+树的最主要原因。
171+
2. B+树支持range-query区间查询非常方便,而B树不支持。这是数据库选用B+树的最主要原因。
172172
3. B\*树 是B+树的变体,B\*树分配新结点的概率比B+树要低,空间使用率更高;
173173
* ### 8 LSM 树
174174

docs/database/Redis/Redis.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
### redis 简介
2626

27-
简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。
27+
简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。
2828

2929
### 为什么要用 redis/为什么要用缓存
3030

@@ -84,7 +84,7 @@ String数据结构是简单的key-value类型,value其实不仅可以是String
8484
#### 2.Hash
8585
> **常用命令:** hget,hset,hgetall 等。
8686
87-
Hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。 比如我们可以Hash数据结构来存储用户信息,商品信息等等。比如下面我就用 hash 类型存放了我本人的一些信息:
87+
hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。 比如我们可以 hash 数据结构来存储用户信息,商品信息等等。比如下面我就用 hash 类型存放了我本人的一些信息:
8888

8989
```
9090
key=JavaUser293847
@@ -128,7 +128,7 @@ sinterstore key1 key2 key3 将交集存在key1内
128128

129129
和set相比,sorted set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。
130130

131-
**举例:** 在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 SortedSet 结构进行存储。
131+
**举例:** 在直播系统中,实时排行信息包含直播间在线用户列表,各种礼物排行榜,弹幕消息(可以理解为按消息维度的消息排行榜)等信息,适合使用 Redis 中的 Sorted Set 结构进行存储。
132132

133133

134134
### redis 设置过期时间
@@ -160,7 +160,7 @@ redis 配置文件 redis.conf 中有相关注释,我这里就不贴了,大
160160
1. **volatile-lru**:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
161161
2. **volatile-ttl**:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
162162
3. **volatile-random**:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰
163-
4. **allkeys-lru**:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的).
163+
4. **allkeys-lru**:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
164164
5. **allkeys-random**:从数据集(server.db[i].dict)中任意选择数据淘汰
165165
6. **no-eviction**:禁止驱逐数据,也就是说当内存不足以容纳新写入数据时,新写入操作会报错。这个应该没人使用吧!
166166

@@ -172,7 +172,7 @@ redis 配置文件 redis.conf 中有相关注释,我这里就不贴了,大
172172

173173
很多时候我们需要持久化数据也就是将内存中的数据写入到硬盘里面,大部分原因是为了之后重用数据(比如重启机器、机器故障之后回复数据),或者是为了防止系统故障而将数据备份到一个远程位置。
174174

175-
Redis不同于Memcached的很重一点就是,Redis支持持久化,而且支持两种不同的持久化操作。**Redis的一种持久化方式叫快照(snapshotting,RDB),另一种方式是只追加文件(append-only file,AOF)**.这两种方法各有千秋,下面我会详细这两种持久化方法是什么,怎么用,如何选择适合自己的持久化方法。
175+
Redis不同于Memcached的很重一点就是,Redis支持持久化,而且支持两种不同的持久化操作。**Redis的一种持久化方式叫快照(snapshotting,RDB)另一种方式是只追加文件(append-only file,AOF)**这两种方法各有千秋,下面我会详细这两种持久化方法是什么,怎么用,如何选择适合自己的持久化方法。
176176

177177
**快照(snapshotting)持久化(RDB)**
178178

@@ -182,9 +182,9 @@ Redis可以通过创建快照来获得存储在内存里面的数据在某个时
182182

183183
```conf
184184
185-
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
185+
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
186186
187-
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
187+
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
188188
189189
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,Redis就会自动触发BGSAVE命令创建快照。
190190
```
@@ -202,9 +202,9 @@ appendonly yes
202202
在Redis的配置文件中存在三种不同的 AOF 持久化方式,它们分别是:
203203

204204
```conf
205-
appendfsync always #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度
205+
appendfsync always #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度
206206
appendfsync everysec #每秒钟同步一次,显示地将多个写命令同步到硬盘
207-
appendfsync no #让操作系统决定何时进行同步
207+
appendfsync no #让操作系统决定何时进行同步
208208
```
209209

210210
为了兼顾数据和写入性能,用户可以考虑 appendfsync everysec选项 ,让Redis每秒同步一次AOF文件,Redis性能几乎没受到任何影响。而且这样即使出现系统崩溃,用户最多只会丢失一秒之内产生的数据。当硬盘忙于执行写入操作的时候,Redis还会优雅的放慢自己的速度以便适应硬盘的最大写入速度。
@@ -219,7 +219,7 @@ Redis 4.0 开始支持 RDB 和 AOF 的混合持久化(默认关闭,可以通
219219

220220
AOF重写可以产生一个新的AOF文件,这个新的AOF文件和原有的AOF文件所保存的数据库状态一样,但体积更小。
221221

222-
AOF重写是一个有歧义的名字,该功能是通过读取数据库中的键值对来实现的,程序无须对现有AOF文件进行任伺读入、分析或者写入操作。
222+
AOF重写是一个有歧义的名字,该功能是通过读取数据库中的键值对来实现的,程序无须对现有AOF文件进行任何读入、分析或者写入操作。
223223

224224
在执行 BGREWRITEAOF 命令时,Redis 服务器会维护一个 AOF 重写缓冲区,该缓冲区会在子进程创建新AOF文件期间,记录服务器执行的所有写命令。当子进程完成创建新AOF文件的工作之后,服务器会将重写缓冲区中的所有内容追加到新AOF文件的末尾,使得新旧两个AOF文件所保存的数据库状态一致。最后,服务器用新的AOF文件替换旧的AOF文件,以此来完成AOF文件重写操作
225225

@@ -232,7 +232,7 @@ AOF重写是一个有歧义的名字,该功能是通过读取数据库中的
232232

233233
Redis 通过 MULTI、EXEC、WATCH 等命令来实现事务(transaction)功能。事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。
234234

235-
在传统的关系式数据库中,常常用 ACID 性质来检验事务功能的可靠性和安全性。在 Redis 中,事务总是具有原子性(Atomicity)、一致性(Consistency)和隔离性(Isolation),并且当 Redis 运行在某种特定的持久化模式下时,事务也具有持久性(Durability)。
235+
在传统的关系式数据库中,常常用 ACID 性质来检验事务功能的可靠性和安全性。在 Redis 中,事务总是具有原子性(Atomicity、一致性Consistency和隔离性(Isolation),并且当 Redis 运行在某种特定的持久化模式下时,事务也具有持久性(Durability)。
236236

237237
### 缓存雪崩和缓存穿透问题解决方案
238238

0 commit comments

Comments
 (0)