Redis
Redis的设计与实现
行者小朱
stay hungry,stay foolish
展开
-
Redis入门
一、概念 Redis是一个开源的、支持网络的、可基于内存的、可持久化的日志型、Key-Value数据库,提供了多种语言的API。Redis支持的数据类型有五种:string(字符串)、list(列表)、set(集合)、sorted set(有序集合)、hash(散列)。二、Redis特点 1、Redis本质上是一个Key-Value类型的内存数据库(Key-原创 2017-08-17 20:18:06 · 656 阅读 · 0 评论 -
Redis的六种数据结构
本节将对Redis底层的六种数据结构展开详述:简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表。一、简单动态字符串(SDS) Redis基于C语言开发但并没有直接使用C语言传统的字符串,而是构建一种叫简单动态字符串(simple dynamic string,SDS)的抽象类型作为Redis默认的字符串表示。SDS不仅用来保存数据库中的字符串值,同时还用于实现缓冲区(b原创 2017-11-27 15:38:37 · 6541 阅读 · 1 评论 -
Redis对象系统
在上一节学习Redis中的六种基础数据结构,但在Redis中并没有直接使用以上的数据结构实现键值对数据库,而是基于这些数据结构构建了一个对象系统:字符串对象(String)、列表对象(List)、哈希对象(Hash)、集合对象(Set)和有序集合对象(ZSet)。在Redis中每个对象都由一个redisObject结构表示:/* * Redis 对象 */typedef struct r原创 2017-11-27 18:28:36 · 838 阅读 · 0 评论 -
Redis数据库
在上一节介绍了Redis的对象系统:String、List、Hash、Set、ZSet,这些对象是如何组成Redis数据库与用户所见的数据库映射的呢?一、 Redis服务器 在redis.h/redisServer结构中有关系数据库的两个属性:redisDb和dbnum,每个redisDb结构就代表着一个数据库,dbnum则表示Redis服务器创建的数据库个数(默认为16个)原创 2017-11-28 10:51:23 · 1104 阅读 · 0 评论 -
Redis键的生存时间和过期时间
Redis作为内存数据库,和memcached一样提供了设置键的生存时间和过期时间的功能。通过expire命令或者pexpire命令实现秒级或者毫秒级的生存时间的设置功能:EXPIRE : 将键的生存时间设为 ttl 秒PEXPIRE :将键的生存时间设为 ttl 毫秒EXPIREAT :将键的过期时间设为 timestamp 所指定的秒数时间戳PEXPIREAT : 将原创 2017-11-28 11:25:46 · 17664 阅读 · 2 评论 -
Redis数据持久化
由于Redis是内存数据库,一旦服务器进程退出,服务器中的数据库状态也会消失。为解决这个问题,Redis提供了RDB快照形式、AOF日志形式两种持久化方式,将内存中的数据保存到磁盘中,以免数据意外丢失。一、RDB持久化 RDB持久化就是将服务器某个时间点上的数据库状态以快照形式保存到一个二进制文件中,在Redis服务器重新启动时可以自动载入RDB文件,还原数据库状态。有两个R原创 2017-11-28 15:20:02 · 1001 阅读 · 0 评论 -
Redis中的事件
Redis服务器是一个事件驱动程序,服务器需要处理两类事件:文件事件和时间事件。一、文件事件 Redis服务器通过套接字与客户端进行连接,文件事件就是服务器对套接字操作的抽象。 文件事件是由文件事件处理器处理的。文件事件处理器以单线程方式运行,使用I/O多路复用程序监听多个套接字(既实现了高性能的网络通信模型又可以很好地与Redis服务器中其他单线程方式运行原创 2017-11-28 16:30:11 · 832 阅读 · 0 评论 -
Redis的复制功能
Redis中,通过slaveof命令或者设置slaveof选项,让一个服务器去复制另一个服务器,从而形成主从服务器关系,具有主从关系的服务器数据库状态一致。Redis的复制功能分两个步骤实现:同步(sync)和命令传播(command propagate)。同步操作是将从服务器数据库状态更新至主服务器数据库当前所处状态;命令传播则用于主服务器的数据库状态被修改导致主从服务器的数据库状态原创 2017-11-29 11:54:31 · 554 阅读 · 0 评论 -
Redis的监控功能
Redis通过引入一个或多个Sentinel实例组成的Sentinel系统以监视任意多个服务器,当主服务器进入下线状态时自动将从服务器升级为新的主服务器,然后由新服务器代替已下线的主服务器处理命令请求,达到提供高可用性的解决方案。一、监控功能 Sentinel本质上是一个运行在特殊模式下的Redis服务器,所以初始化时不会载入RDB文件或者AOF文件,而是创建连向被监视主服务原创 2017-11-29 16:10:59 · 1070 阅读 · 0 评论 -
Redis的集群结构
Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)进行数据共享,并提供复制和故障转移功能。一、节点 同其他分布式的集群一样,Redis集群也是由多个相互独立的节点组成的,通过将各个相互独立的节点连接起来,构成一个包含多个节点的集群。通过CLUSTER MEET 命令,将指定节点添加当前节点所在的集群:原创 2017-11-29 16:49:59 · 711 阅读 · 0 评论 -
Redis发布与订阅功能
发布/订阅”功能包含两种角色:发布者和订阅者。Redis的发布与订阅功能由publish、subscribe、psubscribe等命令组成。通过执行publish命令可以发布消息;通过执行subscribe命令,客户端可以订阅一个或多个频道;通过执行psubscribe命令,客户端可以订阅一个或多个模式。一、发布与订阅频道 如图所示,频道的发布与订阅功能。客户端A、B、C都原创 2017-11-29 18:11:10 · 2177 阅读 · 0 评论 -
Redis事务
事务同命令一样,都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。一、Redis事务的实现 Redis通过multi、exec、watch等命令来实现事务功能,Redis中一个事务从开始到结束包含三个阶段:事务开始、命令入队、事务执行。其中multi命令标志着事务开始,exec命令标志着事务执行,期间所有命令都会存放到事务队列中。在redis.h/r原创 2017-11-29 18:41:19 · 893 阅读 · 0 评论