摘要: 1.SAVE和BGSAVE命令可以用于生成RDB文件,SAVE会阻塞进程,BGSAVE会派生一个子进程(redisServer.rdb_child_pid),然后由子进程负责创建RDB文件 2.由于AOF文件的更新频率比RDB高,所以如果服务器开启了AOF,则优先加载AOF;否则加载RDB 3.由于 阅读全文
posted @ 2018-09-18 14:16 levy5307 阅读(209) 评论(0) 推荐(0) 编辑
摘要: typedef struct dictEntry { // dictEntry: 哈希表节点,每个dictEntry保存一个键值对 void *key; union { void *val; uint64_t u64; int64_t s64; double d; } v; struct dictE 阅读全文
posted @ 2018-09-18 14:15 levy5307 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 备注: 每个redis client(服务端保存的表示客户端状态的结构体)都有一个dict(pubsub_channels),保存该client监听的所有channel;key是channel,value为空 每个redis client都有一个list(pubsub_patterns),保存该cl 阅读全文
posted @ 2018-09-18 14:14 levy5307 阅读(158) 评论(0) 推荐(0) 编辑
摘要: struct redisDb { dict *dict; // 保存键值对的字典 dict *expires; // 过期字典,保存数据库中所有键的过期时间,key-dict中的某个键对象,value-long long类型,保存该键过期时间 } 每个redisDb表示一个数据库,dbnum决定应该 阅读全文
posted @ 2018-09-18 14:13 levy5307 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 一.字典 1.dictEntry:哈希表节点,保存key及其对应的value,并且每个dictEntry有一个next指针,当发生键冲突时,指向下一个dictEntry 例如:对于redis命令 lpush mylist a b c,redis使用一个dictEntry来保存,其key是mylist 阅读全文
posted @ 2018-06-26 16:11 levy5307 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 众所周知,在程序运行出现异常的时候,我们可以选择抛出异常或者返回错误码的方式来进行处理,那么他们两个之间有什么区别?各有什么优缺点?在什么情况下选择抛异常,什么情况下选择返回码呢?下面我们来逐步分析。 1.抛异常 VS 错误码 首先,我们来分析一下抛异常和错误码相比的优缺点: 优点: 1.代码可读性 阅读全文
posted @ 2018-06-26 16:11 levy5307 阅读(718) 评论(0) 推荐(0) 编辑
摘要: 一、单机的痛点 当我们使用单台机器对外提供服务时,有如下两个主要问题: 第一、单台机器的性能已经无法满足我们的要求 第二、单台机器容易造成单点故障,导致服务可用性不高 二、分布式系统 分布式就是为了解决这两个问题应运而生的。具体来讲,我们通常可以通过如下方式来解决这两个问题 1.数据分区:将每个数据 阅读全文
posted @ 2018-06-26 16:11 levy5307 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 读写分离是指:数据库master负责数据的写入操作,slave则负责数据的读取操作。当向master写入数据时,master通过复制将数据同步到从slave。这样便可以将读DB的访问压力分离出去,用于提升集群的性能。 但是由于主从间数据的复制有延迟,如下场景中则会带来一个问题: 1.向master中 阅读全文
posted @ 2018-06-26 16:10 levy5307 阅读(95) 评论(0) 推荐(0) 编辑