摘要: Redis集群消息 作为支持集群模式的缓存系统,Redis集群中的各个节点需要定期地进行通信,以维持各个节点关于其它节点信息的实时性与一致性。如前一篇文章介绍的,Redis在专用的端口监听集群其它节点的连接,将集群内部的的通信与客户端的通信区分开来,任意两个节点之间建立了两个tcp连接,形成一条全双 阅读全文
posted @ 2019-10-08 15:37 yangzd~ 阅读(1024) 评论(0) 推荐(0) 编辑
摘要: Redis集群 Redis支持集群模式,集群中可以存在多个master,每个master又可以拥有多个slave。数据根据关键字映射到不同的slot,每一个master负责一部分的slots,数据被存储在负责它的slot的master节点上。slave会同步它的master节点上的数据到本节点,当m 阅读全文
posted @ 2019-10-07 15:20 yangzd~ 阅读(927) 评论(0) 推荐(0) 编辑
摘要: Redis aof持久化 Redis支持两种持久化方式:rdb与aof,上一篇文章中已经大致介绍了rdb的持久化实现,这篇文章主要介绍aof实现。 与rdb方式相比,aof会使用更多的存储空间,因为它将数据以客户端命令的形式进行存储,并使用ascii编码。但它也有相应的优点,如支持append的方式 阅读全文
posted @ 2019-10-06 23:26 yangzd~ 阅读(330) 评论(0) 推荐(0) 编辑
摘要: Redis rdb持久化 Redis支持两种持久化方式:rdb与aof。rdb将一个节点上的内存数据序列化后存储到磁盘中,序列化的数据以尽可能节约空间的方式存储,并非完全的ascii表示。它的优点在于节约空间,恢复速度快,缺点在于每一次操作都需要对整个内存数据进行序列化,并且持久化过程中的修改被丢失 阅读全文
posted @ 2019-10-06 17:14 yangzd~ 阅读(511) 评论(0) 推荐(0) 编辑
摘要: Redis io抽象层 Redis中涉及到多种io,如socket与file,为了统一对它们的操作,redis设计了一个抽象层,即rio,使用rio可以实现将数据写入到不同的底层io,但是接口相同。rio的实现在rio.h与rio.c源文件中,支持内存、文件、socket集合三类底层io。 1. s 阅读全文
posted @ 2019-10-06 11:04 yangzd~ 阅读(1273) 评论(0) 推荐(0) 编辑
摘要: redis支持多种数据类型,sds(simple dynamic string)是最基本的一种,redis中的字符串类型大多使用sds保存,它支持动态的扩展与压缩,并提供许多工具函数。这篇文章将分析sds在redis中是如何实现的。 1. sds类型 sds在redis中其实就是一个char*类型的 阅读全文
posted @ 2019-09-16 11:24 yangzd~ 阅读(1017) 评论(0) 推荐(0) 编辑
摘要: libevent支持io事件,timeout事件,signal事件,这篇文件将分析libevent是如何组织signal事件,以及如何实现signal事件响应的。 1. sigmap 类似于io事件,event_base有另外一个hash表sigmap用于存储signal事件,hash表使用sign 阅读全文
posted @ 2019-08-16 17:59 yangzd~ 阅读(464) 评论(0) 推荐(0) 编辑
摘要: libevent不仅支持io事件,同时还支持timeout事件与signal事件,这篇文件将分析libevent是如何组织timeout事件以及如何响应timeout事件。 1. min_heap 首先,event_base中有一个成员struct min_heap timeheap,这是一个最小堆 阅读全文
posted @ 2019-08-16 16:18 yangzd~ 阅读(1436) 评论(0) 推荐(0) 编辑
摘要: 这篇文章将分析libevent如何组织io事件,如何捕捉事件的发生并进行相应的响应。这里不会详细分析event与event_base的细节,仅描述io事件如何存储与如何响应。 1. select libevent实现io事件的backend实际上使用的是io复用接口,如select, poll, e 阅读全文
posted @ 2019-08-15 18:13 yangzd~ 阅读(512) 评论(0) 推荐(0) 编辑
摘要: 在前一篇文章中介绍了memcached中的内存管理策略slab,那么需要缓存的数据是如何使用slab的呢? 1. 缓存对象item内存分布 在memcached,每一个缓存的对象都使用一个item结构体进行描述,然后再将item描述符及相应数据存储到slabs管理的内存中。缓存对象根据其大小在sla 阅读全文
posted @ 2019-08-13 11:50 yangzd~ 阅读(529) 评论(0) 推荐(0) 编辑