bluestore中的aio回调

在bluestore中open block时会传递一个cb函数,当对这个block异步写也就是aio写完成时会调用这个aio_cb int BlueStore::_open_bdev(bool create) { assert(bdev == NULL); string p = path ...

2018-05-04 09:47:37

阅读数:65

评论数:0

redis中io复用之select

前面讲过evport/epoll/kqueue的实现,下来我们继续看看我们select在redis中的使用 1:首先通过FD_ZERO来清空用于监控读和写fd的rfds和wfds的链表 typedef struct aeApiState { fd_set rfds, wfds; /...

2018-03-12 17:10:00

阅读数:121

评论数:0

redis中io复用之kqueue

前面讲过evport/epoll的实现,下来我们继续看看我们kqueue在redis中的使用 1:首先通过kqueue申请提供给系统监控的fd typedef struct aeApiState { int kqfd; struct kevent *events; } aeApiS...

2018-03-12 16:33:30

阅读数:100

评论数:0

redis中io复用之epoll

前面讲过evport的实现,下来我们继续看看我们epoll在redis中的使用 1:首先通过epoll_create 来新建fd 例如: typedef struct aeApiState { int epfd; struct epoll_event *events; } aeAp...

2018-03-12 15:31:13

阅读数:205

评论数:0

redis中io复用之evport

从redis中的ae.c中可以知道目前复用io的方式有下面四种 #ifdef HAVE_EVPORT #include "ae_evport.c" #else #ifdef HAVE_EPOLL #include "ae_epo...

2018-03-05 09:46:05

阅读数:271

评论数:0

redis中可以使用的内存分配的库和redis默认是被build成32位的可执行程序

在redis中的makefile中,可以看到redis可以使用四种内存管理的库分别是glibc/jemalloc/tcmalloc/tcmalloc_minimal 从Makefile中可以看出如果是linux系统的话,默认用的是jemalloc # Default allocator ifeq ...

2018-03-01 11:27:45

阅读数:57

评论数:0

redis的main函数

redis的入口函数在redis.c 中的main函数中 int main(int argc, char **argv) { // 初始化服务器配置,主要用于给struct redisServer server; 赋值,并实现一些基本的命令。,并监听clint的连接信息。 init...

2018-02-22 20:12:01

阅读数:230

评论数:0

redis中的事件处理

redis中的事件分为文件事件和时间事件。redis中用aeEventLoop 来记录事件的状态 typedef struct aeEventLoop { // 文件事件 aeFileEvent *events; /* Registered events */ // 时...

2018-02-14 08:25:18

阅读数:100

评论数:0

redis中的watch命令

watch 用于在进行事务操作的最后一步也就是在执行exec 之前对某个key进行监视 如果这个被监视的key被改动,那么事务就被取消,否则事务正常执行. 一般在MULTI 命令前就用watch命令对某个key进行监控.如果想让key取消被监控,可以用unwatch命令 被监视的key会被保存在...

2018-02-13 08:20:07

阅读数:824

评论数:0

redis中事务的取消

redis的事务不能实现回滚,但是可以在正在执行的事务中通过discard 命令来取消事务的执行。 struct redisCommand redisCommandTable[] = { {"discard",discardCommand,1,"rs&quo...

2018-02-12 08:22:45

阅读数:215

评论数:0

redis中的事务

redis页支持事务。redis的事务是在MULTI 和 EXEC 命令之间的一条或者多条命令. 从redis.c 中可以知道MULTI 命令的实现如下: {"multi",multiCommand,1,"rs",0,...

2018-02-11 15:16:44

阅读数:72

评论数:0

centos 中单机安装redis

下载安装并是能redisyum install redissystemctl  enable redis.service启动服务端启动客户端并并设置一个key-value 键值对

2018-02-09 14:42:19

阅读数:60

评论数:0

redis中的memory管理

redis 中申请memory的实现在zmalloc.c/h 中。仔细阅读这两个文件可以返现redis 对memory的申请和释放方式都是在glibc 中提供的malloc/free 的封装. 我们以申请memory函数中的zmalloc 为例 void *zmalloc(size_t size)...

2018-02-09 08:19:58

阅读数:111

评论数:0

redis中的server/client/sentinel/集群

redis服务器是一个一对多的架构,服务端通过I/O 多路复用技术实现的文件事件处理,采用单线程单进程的方式来处理和 多个client的请求. struct redisServer { // 保存了所有客户端状态结构 list *clients; /* ...

2018-02-08 20:39:53

阅读数:91

评论数:0

redis中的文件事件和时间事件

redis服务器是一个事件驱动程序。可以分为文件事件和时间事件,其中文件事件是服务器和客户端之间连接 套接字的抽象,而时间事件又分为定时事件和周期事件,目前redis 只实现了周期事件. redis 文件事件是通过select/epoll等这些函数库的包装. 举例如下: 例如我们通过下面这个函数关...

2018-02-08 08:24:07

阅读数:132

评论数:0

redis中的持久化

redis 用redisServer 表示server端 struct redisServer { /* General */ // 配置文件的绝对路径 char *configfile; /* Absolute config file path, ...

2018-02-07 08:34:15

阅读数:93

评论数:0

redis中的对象

1:redis中是通过对象来保存键和键值,其中对象是由sds/链表/字典/跳跃表/整数合集/压缩列表 这些基本 类型组成, 2:redis 对应基于引用计数的内存回收机制,当对象的引用计数为零时,对象会比回收。通过引用计数可以 实现对象共享,对象共享主要是多个数据库键可以共享一个对象来节约内存。 ...

2018-02-06 08:24:01

阅读数:76

评论数:0

redis的ziplist

当数据库中一个列表键只包含少量数据并且每个列表项是小整数值或者短的字符串,redis就用ziplist 来保存。 这里需要注意ziplist 是用连续的内存来保存值. redis 中通过ziplist来新建一个ziplist,其实现如下: unsigned char *ziplistNew(voi...

2018-02-05 08:25:55

阅读数:182

评论数:0

redis中的intset

整数集合inset是当一个集合中只包含整数值元素,并且这个集合元素不多时,redis就只用inset来保存 这个集合,inset支持升级操作,所谓升级是值将数据类型有int16升级为int32的动作,但是目前 不支持降级操作。inset中的元素是按照从小到大排列的。 redis中的inset用如下...

2018-02-03 08:15:32

阅读数:130

评论数:0

redis中的zskiplist

redis中通过zskiplist 来表示一个跳跃表 typedef struct zskiplist { // 跳跃表的表头和表尾 struct zskiplistNode *header, *tail; // 表示有跳跃表中有几个节点 unsigned lo...

2018-02-03 08:14:26

阅读数:112

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭