自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Olive的博客

一只小菜鸟~~

  • 博客(13)
  • 收藏
  • 关注

原创 Redis源码(十二)——哨兵Sentinel

如果当系统中只有一台Redis服务器运行时,假设服务器宕机了,那么所有的服务都将不可用,这对系统来说是不可忍受的。那么备份就是一个很自然的想法了。前面的博客中我们讲到了Redis的主从复制,应用Redis主从复制的功能,我们对主服务器配置几台从服务器从而对主服务器进行备份,主从服务器内的数据保持一致。但是仅仅做了主从是不够的——当主服务器挂了以后,从服务器只能提供读服务,而无法提供写服务,系统仍然

2018-01-24 11:21:13 873

原创 Redis源码(十一)——Redis的主从复制

Redis中可以发送SLAVEOF命令让一个服务器A成为另一个服务器B的“slave”,从而去复制B,称A为从服务器(slave),B为主服务器(master)  关于复制,2.8版本以前及以后实现有一些不同,2.8版本以前的复制在断线重连后效率较低,所以我们在这里只分析下2.8版本以后的复制。复制功能分为同步(sync)和命令传播(command propagate)两个步骤。

2018-01-23 11:06:35 719

原创 Redis源码(十)——Redis的客户端和服务器

在前面的博客中,有些内容已经涉及到了Redis服务器或者客户端的一些属性,如上一篇博客关于Redis的RDB持久化中关于save选项来设置服务器的状态等。那么接下来这篇博客中就分析下Redis的客户端以及服务器的属性及操作。 一、Redis客户端redis.h中的redisClient结构定义了Redis的客户端:/* With multiplexing we need to ta

2018-01-22 10:34:24 1934

原创 Redis源码(九)——Redis的持久化:RDB及AOF

我们知道Redis的数据库数据是储存在内存中的,那么如果Redis服务器进程被kill了或关闭了,那么服务器中的所有数据都会消失,所以我们需要对Redis的数据进行持久化即保存在硬盘中。  Redis有两种持久化的方案——RDB和AOF(Append OnlyFile)。 一、RDB持久化RDB持久化通过将数据库中的键值对保存到rdb文件中来对Redis进行备份。src下的

2018-01-21 14:36:35 511

原创 Redis源码(八)——Redis的数据库

在前面的博客中,对Redis的底层数据结构和Redis中的几种对象做了相对详尽的分析,但是对于Redis——作为一种高速分布式数据库,我们并没有对Redis的一些典型功能例如存取键、设置过期时间、主从复制等作出介绍。接下来我们将对Redis的一些功能作出详细的分析。作为一种数据库,Redis的数据库功能是最基本也是最核心的功能,接下来就对此进行介绍。 一、数据库的结构定义  在

2018-01-17 20:55:07 675

原创 Redis源码(七)——Redis中五种对象

在前面的博客中,介绍了Redis中用所有底层数据结构,如简单动态字符串(SDS)、链表、字典、跳跃表,整数集合和压缩链表。Redis就利用上述的六种底层数据结构来构造了五种数据库对象——字符串、列表、哈希、集合和有序集合。       我们知道Redis是一个“key-value”数据库,其中的key和value都是用对象表示。Redis中每个对象都是由RedisObject结构体表示:t

2018-01-15 21:12:01 440

原创 Redis源码(六)——压缩列表

一、压缩列表(ziplist)的定义与实现  压缩列表是一种为了节约内存而开发的顺序数据结构,是列表及哈希对象的底层实现之一。当列表中只有少量的列表元素,且列表元素是小整数值或者较短的字符串,Redis就会用压缩列表作为列表对象的底层实现;当哈希对象中只包含少量键值对,而且键值都是小整数或者长度较短的字符串,Redis就用压缩列表作为哈希的实现。src中的ziplist.c和z

2018-01-11 20:24:34 411

原创 Redis源码(五)——整数集合

一、整数集合(intset)的定义与实现  整数集合是Redis中集合的底层实现之一,当集合只包含整数且集合的元素数目不大是,Redis是使用整数集合作为集合的底层实现的。整数集合的实现在src的intset.h和intset.c中:typedef struct intset { // 编码方式 uint32_t encoding; //

2018-01-10 22:26:45 324

原创 Redis源码(四)——跳跃表

跳跃表(skiplist)的定义与实现  在对排行榜数据进行排序时,我们会用到Redis中的有序集合对象(sorted set),跳跃表就是有序集合的底层实现之一。跳跃表是一种有序的数据结构,每个节点中都维持着多个指向其他节点的指针,所以可以快速地访问节点。跳跃表的查找速度平均为O(logN),最差为O(N)。  src下的redis.h中用zskiplistNode和zs

2018-01-09 21:11:27 307

原创 Redis源码(三)——字典

一、字典(dictionary)的定义与实现  在使用Redis中,我们会经常用到哈希(hash)对象。哈希对象中存在key、field和value,每一个field都对应一个value。我曾经使用哈希对象来缓存不同平台上的书籍数据——平台id为key,书的id为field,需要的数据为value。哈希对象的底层就是通过字典来实现的。  src下的dict.h和dict.c

2018-01-04 21:12:14 317

原创 Redis源码(二)——链表

Redis中的链表是一个应用十分广泛的底层数据结构,常用的Redis列表(List)底层实现之一就是链表。我曾用Redis的列表缓存过分布式服务节点的ip。Redis列表的一些操作命令在这里就不做赘述了,有兴趣的同学不妨装个Redis自己动手实践下。  言归正传,继续来讲Redis的底层数据结构——链表。熟悉数据结构的同学一定对链表不会陌生。在src下的adlist.h和adlist.

2018-01-04 19:22:12 289

原创 Redis源码(一)——简单动态字符串

一、什么是简单动态字符串  字符串是Redis中最简单的一个数据结构,打开Redis的源码后可以发现,Redis的底层是通过C语言来实现的,然而Redis并没有使用C语言中的字符串类型,而是重构了一种新的字符串类型——简单动态字符串(simple dynamic string,SDS)。那么Redis为什么要自己去开发一种抽象字符串类型呢?在我提供的代码中,src下的sds

2018-01-03 20:17:53 489

原创 Redis源码——开篇

接下来的博客主攻Redis的源码,我们知道Redis是现在很流行的一个缓存数据库,大多的公司都会选择使用Redis作为数据库的缓存。在找实习以及找工作中的面试中,很多面试官也会对Redis技术很感兴趣。对于一项技术,比会去使用它更重要也是更高层的是理解内部的源码实现,剖析作者这么设计的原理及思维。所以很多面试官会很喜欢问候选人关于Redis内部的技术实现。作为一个小菜鸟,在面试时我也被问了不少Re

2018-01-02 19:07:40 444 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除