Redis源码剖析

源码文件简介

 

文件

功能

备注

adlist.h/adlist.c

双向链表

 

ae.h/ae.c

事件驱动

 

ae_epoll.c

epoll接口,

Linux下的IO接口

ae_kqueue.c

kqueue接口

Freebsd

ae_select.c

select接口

Windows

ae_evport.c

event ports接口

Illumos(OpenSolaris的衍生版本)

anet.h/ anet.c

网络处理

Server/Client通信的基础封装

aof.c

AOF文件相关处理

 

asciilogo.h

Redis的字符logo

 

bio.h/ bio.c

Background I/O 服务

 

bitops.c

Bit操做函数

 

config.h/ config.c

配置文件解析

 

crc64.c

crc64算法

 

db.c

DB处理

 

debug.c

用于调试使用

 

dict.h/dict.c

hash

 

endianconv.h/endianconv.c

大小端转换

 

fmacros.h

用于Mac下的兼容性处理

 

help.h

命令的提示信息

 

intset.h/intset.c

转换为数字类型数据

 

lzf.h/lzf_c.c

LZF压缩算法

用于本地数据库的保存

lzf_d.c

LZF压缩算法

用于本地数据库的保存

lzfP.h

LZF压缩算法

用于本地数据库的保存

memtest.c

 

 

migrate.c

DUMP, RESTORE and MIGRATE 命令

 

multi.c

事务

 

networking.c

读取、解析和处理客户端命令

网络协议传输方法定义

object.c

各种对像的创建与销毁,stringlistsetzsethash

 

pqsort.h/pqsort.c

排序算法

 

pubsub.c

发布-订阅系统

 

rand.h/rand.c

随机数产生

 

rdb.h/rdb.c

redis数据文件处理

 

redisassert.h

断言

 

redis-benchmark.c

redis性能测试

 

redis-check-aof.c

用于更新日志检查的实现

 

redis-check-dump.c

用于本地数据库检查的实现

 

redis-cli.c

客户端程序

 

redis.c

redis的主文件

main函数

redis.h

redis的主文件头

 

release.c

用于发布使用

 

replication.c

数据同步master-slave

 

rio.h/rio.c

Rio对象

 

scripting.c

脚本

 

sds.h/sds.c

动态字符串

 

sentinel.c

警戒模式

 

sha1.h/sha1.c

sha算法的实现

 

slowlog.h/slowlog.c

慢日志

 

solarisfixes.h

Solaris系统的兼容性实现

 

sort.c

用于listsetzset排序

 

syncio.c

用于同步Socket和文件I/O操作

 

t_hash.c

hash类型处理

 

t_list.c

list类型处理

 

t_set.c

set类型处理

 

t_string.c

string类型处理

 

t_zset.c

有序sort

 

testhelp.h

一个C风格的小型测试框架

 

util.h/util.c

通用工具

 

version.h

Redis版本号定义

 

ziplist.h/ziplist.c

压缩列表

 

zipmap.h/zipmap.c

压缩hash

 

zmalloc.h/zmalloc.c

内存管理

 

 

 

 

一、main()函数

 

zmalloc_enable_thread_safeness()打开内存分配线程安全标志,这个函数只有一句代码即zmalloc_thread_safe =1zmalloc_thread_safezmalloc.c的一个静态变量,这个值为1的情况下,redis内存的申请、释放、使用都会加锁。

【注】此处值得一提的是,在i386CPUAMD64CPU上,在GCC库版本号大于40100的情况下,会直接使用原子指令代替锁操作,原子指令时CPU层面的支持,无需内核锁对象介入,性能大大提高,redis针对系统环境和硬件进行效率优化。这个原子指令就是__sync_add_and_fetch,一个指令实现增加并获取一个值,熟悉汇编的人应该不陌生。

 

zmalloc_set_oom_handler(redisOutOfMemoryHandler);

设置内存分配失败后的回调函数,如果不主动设置回调函数,redis将会会记录文件“zmalloc:Out of memory trying to allocate xxxbytes”,并退出线程。在这里,redis没有使用默认处理方式,而是选择记录Log,并主动报告一个OMM错误。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值