- 博客(14)
- 收藏
- 关注
原创 redis ae事件
事件 Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件(file event) Redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。 服务器与和客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列的网络通信操作。 时间事件(time event) Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。 文件事件 ...
2021-08-13 15:04:57
472
原创 redis数据结构 - object
各种数据结构 ( sds、dict、skiplist、intset、ziplist 等 ),作为 Redis对外提供的各种数据类型的底层组成部分;但是各种数据类型的键值对并不是直接使用这些数据结构,而是基于这些数据结构构建了一个对象系统(字符串对象、列表对象、哈希对象、集合对象、有序集合对象 ) 每种对象都至少使用了一种数据结构。 对象特性 Redis 在执行命令之前,根据对象的类型就可以判断 命令是否可以执行 依托对象,可以针对不同的使用场景,为对象设置不同的数据结构实现...
2021-08-13 13:47:33
259
原创 redis数据结构 - 整数集合
整数集合在 Redis 中用于保存整数值的集合抽象数据结构,它可以保存 int16_t / int32_t / int64_t 三种类型的整数值,并且保证没有重复;整数集合的结构体如下: typedef struct intset { uint32_t encoding; /* 编码方式 */ uint32_t length; /* 集合的元素数量 */ int8_t contents[]; /* 保存元素的数组 */ } intset; ...
2021-08-12 10:19:43
222
原创 redis数据结构 - 字典
字典。用于保存键值对,每个键都是唯一的,dict基于哈希表算法,采用某个哈希函数从key计算得到哈希表种的位置。采用拉链法解决冲突,在装载因子(load factor)超过预定值时自动扩展内存,引发重哈希(rehashing) redis 字典采用增量式重哈希算法(incremental rehashing),在需要扩展内存时避免一次性对所有key进行重哈希,而是将重哈希操作分散到对于dict的各个增删改查的操作中去。每次只对一小部分key进行重哈希,每次重哈希之间不影响dict的操作。从而避免了重哈希期
2021-08-03 20:41:07
182
原创 redis数据结构 - SDS
简单动态字符串 有5种类型,分别对应不同长度的sds: sdshdr5、sdshdr8、sdshdr16、sdshdr32、sdshdr64 使用__attribute__ ((__packed__))定义sdshdr,告诉编译器取消字节对齐,结构体成员在内存空间上都是连续的,使用sds的小标可以直接指向sdshdr中的其他成员 sdshdr len :sds已使用的长度 alloc:包括头部与已使用+未使用的空间占用的大小 flags:标识sdshdr类型 char buf[]:sds,柔性数组,起到.
2021-08-02 22:07:30
441
原创 线程
线程的概念 会话是用来承载进程组的,里面可以有一个或多个进程,一个线程中可以有一个或多个线程 线程的本质就是一个正在运行的函数 ,线程没有主次之分,多个线程之间共享内存 线程的调度取决于调度器策略 posix线程是一套标准,而不是实现,我们主要讨论这套标准 线程标识 pthead_t 类型不确定 线程的创建 pthread_equal 比较两个线程id,相同返回0 pthread_self 获取当前线程id pthread_create 创建线程 int pthread_equal(pthrea
2021-04-25 23:11:36
142
原创 信号
信号的概念 信号是软件中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法 信号的响应依赖于中断 signal void (*signal(int signum,void (*func)(int)))(int) typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); handler:信号的处理 * SIG_IGN, 指示内核忽略此信号,SIGKILL、SIG
2021-04-25 23:01:09
230
原创 进程
进程环境 进程的终止 正常终止 从main函数返回 调用exit 调用_exit或者_Exit 最后一个线程从其启动例程返回 最后一个线程调用pthread_exit 异常终止 调用abort 接到一个信号并终止 最后一个线程对其取消请求作出响应 钩子函数 atexit int atexit(void (*function)(void)); 注册函数、函数将在程序正常终止后被调用 All functions registered with atexit(3) and on_exit(3)
2021-04-25 22:51:31
256
原创 文件系统
目录与文件 获取文件属性 stat 通过文件路径获取属性 fstat 通过文件描述符获取属性 lstat 面对符号链接文件时,获取的是符号链接文件的属性,而stat获取的是所指目标文件的属性 int stat(const char *pathname, struct stat *statbuf); - int fstat(int fd, struct stat *statbuf); - int lstat(const char *pathname, struct stat *statbuf); str
2021-04-08 00:00:49
136
原创 文件IO
文件IO操作 文件描述符fd: 整型数,数组下标。文件描述符优先使用当前可用范围内最小的 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); flags必须包含以下至少一个:O_RDONLY、O_WRONLY、O_RDWR 文件创建选项: O_CREATE 有则清空、无则创建 O_TRUNC 截断 O_APPEND 追加 标准io 文件io r
2021-04-07 23:47:42
111
原创 标准IO
I/0 是一切实现的基础,可以通过stdio或通过sysio直接对话kernel stdio 标准io(优先使用):合并系统调用sysio, FILE类型贯穿始终 sysio 系统调用io(文件io) 基本操作 fopen、 fclose 文件打开、关闭 fgetc、fputc、fgets、fputs 字符、字符串读写 fread、write、printf、scanf fgets() 遇到 size-1 or '\n'停止 fgets() 返回字符串或者null fgets(buf,
2021-04-06 22:20:36
155
原创 MySQL - 视图、存储过程
使用视图 视图是虚拟的表,只包含使用时动态检索数据的查询 视图不包含数据,每次使用视图时,都必须处理查询执行时所需的任一个检索 应用: 创建不受特定数据限制的视图,简化复杂的sql操作,可以一次性编写基础的sql,然后根据需要多次使用。例如: 创建视图,联结三个表,返回已订购了任意产品的所有客户列表: CREATE VIEW productcustomers AS SELECT c...
2020-08-01 10:18:04
319
原创 MySQL - 联结、组合查询、全文本搜索、表操作
高级联结 使用表别名 AS 自联结 查询DTNTR的供应商的生产的其他物品 SELECT prod_id, prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id = 'DTNTR') ...
2020-08-01 09:00:03
154
原创 MySQL - 检索、排序、过滤、分组
检索数据 限制结果 limit 5 返回不多于5行 limit 5, 5 从行5开始的5行 排序检索 ORDER BY 列 (可以是检索列或非检索列) ORDER BY 列1 DESC,列2 DESC,列3 DESC 降序 (如果想对多个列降序排序,必须每个列指定DESC) ASC 升序 过滤数据 =、!=、BETWEEN AND IS NULL mysql在执行匹配时,默认不区分大...
2020-07-29 23:12:23
299
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅