Redis5设计与源码分析读后感(一)认识Redis
一、初识redis
定义
Redis是一个开源的Key-Value数据库,通常被称为数据结构服务器,其值可以是多种常见的数据格式,且读写性能极高,且所有操作都是原子性的。
高性能的主要原因
- 1、基于内存存储,命令几乎都是操作内存,内存的读写速度非常快。
- 2、单线程处理网络请求,避免不必要的上下文切换,同时不存在加锁/释放锁等同步操作。【PS:正在运行的redis server肯定不止一个线程,但只有一个线程来处理网络请求】
- 3、使用多路I/O复用模型(select、poll、epoll),可以高效处理大量并发连接。
- 4、数据结构专门设计,CRUD操作相对简单。
二、安装Redis
由于我们使用redis的场景一般是安装在服务器上的,所以这里以linux环境为例子进行安装:
#1、下载源码包
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
#2、解压源码包
tar -zxvf redis-5.0.0.tar.gz #3、进入安装目录
cd redis-5.0.0 #4、编译【从Makefile中读取指令,然后编译】
make #5、进入源码目录
cd src #6、安装【从Makefile中读取指令,然后安装到指定的位置】
make install
安装完成后进入/usr/local/bin目录中可以看到生成了一些可执行文件:

- redis-benchmark:官方自带的redis性能测试工具
- redis-check-aof:修复语法错误的AOF文件
- redis-check-rdb:修复语法错误的RDB文件
- redis-cli:客户端命令行工具【redis-cli -h {host} -p {port} 链接到指定的redis服务器】
- redis-sentinel:哨兵启动程序
- redis-server:服务端启动程序
配置redis
安装完成后,redis默认是本机连接的形式,外网无法访问,我们需要改一下配置文件:



修改完文件以后我们直接输入以下命令重启Redis服务器:
#使用对应的配置文件来启动Redis服务器【这里我们是进入了src目录里面去执行redis-server,而不是直接使用安装好以后在/usr/local/bin目录下的快捷命令】
#PS:../redis.conf表示使用此配置文件进行启动
#PS:&表示后台启动,跳出后不关闭程序 redis-server ../redis.conf &
三、Redis源码结构
redis源码主要放在安装目录下的src目录里面:

核心部分如下:
(1)基本数据结构
- 动态字符串 :sds.c
- 整数集合 :intset.c
- 压缩列表 :ziplist.c
- 快速链表 :quicklist.c
- 字典 :dict.c
- Streams :底层实现结构为listpack.c和rax.c
(2)Redis数据类型的底层实现
- redis对象 :object.c
- 字符串 : t_string.c
- 列表 :t_list.c
- 字典 :t_hash.c
- 集合及有序集合 :t_set.c 和 t_zset.c
- 数据流 :t_stream.c
(3)Redis数据库的实现
- 数据库的底层实现 :db.c
- 持久化 :rdb.c 和 aof.c
(4)Redis服务端和客户端实现
- 事件驱动 :ae.c 和 ae_epoll.c
- 网络连接 :anet.c 和 networking.c
- 服务端程序 :server.c
- 客户端程序 :redis-cli.c
(5)其它
- 主从复制 :replication.c
- 哨兵 :sentinel.c
- 集群 :cluster.c
- 其他数据结构 :hyperloglog.c 、 geo.c 等
- 其他功能 :pub/sub 【发布/订阅】、 Lua脚本等
Redis5设计与源码分析读后感(一)认识Redis的更多相关文章
- Redis5设计与源码分析读后感(四)压缩列表
一.引言 上一节我们总结了跳跃表的知识,我们知道了有序数组可以用跳跃表实现,也可以用压缩列表来实现,这一篇文章我们来总结一下压缩列表相关的知识. 二.压缩列表简介 定义:压缩列表 ziplist 本质 ...
- Redis5设计与源码分析读后感(三)跳跃表
一.引言 有序集合在日常开发中相当常见,比如做排名等相关的功能,肯定要用到排序的功能,那么常见底层实现有很多种: 数组 :不便于元素的插入和删除 链表 :查询效率低,需要遍历所有元素 平衡树OR红黑树 ...
- Redis5设计与源码分析读后感(二)简单动态字符串SDS
一.引言 学习之前先了解几个概念: SDS定义:简单动态字符串,Redis的基本数据结构之一,用于储存字符串和整型数据. 二进制安全:C语言中用"\0"表示字符串结束,如果字符串本 ...
- [源码分析] OpenTracing之跟踪Redis
[源码分析] OpenTracing之跟踪Redis 目录 [源码分析] OpenTracing之跟踪Redis 0x00 摘要 0x01 总体逻辑 1.1 相关概念 1.2 埋点插件 1.3 总体逻 ...
- 《redis 5设计与源码分析》:第二章 简单动态字符串
介绍 简单动态字符串(Simple Dynamic Strings, SDS)是Redis的基本数据结构之一,用于存储字符串和整型数据.它的特点是:方便扩容.二进制安全. 二进制安全 在C语言中,用& ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- jQuery源码分析系列
声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...
- jquery2源码分析系列
学习jquery的源码对于提高前端的能力很有帮助,下面的系列是我在网上看到的对jquery2的源码的分析.等有时间了好好研究下.我们知道jquery2开始就不支持IE6-8了,从jquery2的源码中 ...
- [转]jQuery源码分析系列
文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...
随机推荐
- oracle 分页的两种方式
实例:查询5-8名学生的姓名与成绩 --oracle的分页1 between 方式(分三次查询,第一次只作排序,第二次给表加上rownum序列,第三次为查询结果) select s.scorenumb ...
- springMVC入门(四)------参数绑定与返回值类型
简介 从之前的介绍,已经可以使用springMVC完成完整的请求.返回数据的功能. 待解决的问题:如何将数据传入springMVC的控制器进行后续的处理,完成在原生servlet/jsp开发中Http ...
- Java中实现对集合中对象按中文首字母排序
有一个person对象如下: public class Person { private String id;private String nam; } 一个list集合如下: List<Emp ...
- asp.net报表结构学习记录
当一份web报表项目压缩包躺在我的文件夹里时,我是完全懵的.作为一个学习了一个月java的asp.net小白,以前从来没有接触过这方面,我完全不知道从何入手. 手里也有asp.net开发学习视频,但都 ...
- SQL分组排序后取每组最新一条数据的另一种思路
在hibernate框架和mysql.oracle两种数据库兼容的项目中实现查询每个id最新更新的一条数据. 之前工作中一直用的mybatis+oracle数据库这种,一般写这类分组排序取每组最新一条 ...
- [状压DP]P1441 题解 砝码称重
前置知识:状压DP 洛谷传送门 emm....看到题目,我第一个想到的就是枚举.暴力大法好! 具体怎么枚举?当然是子集枚举啦!枚举出每一个可能的砝码选择方案.对于每一个合法的(也就是选取数量等于\(n ...
- RabbitMQ入门指南
消息队列(Message Queue,以下简称MQ)常用于异步系统的数据传递.若不用MQ,我们只能[在应用层]使用轮询或接口回调等方式处理,这在效率或耦合度上是难以让人满意的.当然我们也可以在系统间保 ...
- Kafka与RabbitMQ区别
RabbitMQ 和 Kafka 的显著差异 RabbitMQ 是一个消息代理,但是 Apache Kafka 是一个分布式流式系统.好像从语义上就可以看出差异,但是它们内部的一些特性会影响到我们是否 ...
- 拾色器,可以取出电脑屏幕的任何颜色,ui以及程序员前端等常用软件,文件很小,300K
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985,转载请说明出处. 今天给大家介绍一个小软件,挺实用的,叫做拾色器. 用途:取出电脑屏幕的任意颜色,当你 ...
- js 原生功底 (一)
欢迎大家一起学习,点击查看