redis-2.6 源码阅读
文章平均质量分 65
菜鸟磊子
这个作者很懒,什么都没留下…
展开
-
redis源码阅读(2)-redis通信协议
Redis 通讯协议规范redis是一个key-value形式的基于内存的数据库当安装完程序后我们知道可以用redis-cli连接redis-server进行通讯,进行各种操作。 那么如今我们用的高级语言 如:C、Java、Python、C#等 如何来发送命令(request)来操作数据、从数据库取到相关数据(replies)呢?如果你也有这些疑问,那么这篇文章适合你继续看 ;)ps:官网已经推荐转载 2016-11-18 18:30:20 · 812 阅读 · 0 评论 -
redis源码阅读(1):redis服务网络模型
项目项目中应用到了redis,对其基于内存的nosql数据库比较感兴趣,打算读一下redis源码,写到哪里算哪里。第一篇是关于redis的网络模型:redis网络模型采用epoll 异步事件处理机制,针对客户端的读写均是采用单线程的形式操作,于是不存在数据安全性的问题,即多个客户端同时修改某一个相同的key。为什么采用单线程模型,也许是因为redis针对数据的操作均是基于内存操作,没有涉及到磁盘I/原创 2016-11-18 17:17:12 · 962 阅读 · 0 评论 -
redis源码阅读(3)-解析客户端请求
客户端连接server端之后,server端会注册client 读事件,以检测客户端的 写操作,回调函数是: readQueryFromClient函数用来读取客户端的请求命令行数据,并调用processInputBuffer函数依照redis通讯协议对数据进行解析。服务器使用最原始的read函数来读取客户端发送来的请求命令,并将字符串存储在querybuf中,根据需要对querybuf进行扩展。原创 2016-11-18 20:11:25 · 1448 阅读 · 0 评论 -
redis源码阅读(4)-回复客户端请求
上一小节,分析了client的请求,这一小节主要看处理具体的命令的详细过程: 客户端指令解析完之后,需要执行该指令,执行指令的两个函数为processCommand与call函数,这两个函数除了单纯的执行指令外,还做了许多其他的工作,processCommand中调用了call函数,只分析call函数,其他的工作有点繁琐,等等仔细看完再写另起炉灶。 call函数中调用了具体的执行函数例如:sel原创 2016-11-18 21:18:20 · 1215 阅读 · 0 评论 -
redis源码阅读(4)-timeEvnet之rehash重哈希过程
当redis数据库中HashTable数据达到触发条件时,会触发哈希表的重构的操作。触发条件可以设置:1、Resize缩小哈希表触发条件是:元素数量/槽的数量小于REDIS_HT_MINFILL时,触发dictResize操作int htNeedsResize(dict *dict) { long long size, used; size = dictSlots(dict);原创 2016-11-21 20:48:00 · 1497 阅读 · 0 评论 -
redis源码阅读(5)-timeEvent事件之过期key回收
redis的事件主要由两种fileEvent 也就是各种socked的异步操作,通过epoll网络模型监听。另外一种就是timeEvent事件,redis就有一个timeEvent事件,可以理解为定时器。注册timeEvent事件时,事件函数是int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) ,原创 2016-11-21 21:58:28 · 1553 阅读 · 0 评论 -
redis源码阅读(6)-timeEvent之异步处理客户端
clientCron函数针对client的操作主要由以下几点: (1)如果客户端没有在阻塞调用状态,比如说BLPOP操作等,如果客户端上次请求server的时间与server端现在时间差超过server.maxidletime,直接关闭客户端,删除和此客户端相关的任何数据,表示此客户端已经被异常关闭,或者长时间没有进行操作。 (2)如果客户端处在阻塞请求状态,并且阻塞请求的超时时间已到,回复客户原创 2016-11-21 22:51:09 · 659 阅读 · 0 评论 -
redis源码阅读(7)-数据持久化RDB,AOF
Redis 持久化:提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF.RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台转载 2016-11-22 14:20:51 · 550 阅读 · 0 评论 -
redis源码阅读(8)-AOF持久化
AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当原创 2016-11-22 17:42:36 · 1703 阅读 · 0 评论