- 博客(14)
- 收藏
- 关注
原创 redis ae事件
事件Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件:文件事件(file event)Redis服务器通过套接字与客户端进行连接,而文件事件就是服务器对套接字操作的抽象。服务器与和客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列的网络通信操作。时间事件(time event)Redis服务器中的一些操作(比如serverCron函数)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。文件事件...
2021-08-13 15:04:57 366 1
原创 redis数据结构 - object
各种数据结构 ( sds、dict、skiplist、intset、ziplist 等 ),作为 Redis对外提供的各种数据类型的底层组成部分;但是各种数据类型的键值对并不是直接使用这些数据结构,而是基于这些数据结构构建了一个对象系统(字符串对象、列表对象、哈希对象、集合对象、有序集合对象 )每种对象都至少使用了一种数据结构。对象特性Redis 在执行命令之前,根据对象的类型就可以判断 命令是否可以执行依托对象,可以针对不同的使用场景,为对象设置不同的数据结构实现...
2021-08-13 13:47:33 177
原创 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 152
原创 redis数据结构 - 字典
字典。用于保存键值对,每个键都是唯一的,dict基于哈希表算法,采用某个哈希函数从key计算得到哈希表种的位置。采用拉链法解决冲突,在装载因子(load factor)超过预定值时自动扩展内存,引发重哈希(rehashing)redis 字典采用增量式重哈希算法(incremental rehashing),在需要扩展内存时避免一次性对所有key进行重哈希,而是将重哈希操作分散到对于dict的各个增删改查的操作中去。每次只对一小部分key进行重哈希,每次重哈希之间不影响dict的操作。从而避免了重哈希期
2021-08-03 20:41:07 115
原创 redis数据结构 - SDS
简单动态字符串有5种类型,分别对应不同长度的sds: sdshdr5、sdshdr8、sdshdr16、sdshdr32、sdshdr64使用__attribute__ ((__packed__))定义sdshdr,告诉编译器取消字节对齐,结构体成员在内存空间上都是连续的,使用sds的小标可以直接指向sdshdr中的其他成员sdshdrlen :sds已使用的长度alloc:包括头部与已使用+未使用的空间占用的大小flags:标识sdshdr类型char buf[]:sds,柔性数组,起到.
2021-08-02 22:07:30 233
原创 线程
线程的概念会话是用来承载进程组的,里面可以有一个或多个进程,一个线程中可以有一个或多个线程线程的本质就是一个正在运行的函数 ,线程没有主次之分,多个线程之间共享内存线程的调度取决于调度器策略posix线程是一套标准,而不是实现,我们主要讨论这套标准线程标识 pthead_t 类型不确定线程的创建pthread_equal 比较两个线程id,相同返回0pthread_self 获取当前线程idpthread_create 创建线程int pthread_equal(pthrea
2021-04-25 23:11:36 92
原创 信号
信号的概念信号是软件中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法信号的响应依赖于中断signalvoid (*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 150
原创 进程
进程环境进程的终止正常终止从main函数返回调用exit调用_exit或者_Exit最后一个线程从其启动例程返回最后一个线程调用pthread_exit异常终止调用abort接到一个信号并终止最后一个线程对其取消请求作出响应钩子函数 atexitint atexit(void (*function)(void));注册函数、函数将在程序正常终止后被调用All functions registered with atexit(3) and on_exit(3)
2021-04-25 22:51:31 187
原创 文件系统
目录与文件获取文件属性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 81
原创 文件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文件ior
2021-04-07 23:47:42 63
原创 标准IO
I/0 是一切实现的基础,可以通过stdio或通过sysio直接对话kernelstdio 标准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 103
原创 MySQL - 视图、存储过程
使用视图 视图是虚拟的表,只包含使用时动态检索数据的查询 视图不包含数据,每次使用视图时,都必须处理查询执行时所需的任一个检索 应用: 创建不受特定数据限制的视图,简化复杂的sql操作,可以一次性编写基础的sql,然后根据需要多次使用。例如: 创建视图,联结三个表,返回已订购了任意产品的所有客户列表: CREATE VIEW productcustomers AS SELECT c...
2020-08-01 10:18:04 251
原创 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 103
原创 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 216
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人