摘要:
当要将一个新的键值对添加到字典里面时, 程序需要先根据键值对的键计算出哈希值和索引值, 然后再根据索引值, 将包含新键值对的哈希表节点放到哈希表数组的指定索引上面。 Redis 计算哈希值和索引值的方法如下: # 使用字典设置的哈希函数,计算键 key 的哈希值 hash = dict->type- 阅读全文
摘要:
Redis 的字典使用哈希表作为底层实现, 一个哈希表里面可以有多个哈希表节点, 而每个哈希表节点就保存了字典中的一个键值对。 接下来的三个小节将分别介绍 Redis 的哈希表、哈希表节点、以及字典的实现。 哈希表 Redis 字典所使用的哈希表由 dict.h/dictht 结构定义: typed 阅读全文
摘要:
字典 字典, 又称符号表(symbol table)、关联数组(associative array)或者映射(map), 是一种用于保存键值对(key-value pair)的抽象数据结构。 在字典中, 一个键(key)可以和一个值(value)进行关联(或者说将键映射为值), 这些关联的键和值就被 阅读全文
摘要:
每个链表节点使用一个 adlist.h/listNode 结构来表示: typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value; } lis 阅读全文
摘要:
链表 链表提供了高效的节点重排能力, 以及顺序性的节点访问方式, 并且可以通过增删节点来灵活地调整链表的长度。 作为一种常用数据结构, 链表内置在很多高级的编程语言里面, 因为 Redis 使用的 C 语言并没有内置这种数据结构, 所以 Redis 构建了自己的链表实现。 链表在 Redis 中的应 阅读全文
摘要:
根据传统, C 语言使用长度为 N+1 的字符数组来表示长度为 N 的字符串, 并且字符数组的最后一个元素总是空字符 '\0' 。 比如说, 图 2-3 就展示了一个值为 "Redis" 的 C 字符串: C 语言使用的这种简单的字符串表示方式, 并不能满足 Redis 对字符串在安全性、效率、以及 阅读全文
摘要:
Redis简单动态字符串 Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串表示。 在 Redis 阅读全文
摘要:
这个问题好像和长时间连接数据库但不打开网页时,报错lost connection是一个原因 问题: 写了一个基于apscheduler的定时任务,里面的任务使用了sqlalchemy,大致如下: scheduler.py # ... # 此处省略 import # 示例任务1 def example 阅读全文
摘要:
在 Python 开发中,yield 关键字的使用其实较为频繁,例如大集合的生成,简化代码结构、协程与并发都会用到它。 但是,你是否真正了解 yield 的运行过程呢? 这篇文章,我们就来看一下 yield 的运行流程,以及在开发中哪些场景适合使用 yield。 生成器 如果在一个方法内,包含了 y 阅读全文
摘要:
使用 Scrapy 开发一个爬虫非常简单,这里使用 Scrapy 官网上的例子来说明如何编写一个简单爬虫: 简单来讲,编写和运行一个爬虫只需以下几步: 使用 scrapy startproject 命令创建一个爬虫模板,或自己按模板编写爬虫代码 定义一个爬虫类,并继承 scrapy.Spider,然 阅读全文