一、初识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的更多相关文章

  1. Redis5设计与源码分析读后感(四)压缩列表

    一.引言 上一节我们总结了跳跃表的知识,我们知道了有序数组可以用跳跃表实现,也可以用压缩列表来实现,这一篇文章我们来总结一下压缩列表相关的知识. 二.压缩列表简介 定义:压缩列表 ziplist 本质 ...

  2. Redis5设计与源码分析读后感(三)跳跃表

    一.引言 有序集合在日常开发中相当常见,比如做排名等相关的功能,肯定要用到排序的功能,那么常见底层实现有很多种: 数组 :不便于元素的插入和删除 链表 :查询效率低,需要遍历所有元素 平衡树OR红黑树 ...

  3. Redis5设计与源码分析读后感(二)简单动态字符串SDS

    一.引言 学习之前先了解几个概念: SDS定义:简单动态字符串,Redis的基本数据结构之一,用于储存字符串和整型数据. 二进制安全:C语言中用"\0"表示字符串结束,如果字符串本 ...

  4. [源码分析] OpenTracing之跟踪Redis

    [源码分析] OpenTracing之跟踪Redis 目录 [源码分析] OpenTracing之跟踪Redis 0x00 摘要 0x01 总体逻辑 1.1 相关概念 1.2 埋点插件 1.3 总体逻 ...

  5. 《redis 5设计与源码分析》:第二章 简单动态字符串

    介绍 简单动态字符串(Simple Dynamic Strings, SDS)是Redis的基本数据结构之一,用于存储字符串和整型数据.它的特点是:方便扩容.二进制安全. 二进制安全 在C语言中,用& ...

  6. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  7. jQuery源码分析系列

    声明:本文为原创文章,如需转载,请注明来源并保留原文链接Aaron,谢谢! 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://git ...

  8. jquery2源码分析系列

    学习jquery的源码对于提高前端的能力很有帮助,下面的系列是我在网上看到的对jquery2的源码的分析.等有时间了好好研究下.我们知道jquery2开始就不支持IE6-8了,从jquery2的源码中 ...

  9. [转]jQuery源码分析系列

    文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaro ...

随机推荐

  1. 多主机搭建etcd集群

    下载https://github.com/etcd-io/etcd/releases/download/v3.4.10/etcd-v3.4.10-linux-amd64.tar.gz分别放到两台主机上 ...

  2. centos AAVMF_CODE.fd 文件下载

    centos: yum install AAVMF -y ubuntu: apt-get install qemu-efi*

  3. IE浏览器连接WebSocket报错:java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

    在项目开发中整合了WebSocket,本来没什么问题了,但是偶尔发现用IE浏览器打开web端不能推送消息,因为PC端与服务器建立连接失败了.网上查了很多资料, 又看了看源码,都不对症:又怀疑是Spri ...

  4. 斗地主小游戏随机发牌PHP代码

    <?php header("Content-Type:text/html;charset=UTF-8"); $num=['A','2','3','4','5','6','7' ...

  5. docker部署数据库

    搜索数据库镜像images docker search mysql 搜索结果如下图所示: 选择合适自己的mysql版本 因为mysql新版本出来了,很多特性没有学习,所以笔者安装了mysql:5.6 ...

  6. 以vue+TreeSelect为例,如何将扁平数据转为tree形数据

    // 目标:将后台返回的扁平数据,根据parentId转为下拉tree <el-form-item label='下拉选择数据'> <tree-select v-model='tre ...

  7. git最基础常用操作

    单人开发托管够用 未列出的用到一个补一个

  8. 【Gin-API系列】Gin中间件之鉴权访问(五)

    在完成中间件的介绍和日志中间件的代码后,我们的程序已经基本能正常跑通了,但如果要上生产,还少了一些必要的功能,例如鉴权.异常捕捉等.本章我们介绍如何编写鉴权中间件. 鉴权访问,说白了就是给用户的请求增 ...

  9. Netty学习笔记-入门版

    目录 Netty学习笔记 前言 什么是Netty IO基础 概念说明 IO简单介绍 用户空间与内核空间 进程(Process) 线程(thread) 程序和进程 进程切换 进程阻塞 文件描述符 文件句 ...

  10. Google Kick Start 2020 Round B T4 Wandering Robot

    题意 一个\(n \times m\)的矩形空间,起点是\((1,1)\),终点是\((n,m)\). 假设当前位于\((x,y)\): 如果当前位于最后一行,那么下一步只能走向\((x,y+1)\) ...