首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
Redis笔记(2)单机数据库实现
】的更多相关文章
Redis笔记(2)单机数据库实现
1.前言 上节总结了一下redis的数据结构和对象构成,本章介绍redis数据库一个基本面貌,是如何设计的. 2.数据库 服务器结构redisServer: redisDb *db: 一个数组,保存服务器中所有的数据库 dbnum: 服务器的数据库数量,默认16个 saveparam *saveparams: 设置的保存选项 long dirty: 修改计数器 time_t lastsave: 上一次执行保存的时间 sds aof_buf: AOF缓冲区 list *clients: 链表,保存…
Redis笔记(3)多数据库实现
1.前言 本章介绍redis的三种多服务实现方式,尽可能简单明了总结一下. 2.复制 复制也可以称为主从模式.假设有两个redis服务,一个在127.0.0.1:6379,一个在127.0.0.1:12345.我们登陆12345端口的redis,输入命令slaveof 127.0.0.1:6379就设置好了复制模式.此时6379就是主服务器,12345就是从服务器. 复制模式下,主从服务器保存相同的数据,概念上称之为数据库状态一致.redis2.8版本前后复制模式有些不同. 2.1 旧版复制 r…
Redis(二):单机数据库的实现
概要 本部分内容主要是研究单机数据库.分别介绍单机数据库的实现原理,数据库的持久化,Redis事件,服务器维护管理客户端以及单机服务器的运作机制. 数据库 数据库结构 Redis数据库由redis.h/redisDb定义,结构如下: typedef struct redisDb { dict *dict; //字典,用来保存这个数据库中所有的键值对 dict *expires; //字典,用来存放过期时间 dict *blocking_keys; /* Keys with clients wai…
Redis学习笔记二:单机数据库的实现
1. 数据库 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库: struct redisServer { // ... redisDb *db; /* 一个数组,保存着服务器中的所有数据库 */ // ... int dbnum; /* 创建多少个数据库,由服务器配置的database选项决定,默认为16个数据库,0-15 */…
Redis中单机数据库的实现
1. 内存操作层 zmalloc 系接口 redis为了优化内存操作, 封装了一层内存操作接口. 默认情况下, 其底层实现就是最简朴的libc中的malloc系列接口. 如果有定制化需求, 可以通过配置方式, 将底层内存操作的实现更换为tcmalloc或jemalloc库. redis封装的这一层接口, 其接口定义与默认实现在zmalloc.h与zmalloc.c中. 其默认实现支持在O(1)复杂度的情况下返回内存块的大小. 具体实现上的思路也十分简朴: 就是在内存块头部多分配一个long的空间…
Redis学习笔记1 -- 单机环境时分布式锁的使用
使用第三方开源组件Jedis实现Redis客户端,且只考虑Redis服务端单机部署的场景. 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁. 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以…
Redis单机数据库
单机数据库 ·Redis服务器的所有数据库都保存在redisServer.db数组中,而数据库的数量则由redisServer.dbnum属性保存. ·客户端通过修改目标数据库指针,让它指向redisServer.db数组中的不同元素来切换不同的数据库. ·数据库主要由dict和expires两个字典构成,其中dict字典负责保存键值对,而expires字典则负责保存键的过期时间. ·因为数据库由字典构成,所以对数据库的操作都是建立在字典操作之上的. ·数据库的键总是一个字符串对象,而值则可以是…
Redis单机数据库的实现原理
本文主要介绍Redis的数据库结构,Redis两种持久化的原理:RDB持久化.AOF持久化,以及Redis事件分类及执行原理.最后,分别介绍了单机班Redid客户端和Redis服务器的使用和实现原理.本文篇幅较长,全文学习请提前做好心里准备,当然也可直接跳到某一段学习某一特定部分. 一.Redis数据库 0. 导读 Redis 服务器的所有数据库都保存在 redisServer.db 数组中, 而数据库的数量则由 redisServer.dbnum 属性保存. 客户端通过修改目标数据库指针,…
redis 笔记02 对象、数据库
对象 Redis并没有使用之前介绍的数据结构来实现键值对数据库,而是基于那些数据结构创建了一个对象系统,这个系统包含字符串对象.列表对象.哈希对象.集合对象和有序集合对象这五种类型对象, 每种对象都用到了至少一种我们前面所介绍的数据结构. 1. Redis数据库中的每个键值对的键和值都是一个对象. 2. Redis共有字符串.列表.哈希.集合.有序集合五种类型的对象,每种类型的对象至少都有两种或者以上的编码方式,不同的编码可以在不同的使用场景上优化对象的使用效率. 3. 服务器在执行某些命令之前…
Redis设计与实现——单机数据库的实现
数据库 服务器中的数据库 redisClient切换数据库 redis客户端默认目标数据库为0号数据库,可以通过SELECT命令来切换目标数据库. 客户端状态redisClient结构的db属性记录了客户端当前的目标数据库,这个属性是指向redisdb结构的指针. typedef struct redisClient{ //记录客户端当前正在使用的数据库 redisDb *db; } redisClient; 数据库键空间 Redis是一个键值对数据库服务器,服务器中的每个数据库都由一个redi…