redis高级篇之redis源码分析List类型quicklist底层演变 答疑159节
(1)ziplist压缩配置:list-compress-depth 0
表示一个quicklist两端不被压缩的节点个数。这里的节点是指quicklist双向链表的节点,而不是指ziplist里面的数据项个数参数list-compress-depth的取值含义如下: 0:是个特殊值,表示都不压缩。这是Redis的默认值。
1:表示quicklist两端各有1个节点不压缩,中间的节点压缩。
2:表示quicklist两端各有2个节点不压缩,中间的节点压缩。
3:表示quicklist两端各有3个节点不压缩,中间的节点压缩,
---压缩什么呢?怎么压缩?winzip?
在 Redis 中,`quicklist` 是一种优化后的链表结构,它结合了双向链表和压缩列表(ziplist)的优点,以提高内存效率和操作性能。`list-compress-depth` 配置参数用于控制 `quicklist` 中节点的压缩策略。
### 压缩什么?
在 `quicklist` 中,每个节点实际上是一个 `ziplist`。`list-compress-depth` 配置参数决定了 `quicklist` 中哪些节点会被压缩。具体来说:
- **节点**:这里指的是 `quicklist` 的节点,每个节点包含一个 `ziplist`。
- **压缩**:指的是对 `ziplist` 进行压缩,而不是对 `ziplist` 内部的每个数据项进行压缩。
### 压缩策略
- **0**:表示不压缩任何节点,这是 Redis 的默认值。
- **1**:表示 `quicklist` 两端各有 1 个节点不压缩,中间的节点会被压缩。
- **2**:表示 `quicklist` 两端各有 2 个节点不压缩,中间的节点会被压缩。
- **3**:表示 `quicklist` 两端各有 3 个节点不压缩,中间的节点会被压缩。
### 怎么压缩?
Redis 使用的是 LZF 压缩算法,而不是像 WinZip 那样的文件压缩工具。LZF 是一种轻量级的、快速的压缩算法,适合用于实时应用中。
### 压缩和解压缩的过程
1. **压缩**:
- 当一个 `quicklist` 节点需要被压缩时,Redis 会使用 LZF 算法对该节点中的 `ziplist` 进行压缩。
- 压缩后的数据存储在该节点中,并标记为压缩状态。
2. **解压缩**:
- 当需要访问一个被压缩的节点时,Redis 会首先解压缩该节点,然后再进行访问。
- 解压缩后的数据暂时保存在内存中,供当前操作使用。
### 为什么压缩?
压缩 `quicklist` 中间的节点可以显著减少内存使用量,尤其是在有大量数据的情况下。通过压缩那些不常访问的节点,可以在不影响访问性能的前提下,节省大量内存。
### 示例
假设你有一个 `quicklist`,并且 `list-compress-depth` 设置为 2:
- `quicklist` 的头部和尾部各有 2 个节点不被压缩。
- 中间的节点会被压缩。
这种配置适用于数据访问模式较为集中在两端的情况,例如队列操作(FIFO/LIFO),这样可以在保证性能的同时,最大限度地节省内存。
### 代码示例
以下是一个简单的示例,展示了如何设置 `list-compress-depth`:
```conf
# redis.conf 文件中
list-compress-depth 2
```
通过这种配置,你可以控制 `quicklist` 的压缩策略,从而在性能和内存使用之间找到最佳平衡点。
### 总结
`list-compress-depth` 是一个控制 `quicklist` 节点压缩策略的重要参数,通过合理设置这个参数,可以在保证性能的同时,显著减少内存使用。Redis 使用 LZF 算法进行压缩,适合实时应用中的压缩需求。
==============
(2)ziplist中entry配置:list-max-ziplist-size -2当取正值的时候,表示按照数据项个数来限定每个quicklist节点上的ziplist长度。比如,当这个参数配置成5的时候,表示每个quicklist节点的ziplist最多包含5个数据项。当取负值的时候,表示按照古用字节数来限定每个quicklist节点上的ziplist长度。这时,它只能取-1到-5这五个值,每个值含义如下:
(注:1kb=>1024 bytes)5:每个quicklist节点上的ziplist大小不能超过64 Kb。
-4:每个quicklist节点上的ziplist大小不能超过32 Kb.
-3:每个quicklist节点上的ziplist大小不能超过16 Kb,
-2:每个quicktist节点上的ziplist大小不能超过8 Kb.2是Redis给出的默认值)
-1:每个quicklist节点上的ziplist大小不能超过4 Kb
---什么叫quicklist节点上的ziplist长度,意思quicklist上有10个节点,就有10个ziplist吗,list里面套list不成了个二维数组?有必要吗?
你的理解基本正确,但稍微有些细节需要澄清。`quicklist` 是 Redis 中一种优化后的链表结构,它结合了双向链表和压缩列表(ziplist)的优点,以提高内存效率和操作性能。
### Quicklist 和 Ziplist 的关系
- **Quicklist**:是一个双向链表,每个节点(node)包含一个 `ziplist`。
- **Ziplist**:是一种紧凑的数据结构,用于存储多个小数据项,以节省内存。
所以,`quicklist` 的每个节点确实包含一个 `ziplist`。这样设计的目的是为了提高内存利用率和操作效率。
### 为什么使用这种设计?
1. **内存效率**:`ziplist` 是一种紧凑的数据结构,适合存储小数据项。通过将多个小数据项紧凑地存储在一个 `ziplist` 中,可以显著减少内存开销。
2. **操作效率**:`quicklist` 结合了双向链表的快速插入和删除操作,以及 `ziplist` 的紧凑存储优点。这样设计使得在进行队列操作(如 `LPUSH`, `RPUSH`, `LPOP`, `RPOP`)时,既能保持高效的操作速度,又能节省内存。
### `list-max-ziplist-size` 配置参数
这个参数用于控制每个 `quicklist` 节点中 `ziplist` 的大小,可以通过数据项个数或字节数来限制。
- **正值**:表示按照数据项个数来限定每个 `ziplist` 的长度。
- 例如,配置为 `5` 表示每个 `ziplist` 最多包含 5 个数据项。
- **负值**:表示按照字节数来限定每个 `ziplist` 的长度。
- -1:每个 `ziplist` 不超过 4 KB。
- -2:每个 `ziplist` 不超过 8 KB(默认值)。
- -3:每个 `ziplist` 不超过 16 KB。
- -4:每个 `ziplist` 不超过 32 KB。
- -5:每个 `ziplist` 不超过 64 KB。
### 具体示例
假设你有一个 `quicklist`,并且配置 `list-max-ziplist-size` 为 `-2`(默认值),表示每个 `ziplist` 的大小不能超过 8 KB。
- **插入数据**:当你向 `quicklist` 中插入数据时,Redis 会将数据插入到当前节点的 `ziplist` 中,直到该 `ziplist` 的大小达到 8 KB。
- **创建新节点**:一旦当前 `ziplist` 达到 8 KB,Redis 会创建一个新的 `quicklist` 节点,并在新的节点中创建一个新的 `ziplist`,继续插入数据。
### 是否有必要?
这种设计有其实际意义和必要性:
1. **内存优化**:通过将数据紧凑地存储在 `ziplist` 中,可以显著减少内存开销,特别是对于存储大量小数据项的场景。
2. **操作优化**:结合双向链表和 `ziplist` 的优点,使得插入、删除和访问操作都非常高效。
3. **灵活性**:通过配置参数,可以灵活地调整 `ziplist` 的大小,以适应不同的使用场景和性能需求。
### 总结
`quicklist` 结合了双向链表和 `ziplist` 的优点,通过配置参数 `list-max-ziplist-size` 可以灵活地控制每个 `ziplist` 的大小。每个 `quicklist` 节点包含一个 `ziplist`,这种设计既提高了内存利用率,又保证了操作效率。虽然看起来像是“list 套 list”,但实际上这种设计非常适合 Redis 的使用场景,特别是对于需要高效存储和操作大量小数据项的应用。
=============
意思是,quicklist有10个节点,每个节点有一个ziplist,每个ziplist里面可能存放一个或多个元素,把所有节点上的ziplist里面的元素首尾相连就能到所有的元素?
是的,你的理解是正确的。每个 `quicklist` 节点包含一个 `ziplist`,而每个 `ziplist` 里面可以存放一个或多个元素。所有节点上的 `ziplist` 里面的元素首尾相连,就形成了整个 `quicklist` 的完整数据。
### 具体流程
1. **插入数据**:
- 当你向 `quicklist` 中插入数据时,Redis 会将数据插入到当前节点的 `ziplist` 中。
- 如果当前 `ziplist` 达到配置的大小限制(通过 `list-max-ziplist-size` 控制),Redis 会创建一个新的 `quicklist` 节点,并在新节点中创建一个新的 `ziplist`,继续插入数据。
2. **读取数据**:
- 当你读取 `quicklist` 中的数据时,Redis 会按照节点的顺序,将每个节点中的 `ziplist` 按顺序连接起来,形成一个完整的列表。
### 具体示例
假设你有一个 `quicklist`,并且配置 `list-max-ziplist-size` 为 `-2`(即每个 `ziplist` 的大小不能超过 8 KB)。
- **插入数据**:
- 你插入了 20 个元素。
- 假设每个 `ziplist` 可以存放 5 个元素,那么 `quicklist` 会有 4 个节点,每个节点包含一个 `ziplist`,每个 `ziplist` 包含 5 个元素。
- **读取数据**:
- 当你读取 `quicklist` 中的数据时,Redis 会按照节点的顺序,将 4 个节点中的 `ziplist` 按顺序连接起来,形成一个包含 20 个元素的完整列表。
### 优点
- **内存效率**:通过将数据紧凑地存储在 `ziplist` 中,可以显著减少内存开销。
- **操作效率**:结合双向链表和 `ziplist` 的优点,使得插入、删除和访问操作都非常高效。
### 总结
`quicklist` 通过结合双向链表和 `ziplist` 的优点,既提高了内存利用率,又保证了操作效率。每个 `quicklist` 节点包含一个 `ziplist`,所有节点上的 `ziplist` 里面的元素首尾相连,就能得到整个 `quicklist` 的完整数据。这样设计非常适合 Redis 的使用场景,特别是对于需要高效存储和操作大量小数据项的应用。
Quicklist 与 Ziplist 详解:Redis 的高效数据结构
在 Redis 中,quicklist
是一种优化后的链表结构,它结合了双向链表和压缩列表(ziplist)的优点,以提高内存效率和操作性能。理解 quicklist
的内部结构和工作原理,可以帮助开发者更好地利用 Redis 的特性,优化存储和访问数据的方式。
1. Quicklist 的基本结构
quicklist
是一个双向链表,每个节点(node)包含一个 ziplist
。这种设计的目的在于:
- 内存效率:
ziplist
是一种紧凑的数据结构,适合存储多个小数据项。通过将多个小数据项紧凑地存储在一个ziplist
中,可以显著减少内存开销。 - 操作效率:结合双向链表的快速插入和删除操作,以及
ziplist
的紧凑存储优点,使得在进行队列操作(如LPUSH
,RPUSH
,LPOP
,RPOP
)时,既能保持高效的操作速度,又能节省内存。
2. Quicklist 和 Ziplist 的关系
在 quicklist
中,每个节点实际上是一个 ziplist
。这种设计使得 quicklist
能够在存储和操作上实现高效性。具体而言:
- 每个
quicklist
节点:包含一个ziplist
,用于存储多个数据项。 - 节点数量:
quicklist
可以包含多个节点,每个节点的ziplist
中可以存放一个或多个元素。
3. 数据的插入与读取
3.1 插入数据
当向 quicklist
中插入数据时,Redis 会按照以下步骤进行:
- 检查当前节点的
ziplist
:首先检查当前节点的ziplist
是否已满(达到配置的大小限制,例如通过list-max-ziplist-size
控制)。 - 插入数据:如果没有满,直接将数据插入到当前节点的
ziplist
中。 - 创建新节点:如果当前
ziplist
达到大小限制,Redis 会创建一个新的quicklist
节点,并在新节点中创建一个新的ziplist
,继续插入数据。
3.2 读取数据
读取 quicklist
中的数据时,Redis 会按照节点的顺序,将每个节点中的 ziplist
按顺序连接起来,形成一个完整的列表。具体流程如下:
- 遍历节点:从
quicklist
的头节点开始,依次遍历每个节点。 - 提取数据:从每个节点的
ziplist
中提取数据,并将其连接到一起,形成完整的数据序列。
4. Quicklist 配置参数
quicklist
的行为可以通过多个配置参数进行调整,以下是一些重要参数:
4.1 list-compress-depth
- 描述:控制
quicklist
中节点的压缩策略。 - 取值:
- 0:不压缩任何节点。
- 1:两端各有 1 个节点不压缩,中间的节点会被压缩。
- 2:两端各有 2 个节点不压缩,中间的节点会被压缩。
- 3:两端各有 3 个节点不压缩,中间的节点会被压缩。
4.2 list-max-ziplist-size
- 描述:控制每个
quicklist
节点中ziplist
的大小。 - 取值:
- 正值:表示按照数据项个数来限定每个ziplist
的长度。
- 负值:表示按照字节数来限定每个ziplist
的长度。
- -1:每个ziplist
不超过 4 KB。
- -2:每个ziplist
不超过 8 KB(默认值)。
- -3:每个ziplist
不超过 16 KB。
- -4:每个ziplist
不超过 32 KB。
- -5:每个ziplist
不超过 64 KB。
5. Quicklist 的优点
quicklist
的设计带来了多个优点:
- 内存优化:通过将数据紧凑地存储在
ziplist
中,可以显著减少内存开销,尤其适合存储大量小数据项的场景。 - 操作效率:结合双向链表的快速操作特性,使得插入、删除和访问操作都非常高效。
- 灵活性:通过配置参数,可以灵活地调整
ziplist
的大小,以适应不同的使用场景和性能需求。
6. Quicklist 的应用场景
quicklist
在 Redis 的许多应用场景中扮演着重要角色,以下是一些具体的应用示例:
6.1 队列操作
在实现队列操作(如 LPUSH
和 RPOP
)时,quicklist
能够高效地处理大量数据项。由于 quicklist
的设计,队列的两端操作性能优越,适合高并发场景。
6.2 任务调度
在任务调度系统中,quicklist
可以用来存储待处理的任务。通过高效的插入和删除操作,可以快速地处理任务队列。
6.3 实时数据处理
在实时数据处理场景中,quicklist
能够快速存储和访问大量小数据项。它的高效性使得在数据流处理时能够保持良好的性能。
7. 反向遍历
如前所述,quicklist
的设计允许反向遍历。通过访问每个节点的 ziplist
,可以从最后一个元素开始向前遍历。这在某些场景中非常有用,例如:
- 撤销操作:在文本编辑器中,用户可能希望从最后一个操作开始撤销。
- 历史记录:在浏览器或应用程序中,用户可能希望查看最近的操作历史。
8. 性能评估与优化
在实施 quicklist
时,进行性能评估是非常重要的。可以通过以下方式进行评估:
- 基准测试:对
quicklist
的性能进行基准测试,记录不同数据量下的插入、删除和访问时间。 - 内存使用分析:监控内存的使用情况,确保在存储大量数据时不会出现过高的内存占用。
9. 未来的扩展与改进
随着技术的不断进步,quicklist
的实现和应用也在不断演变。未来可能出现以下趋势:
- 结合机器学习:通过结合机器学习技术,可以智能化地优化数据的存储和访问策略。
- 增强的可视化工具:开发更强大的可视化工具,使用户能够直观地理解
quicklist
的内部结构和数据流动。
10. 总结
quicklist
是 Redis 中一种高效的数据结构,通过结合双向链表和 ziplist
的优点,既提高了内存利用率,又保证了操作效率。每个 quicklist
节点包含一个 ziplist
,所有节点上的 ziplist
里面的元素首尾相连,形成整个 quicklist
的完整数据。这种设计非常适合 Redis 的使用场景,特别是对于需要高效存储和操作大量小数据项的应用。
希望这篇详细的分析能帮助你更全面地理解 quicklist
的工作原理及其在 Redis 中的重要性。如果你还有其他问题或想深入探讨的内容,请随时告诉我!
11. Quicklist 的实现细节
在深入了解 quicklist
的实现之前,我们需要关注其内部结构以及如何在内存中管理这些结构。quicklist
结合了双向链表和压缩列表(ziplist),其实现细节如下:
11.1 内部结构
quicklist
的每个节点实际上是一个 ziplist
,它的结构大致如下:
c
Copy
typedef struct quicklistNode {struct quicklistNode *prev; // 指向前一个节点struct quicklistNode *next; // 指向下一个节点unsigned char *zl; // 指向 ziplistunsigned int sz; // ziplist 的大小unsigned int count; // ziplist 中的元素数量// 其他可能的元数据
} quicklistNode;typedef struct quicklist {quicklistNode *head; // 指向头节点quicklistNode *tail; // 指向尾节点unsigned long count; // quicklist 中的节点数量
} quicklist;
11.2 节点的创建与销毁
在 quicklist
的实现中,节点的创建和销毁是非常重要的操作,直接影响到内存的使用效率和性能。
- 创建节点:当需要插入数据时,如果当前节点的
ziplist
达到大小限制,Redis 会创建一个新的quicklistNode
,并在其中分配一个新的ziplist
。
c
Copy
quicklistNode *createQuicklistNode() {quicklistNode *node = malloc(sizeof(quicklistNode));node->zl = createZiplist(); // 创建新的 ziplistnode->sz = 0;node->count = 0;node->prev = NULL;node->next = NULL;return node;
}
- 销毁节点:在移除节点时,需要确保释放内存并处理相关的清理工作。
c
Copy
void freeQuicklistNode(quicklistNode *node) {freeZiplist(node->zl); // 释放 ziplist 的内存free(node); // 释放节点本身的内存
}
12. Quicklist 的内存管理
内存管理是 quicklist
实现中的关键部分,合理的内存管理可以提高性能并减少内存碎片。
12.1 内存分配
Redis 通常使用自定义的内存分配器来管理内存,以提高性能。quicklist
的节点和 ziplist
都通过这个分配器进行管理。
12.2 内存释放
在操作 quicklist
时,确保及时释放不再使用的节点和 ziplist
,以避免内存泄漏。Redis 的内存管理策略通常会在对象不再被引用时自动释放内存。
13. Quicklist 的性能优化
为了提高 quicklist
的性能,Redis 采用了一些优化策略:
13.1 节点合并
当多个 ziplist
节点的大小较小且相邻时,Redis 可能会将它们合并为一个节点,以减少节点数量和内存开销。
13.2 懒惰释放
在某些情况下,Redis 可能会延迟释放节点的内存,直到内存压力较大时才进行清理。这种策略可以减少频繁的内存分配和释放操作,提高性能。
14. Quicklist 的使用场景
quicklist
在许多实际应用中都有重要的作用,以下是一些具体的场景:
14.1 实时数据流处理
在需要处理大量实时数据流的应用中,quicklist
提供了高效的插入和删除操作,适合用于实时数据的收集和分析。
14.2 消息队列
在实现消息队列时,quicklist
可以有效地存储和管理消息。由于其高效的队列操作,适合用于高并发的消息处理场景。
14.3 数据缓存
在实现数据缓存时,quicklist
可以用于存储缓存数据,结合压缩和紧凑存储,可以有效地利用内存。
15. Quicklist 与其他数据结构的比较
在设计数据结构时,比较不同数据结构的优缺点是非常重要的。以下是 quicklist
与其他数据结构的比较:
15.1 Quicklist vs. Linked List
- 优点:
quicklist
通过使用ziplist
提高了存储效率,而普通的链表则需要为每个节点分配额外的内存。 - 缺点:
quicklist
的访问速度可能略慢于普通链表,因为需要解压缩ziplist
。
15.2 Quicklist vs. Array
- 优点:
quicklist
支持动态大小,适合存储不确定数量的数据,而数组则需要预先定义大小。 - 缺点:随机访问速度较慢,因为需要遍历节点。
16. Quicklist 的未来发展
随着技术的不断进步,quicklist
的实现和应用也在不断演变。未来可能出现以下趋势:
16.1 更智能的压缩算法
未来的 Redis 版本可能会引入更智能的压缩算法,以进一步提高内存利用率和性能。
16.2 支持更复杂的数据类型
随着应用需求的变化,quicklist
可能会扩展以支持更复杂的数据类型,增强其灵活性和可用性。
17. 总结
quicklist
是 Redis 中一种高效的数据结构,通过结合双向链表和压缩列表的优点,既提高了内存利用率,又保证了操作效率。每个 quicklist
节点包含一个 ziplist
,所有节点上的 ziplist
里面的元素首尾相连,形成整个 quicklist
的完整数据。这种设计非常适合 Redis 的使用场景,特别是对于需要高效存储和操作大量小数据项的应用。
希望这篇详细的分析能帮助你更全面地理解 quicklist
的工作原理及其在 Redis 中的重要性。如果你还有其他问题或想深入探讨的内容,请随时告诉我!
相关文章:
redis高级篇之redis源码分析List类型quicklist底层演变 答疑159节
(1)ziplist压缩配置:list-compress-depth 0 表示一个quicklist两端不被压缩的节点个数。这里的节点是指quicklist双向链表的节点,而不是指ziplist里面的数据项个数参数list-compress-depth的取值含义如下: 0:是个特殊值,表示都不压缩。这是Redis的默认值…...
Elasticsearch 与 Lucene 的区别和联系
Elasticsearch 与 Lucene 的区别和联系 Elasticsearch 与 Lucene 的区别和联系一、知识背景Elasticsearch 简介Lucene 简介 二、Elasticsearch 和 Lucene 的区别适用场景性能优势和劣势架构设计的异同点 三、Elasticsearch和Lucene的联系四、Elasticsearch和Lucene的应用案例及…...
OpenCV视觉分析之运动分析(5)背景减除类BackgroundSubtractorMOG2的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 基于高斯混合模型的背景/前景分割算法。 该类实现了在文献[320]和[319]中描述的高斯混合模型背景减除。 cv::BackgroundSubtractorMOG2 类是 O…...
【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据
【SAP Hana】X-DOC:数据仓库ETL如何抽取SAP中的CDS视图数据 1、无参CDS对应数据库视图2、有参CDS对应数据库表函数3、封装有参CDS为无参CDS,从而对应数据库视图 1、无参CDS对应数据库视图 select * from ZFCML_REP_V where mandt 300;2、有参CDS对应数…...
WPF的UpdateSourceTrigger属性
在WPF中,UpdateSourceTrigger属性用于控制数据绑定中何时将绑定目标(通常是UI元素)的值更新回绑定源(通常是数据对象)。这个属性有以下几个值: Default:这是默认值,对于不同的绑定目…...
2024-09-25 环境变量,进程地址空间
一、认识常见的环境变量 1. echo $HOME 输出当前用户对应的家目录 当用户登录系统时,流程如下: (1)用户登录系统后,系统启动Shell程序。 (2)启动bash shell,准备接收用户指令。 &a…...
中国移动机器人将投入养老场景;华为与APUS共筑AI医疗多场景应用
AgeTech News 一周行业大事件 华为与APUS合作,共筑AI医疗多场景应用 中国移动展出人形机器人,预计投入养老等场景 作为科技与奥富能签约,共拓智能适老化改造领域 天与养老与香港科技园,共探智慧养老新模式 中山大学合作中国…...
青少年编程能力等级测评CPA C++ 四级试卷(1)
青少年编程能力等级测评CPA C 四级试卷(1) 一、单项选择题(共15题,每题3分,共45分) CP4_1_1.在面向对象程序设计中,与数据构成一个相互依存的整体的是( )。 A. 对数据…...
树上任意两点的距离
题目描述 给出 n 个点的一棵树,多次询问两点之间的最短距离。 注意:边是双向的。 输入描述 第一行为两个整数 n 和 m。n 表示点数,m 表示询问次数; 下来 n−1 行,每行三个整数 x,y,k,表示点 x 和点 y 之间…...
【 thinkphp8 】00008 thinkphp8数据查询,常用table,name方法,进行数据查询汇总
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【 t…...
Git的命令合集
关于Git的一些命令合集,会慢慢更新! 20241024程序员节开始写的,记录一下~~ git查看log、查看详细提交记录 会显示之前的提交记录 , 排序由近及远 git log log按q退出 git回退到某个commit命令: 退到/进到指定commit的sha码&…...
博客搭建之路:hexo搜索引擎收录
文章目录 hexo搜索引擎收录以百度为例 hexo搜索引擎收录 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 写博客的目的肯定不是就只有自己能看到,想让更多的人看到就需要可以让搜索引擎来收录对应的文章。hexo支持生成站点地图sitemap 在hexo下的_config.yml中配置站点…...
创建Windows系统还原点
系统保护...
Linux等保测评需要用到的命令
三权设置 查看账户情况 cd /home/ ll 设置审计账户 useradd shenji passwd shenji 修改密码 passwd新密码 设置管理账户 useradd guanli passwd guanli compgen -u 查看用户 切换到root账户 su root 设置审计用户权限 vim /etc/sudoers shenji ALL (root) NOPASSWD:…...
PostgreSQL的学习心得和知识总结(一百五十六)|auto_explain — log execution plans of slow queries
目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…...
数据结构模板代码合集(不完整)
P3368 【模板】树状数组 2 #include <bits/stdc.h> using namespace std; const int maxn 5e5 7;int n, m, s, t; int ans; int a[maxn]; struct node{int l, r;int num; }tr[maxn * 4];void build(int p, int l, int r){tr[p] {l, r, 0};if(l r){tr[p].num a[l];r…...
shell脚本语法详解
目录 shell语法基础 指定shell解析器 注释 运行 变量 定义变量 引用变量 清除变量值 从键盘获取值 输入单值 添加输入提示语 读取多值 编辑 定义只读变量 环境变量 设置环境变量与查看环境变量 特殊变量 三种引号的作用与区别 小括号与大括号 参数传递 位…...
2021亚洲机器学习会议:面向单阶段跨域检测的域自适应YOLO(ACML2021)
原文标题:Domain Adaptive YOLO for One-Stage Cross-Domain Detection 中文标题:面向单阶段跨域检测的域自适应YOLO 1、Abstract 域转移是目标检测器在实际应用中推广的主要挑战。两级检测器的域自适应新兴技术有助于解决这个问题。然而,两级…...
面试题:描述在前端开发中,如何利用数据结构来优化页面渲染性能,并给出一个具体的示例。
在前端开发中,优化页面渲染性能是提升用户体验的关键之一。合理地使用数据结构可以有效地减少DOM操作的次数、提高数据处理的效率,从而加快页面的渲染速度。以下是一些策略,并给出一个具体的示例。 1. 使用合适的数据结构 数组与对象&#…...
微积分复习笔记 Calculus Volume 1 - 3.2 he Derivative as a Function
3.2 The Derivative as a Function - Calculus Volume 1 | OpenStax...
html 轮播图效果
轮播效果: 1、鼠标没有移入到banner,自动轮播 2、鼠标移入:取消自动轮播、移除开始自动轮播 3、点击指示点开始轮播到对应位置 4、点击前一个后一个按钮,轮播到上一个下一个图片 注意 最后一个图片无缝滚动,就是先克隆第一个图片…...
Android Room(SQLite) too many SQL variables异常
SQLiteException 一、解决办法1. 修改数据库语句2. 分批执行 二、问题根源 转载请注明出处: https://blog.csdn.net/hx7013/article/details/143198862 在使用 Room 或其他基于 SQLite 的 ORM 框架时,批量操作如 IN 或 NOT IN 查询可能会触发 android.database.sqli…...
sentinel原理源码分析系列(八)-熔断
限流为了防止过度使用资源造成系统不稳,熔断是为了识别出”坏”资源,避免好的资源受牵连(雪崩效应),是保证系统稳定性的关键,也是资源有效使用的关键,sentinel熔断插槽名称Degrade(降级),本人觉得应该改为熔…...
安全见闻(4)——开阔眼界,不做井底之蛙
内容预览 ≧∀≦ゞ 安全见闻四:操作系统安全机制深度解析声明操作系统机制1. 注册表2. 防火墙3. 自启动与计划任务4. 事件日志5. 内核驱动与设备驱动6. 系统服务7. 进程与线程8. 系统编程 从操作系统机制看病毒设计1. 自启动:病毒如何在系统启动时运行&a…...
(二十二)、k8s 中的关键概念
文章目录 1、总体概览2、第一层:物理机、集群、Node、Pod 之间的关系2、第二层:命名空间 Namespace3、定义4、控制平面(Control Plane)5、特别的概念 Service6、Deployment 经过 之前几篇文章对 k8s 的实践,结合实践&…...
python基础综合案例(数据可视化-地图可视化)
1.基础地图使用 注意写名字的时候要写全名,比如上海市不能写出上海,不然看不到数据 鼠标点击即可看到数据 设置属性的时候不要忘记导包 # 演示地图可视化的基础使用 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts # 准…...
基于SpringBoot足球场在线预约系统的设计与实现
💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...
操作系统笔记(二)进程,系统调用,I/O设备
什么是进程? 一个正在执行的程序一个包含运行一个程序所需要的所有信息的容器进程的信息保存在一个进程表中( Process Table)。进程表中的每一项对应一个进程,称为进程控制块(Process control block,PCB)。 PCB信息包括: 用户ID(UID)、进程ID(PID)…...
DevOps实践:在GitLab CI/CD中集成静态分析Helix QAC的工作原理与优势
基于云的GitLab CI/CD平台使开发团队能够简化其CI/CD流程,并加速软件开发生命周期(SDLC)。 将严格的、基于合规性的静态分析(如Helix QAC所提供)作为新阶段添加到现有的GitLab CI/CD流程中,将进一步增强SD…...
前端面试题-token的登录流程、JWT
这是我的前端面试题的合集的第一篇,后面也会更新一些笔试题目。秋招很难,也快要结束了。但是,不要放弃,一起加油^_^ 一、token的登录流程 1.客户端用账号密码请求登录 2.服务端收到请求,需要去验证账号密码 3.验证成…...
wordpress获取指定图片/上海网络营销公司
今天看到了一篇文章在此 推荐一下地址为: https://blog.51cto.com/270142877/1937241转载于:https://blog.51cto.com/13120271/2164869...
校园网站集群建设/信息推广平台
重要声明:本文出自公众号:《管理的常识》"知乎7万赞回答:你思考问题的方式,决定了你的层次"一文。本人觉得写得蛮好,分享给大家,共勉!文章有点长,看完全文需要点耐心…… 所谓厉害的人࿰…...
青州哪里做网站/网络营销是什么专业类别
BI商务智能基础篇 找不到数据连接: 服务器和本地连接未同步数据库连接错误配置文件错误 解决办法 在帆软本地连接好了之后去帆软目录里把datasourcs.xml更新到服务器目录。在服务器DataSource.xml里面更新文件: <Connection name"此处是图…...
相亲网站做期货现货贵金属的人/中山360推广
Linux Command losetup 设置循环设备 文章目录Linux Command losetup 设置循环设备1. 背景2. 简介3. 语法4. 参数5. 实例5.1 示例15.2 示例21. 背景 在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备…...
世界500强企业名单/无锡百度快速优化排名
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼代码如下import java.sql.*;import java.util.Vector;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import java.sql.*;//从数据库中取出public class Test2 extends JFrame{//rowData用来…...
wordpress可爱的主题/连接交换
原标题:2020年,中小学教师职称评审制度取消?自然晋升或将成为主流从目前的情况来看,2020年前,教师职称的现有评审制度既不会取消,也不会大范围实现自然晋升,但肯定会让更多的教师从中受益&#…...