Redis

《Redis设计与实现》之第十四章:Redis服务器

Redis服务器复制和多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据。一,命令请求的执行过程客户端向服务器发送命令请求setkeyvalue服务器接收并处理客户端发来的命令请求setkeyvalue。在数据库中进行设置操作,并产生命令回复OK服务器把命令回复OK发送给客户端客...

《Redis设计与实现》之第十三章:Redis客户端

Redis服务器是典型的一对多服务器程序:一个服务器可以和多个客户端建立网络连接,Redis使用单线程单进程的方式来处理命令请求(通过IO多路转接实现),并和多个服务端进行网络通信。每个和服务端进行连接的客户端,服务端都为这些客户端建立了对应的redisClient结构(保存客户端状态),这个结构保存客户端当前的状态信...

《Redis设计与实现》之第十二章:事件

Redis服务器是一个事件驱动程序,服务器需要处理两类事件:文件事件:文件事件就是服务器对套接字(socket)操作的抽象,服务器和客户端的通信会产生文件事件时间事件:时间事件就是服务器对定时操作(比如serverCron函数)的抽象,Redis服务器中的一些操作需要在给定的时间点执行一,文件事件 文件事件处...

《Redis设计与实现》之第十章:RDB持久化

RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态。(数据库状态:服务器中的非空数据库以及它们的键值对统称为数据库状态)一.RDB文件的创建和载入1.save和bgsave命令可以用来生成RDB文件save命令会阻塞Redis服务器进程,直到RDB文件创建完毕为...

《Redis设计与实现》之第十一章:AOF持久化

AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。被写入AOF文件的所有命令都是以Redis的命令请求协议格式(纯文本)保存的。一,AOF持久化的实现1.命令追加当AOF持久化功能处于打开状态时,服务器在执行完一个写命令后,会以协议格式把被执行的写命令追加到服务器状态的aof_buf缓冲区的末尾:...

《Redis设计与实现》之第九章:数据库

一.服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redisServer结构的db数组中,db数组中的每个项都是一个redisDb结构,每个redisDb结构代表一个数据库。structredisServer{   //一个数组,保存着服务器中的所有数据库 &nb...

《Redis设计与实现》之第六章:整数集合

 整数集合是Redis用来保存整数值的集合抽象数据结构,它可以保存类型为int16_t,int32_t,int64_t的整数值,并且保证集合中不会出现重复元素1.整数集合的实现typedefstructintset{  //编码方式  uint32_tencoding;  //集合中包含的元素数量  uint...

《Redis设计与实现》之第四章:字典

一,哈希表节点哈希表节点使用dictEntry结构表示,每个dictEntry结构都保存一个键值对。typedefstructdictEntry{  //键  void*key;  //值  union{    void*val;    uint64_tu64;    int64_ts64;  }v;  //指向下一个...

《Redis设计与实现》之第八章:对象

 之前我们学习了Redis中使用到的数据结构,但是Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统。该系统包含字符串对象,列表对象,哈希对象,集合对象和有序集合对象这五中类型的对象。一.对象的类型和编码Redis使用对象来表示数据库中的键和值,每次在数据库中新创建...

《Redis设计与实现》之第三章:链表

当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。比如:integers列表键的底层实现就是一个链表,链表中的每个节点都保存了一个整数值。1.链表节点:typedefstructlistNode{   //前置节点&...

《Redis设计与实现》之第二章:简单字符串SDS

一,什么是SDS?1.引出SDSC字符串:c语言中,用空字符结尾的字符数组表示字符串简单动态字符串(SDS):Redis中,用SDS来表示字符串。在Redis中,包含字符串值的键值对在底层都是由SDS实现的首先,Redis使用C语言写的,但是Redis没有使用C语言传统的字符串表示,它自己构建了简单字符串的抽象类型来表...

《Redis设计与实现》之第七章:压缩列表

压缩列表是列表键和哈希键的底层实现之一。压缩列表是为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。【压缩列表是一种数据结构,这种数据结构的功能是将一系列数据与其编码信息存储在一块连续的内存区域,这块内存物理上是连续的,逻辑上被分为多个组成部分,其目的是在一定可控的时间复杂读条件下尽可能的减少不...

50道Redis面试题史上最全,以后面试再也不怕问Redis了

1、什么是Redis?Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的Key-ValueDB。Re...

优酷土豆的Redis服务平台化之路

前言Nginx是一个 免费的 , 开源的 , 高性能 的HTTP服务器和 反向代理 ,以及IMAP/POP3代理服务器。Nginx以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。Nginx是一个Web服务器,也可以用作&nbs...

Redis 分布式锁进化史(解读 + 缺陷分析)

Redis分布式锁进化史近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis,Zookeeper,其中基于Redis的分布式锁的使用更加广泛。但是在工作和网络上看到过各个版本的...