![](https://img-blog.csdnimg.cn/20190406174940571.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Redis技术探秘
对nosql数据库redis技术的介绍、学习与探索。
lazycece
http://lazycece.com
展开
-
Redis技术分享
前言 以前做过一个有关redis的技术分享,这里将之前分享的内容做了抽减,来大概的介绍一下redis,以帮助快速入门,对redis有个概要性的了解,不会做深入的介绍。本文中代码由于是直接用以前PPT上的截图,所以没有贴源码,请谅解。 本文内容如有错误的地方,欢迎指正。 Redis是什么?Redis是完全开源免费、遵守BSD协议的一个高性能的key-v...原创 2018-03-26 22:17:10 · 3995 阅读 · 0 评论 -
ubuntu下redis安装、配置及使用
ubantu源安装安装/查看版本信息apt install redis-serverredis-server -versionredis服务启动/重启/关闭/查看状态service redis startservice redis rstartservice redis stopservice redis status卸载服务apt --purge remove redis...原创 2018-09-18 15:38:59 · 860 阅读 · 0 评论 -
Redis源码剖析之SDS
SDS简介简单动态字符串(simple dynamic string),是redis底层为字符串而设计的一种数据结构,是针对C字符串的一个改良版。凡是涉及到需要修改的字符串均采用sds来存储,而非C字符串。SDS数据结构如下是sds数据结构的定义(sds.h头文件中):/* Note: sdshdr5 is never used, we just access the fl...原创 2018-07-22 21:51:22 · 854 阅读 · 0 评论 -
Redis源码剖析之字典
Redis字典字典是一个key-value形式的数据结构,使用过java中map结构的都应该了解,因为其也是字典;而了解哈希表的也应该不会陌生,因为字典的底层就是哈希表。而redis本身就是一个key-value形式的nosql数据库,足以见得字典结构在redis中的地位。数据结构字典的定义是在redis源码中的dict.h头文件中,其底层是由哈希表构成。哈希表首先来看...原创 2018-07-25 22:29:01 · 232 阅读 · 0 评论 -
Redis源码剖析之整数集合
整数集合整数集合(intset),故名思意,是存放整数的集合数据结构,从而可知其是集合(Set)的底层实现之一。而从源码中可知,整数集合中的元素又是从小到大来排序的。数据结构整数集合的定义在源码头文件intset.h中,如下所示:typedef struct intset { uint32_t encoding; uint32_t length; i...原创 2018-07-28 23:38:19 · 254 阅读 · 0 评论 -
Redis源码剖析之压缩列表
压缩列表(ziplist)压缩列表是一个特殊编码的列表,为节约内存而开发。压缩列表可以保存字符串和整型值,其中整数存放时仍是整数,而不会变成字符。压缩列表允许push和pop操作在时间复杂度为O(1)的情况下完成。但是每个操作都可能需要重新分配ziplist使用的内存,所以实际的复杂性受ziplist使用内存量及其变动的影响。压缩列表在redis中是列表键和哈希键的底层实现之一。由于...原创 2018-08-05 21:01:14 · 508 阅读 · 0 评论 -
Redis源码剖析之zipmap
以下涉及到的源码均为redis5.0-rc3版本的代码【点击查看官方源码】zipmapzipmap是为优化string映射到其他string这种结构而生的,故名思意其能节约内存。zipmap是redis中hash结构的底层涉及之一。当hash存储的元素数量少的情况下,底层使用zipmap结构,一旦元素数量达到一个限定值的时候就会自动切换成哈希表。由于zipmap的特性,hash结...原创 2018-08-11 22:09:03 · 257 阅读 · 0 评论 -
Redis源码剖析之对象
以下涉及到的源码均为redis5.0-rc3版本的代码【点击查看官方源码】redis对象在redis中,定义了5中基本对象,分别为string、list、set、zset、hash。而为了方便管理与操作,redis又对这5种对象进行了一次外围封装,如下所示(server.h头文件):typedef struct redisObject { unsigned type:4...原创 2018-08-20 00:11:03 · 752 阅读 · 0 评论 -
Redis源码剖析之命令
以下涉及到的源码均为redis5.0-rc3版本的代码【点击查看官方源码】redis命令在redis服务器中,对命令进行了结构封装,如下所示(server.h头文件中):struct redisCommand { char *name; //命令名称 redisCommandProc *proc; //指向命令函数实习的指针 int ...原创 2018-08-22 21:08:33 · 596 阅读 · 0 评论 -
Redis源码剖析之命令执行核心
以下涉及到的源码均为redis5.0-rc3版本的代码【点击查看官方源码】Redis命令执行Redis执行命令时都会先建立一个客户端,然后由客户端去和服务器连接,在执行命令(使用lua脚本执行亦如此,只不过lua的客户端是个伪客户端而已)。redis的命令执行中有一个核心部分,就是call()方法,call函数声明如下:void call(client *c, int flag...原创 2018-09-01 18:56:59 · 1263 阅读 · 0 评论 -
Redis源码剖析之数据库结构
以下涉及到的源码均为redis5.0-rc3版本的代码【点击查看官方源码】Redis服务器初始化数据库的个数为16个,由server.h头文件中的宏定义而来,如下所示:#define CONFIG_DEFAULT_DBNUM 16并且每个数据库的结构都有一个redisDb构成,如下是redisDb的数据结构定义(server.h头文件中),各字段的含义可见上面的源码注释:...原创 2018-08-24 22:01:31 · 155 阅读 · 0 评论 -
Redis源码剖析之服务器
以下涉及到的源码均为redis5.0-rc3版本的代码【点击查看官方源码】服务器结构在redis的头文件server.h中定义了服务器的数据结构,略见如下:(详细的可在文末的源码部分见得)struct redisServer { //服务器的一些信息 · · ·}服务器初始化在redis服务器启动中,在服务器的初始化过程中主要由三...原创 2018-08-24 22:29:58 · 483 阅读 · 0 评论