认识redis

一:redis简介

redis是一个开源、遵守BSD协议的基于内存的数据结构存储系统,可用作数据库、缓存和消息代理。redis支持的数据结构包括string, hashes, lists, sets, sorted sets(可范围查询), hyperloglogs, geospatial indexes(可半径查询和支持流)。redis包含内置复制,Lua脚本,LRU驱逐,事务以及不同级别的硬盘持久化,并通过Redis Sentinel提供高可用性,使用Redis Cluster自动分区。

为了保证redis杰出的性能,redis使用内存数据集。根据使用场景不同,你可选择每隔一段时间将数据持久化到硬盘或者通过追加日志的方式实现持久化。不过,如果你只需要功能丰富的网络化内存存储,可以禁用持久化选项。

redis支持主从异步复制,快速且非阻塞的首次同步,以及网络分割部分数据重新同步时可实现自动重连。

二、redis与memcached

redis和memcached都属于in-memory和key-value型数据库,二者都主要用于分布式缓存服务中,memcached由Brad Fitzpatrick于2003年开发,redis由Salvatore Sanfilippo于2009年开发,在一定程度上,redis借鉴了memcached的开发经验,因此在功能多样性和灵活性上要优于memcached,但是redis的复杂度也要高于memcached。redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较:

  1. Redis支持服务器端的数据操作
    Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。

  2. 内存使用效率对比
    使用简单的key-value存储的话,Memcached内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。

  3. 性能对比
    由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。

三、redis源码结构

redis源码目录

图片.png

deps

depends的缩写,依赖库

图片.png

Hiredis是Redis数据库的C接口。这块和Redis相关性比较大。

Jemalloc是内存管理库。很多开源项目不使用glibc自带的ptmalloc,而是使用Jemalloc或者Tcmalloc这类更高效的内存管理库。

Linenoise是一个命令行编辑库。这个正是我们之前预估的Redis基础功能之一。它的相关资料可见https://github.com/antirez/linenoise

Lua脚本引擎。Redis内嵌Lua脚本引擎,那么说明Redis需要Lua语言的解析能力。那么可以进一步猜测应该是用户可以定制Lua脚本让Reids去执行,这相当于Redis开放了一个非常自由的接口供外部使用。

src

redis源码目录

tests

它是测试相关的目录。里面都是各种测试Redis的脚本。可见测试脚本是一些后缀为tcl的文件。它的内容这是一种被广泛使用的脚本测试语言——TCL语言

utils

从名称看出为一些工具

相关文件

00-RELEASENOTES
非稳定版本redis的占位符文件

BUGS
内置向redis提bug的链接

CONTRIBUTING
相关社区链接

COPYING
版权声明

install,readme.md
redis的安装和使用命令简介

redis.conf,sentinel.conf
Redis的配置和主从配置

Runtest、Runtest-cluster、Runtest-sentinel
分别对应于“整体测试”、“分布式测试”和“主从切换测试”的脚本

MANIFESTO
Redis 宣言,Redis 的作者 antirez(Salvatore Sanfilippo)列举了 Redis 的七个原则,以向大家阐明 Redis 的思想。

makefile

makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模块及库等).创建程序(make程序)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器和连接器以便产生最后的输出,最后输出并生成的通常是可执行文件.
在makefile文件中我们可以看到

图片.png

即核心文件为src/Makefile文件,执行命令为进去src然后make命令

在src中的makefile文件中,最开始是一些编译参数和依赖项的定义,然后是内存分配

图片.png

非ARM系统下,linux默认选择的内存管理库是jemalloc

核心为

图片.png

上面脚本可以见这个Makefile可以编译出6个不同的最终产物。
其中最核心的应该是REDIS_SERVER_NAME对应的编译内容。我们从其需要链接的文件(REDIS_SERVER_OBJ中的内容)来看,程序的入口函数main应该位于server.o文件中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容