Redis剖析
文章平均质量分 94
ws四年
这个作者很懒,什么都没留下…
展开
-
Redis事件驱动库
redis 内部有一个小型的事件驱动ae,它和 libevent 网络库的事件驱动一样,都是依托 I/O 多路复用 利用 I/O 多路复用技术,监听感兴趣的文件 I/O 事件,例如读事件,写事件等,同时也要维护一个以文件描述符为主键,数据为某个预设函数的事件表,这里其实就是一个数组或者链表 。当事件触发时,比如某个文件描述符可读,系统会返回文件描述符值,用这个值在事件表中找到相应的数据项,从而实原创 2014-09-19 23:38:36 · 953 阅读 · 0 评论 -
Redis 数据类型
redis的键可以保存不同类型的值,那么在对键进行操作时就必须直到键的类型和其上可以执行的操作,所以Redis 必须让每个键都带有类型信息,使得程序可以检查键的类型,并为它选择合适的处理方式。另外,在前面介绍各个底层数据结构时有提到,Redis 的每一种数据类型,比如字符串、列表、有序集,它们都拥有不只一种底层实现(Redis 内部称之编码,encoding),这说明,每当对某种数据类型的键进行操原创 2014-09-24 22:12:54 · 949 阅读 · 0 评论 -
Redis 数据淘汰策略
在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,redis 内存数据集大小达到设置的最大使用内存大小后,就会施行数据淘汰策略。redis 提供 6种数据淘汰策: # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory # is reached? You can sel原创 2014-10-08 15:51:31 · 3180 阅读 · 0 评论 -
Redis AOF持久化
AOF持久化记录所有服务器对数据库的写操作,并在服务器启动时,用这些命令来还原数据集。AOF文件中的命令都以Redis协议的格式来记录,新命令会被追加到文件的末尾。Redis还支持后台对AOF文件进行重写,防止其超过AOF文件限制的大小 AOF持久化的优缺点 优点 ·使用AOF持久化使Redis变得更耐久你可以设置不同的 fsync 策略,比如无 fsync ,每秒钟一次 fsyn原创 2014-09-29 22:21:16 · 3133 阅读 · 1 评论 -
Redis 主从复制
Redis 支持简单且易用的主从复制(master-slave replication)功能,该功能可以让从服务器 (slave server)成为主服务器 (master server) 的精确复制品 以下是关于 Redis 复制功能的几个重要方面: • Redis 使用异步复制。从 Redis 2.8 开始,从服务器会以每秒一次的频率向主服务器报告复制流(replication原创 2014-10-06 22:43:56 · 8091 阅读 · 0 评论 -
Redis RDB持久化
在运行的情况下,redis将数据以数据结构的形式保存在内存中,为了让数据在redis重启之后仍然可用,Redis提供了RDB和AOF两种持久化方式,本篇讲解RDB持久化的工作方式 在运行时,redis将内存中的数据库以快照的方式存储到磁盘中,在重启后读取磁盘中RDB文件来将redis恢复到原来的状态 RDB的优缺点 优点 ·RDB是一个非常紧凑的文件,它保存了redis在某个时间点上的数据原创 2014-09-27 14:41:15 · 2535 阅读 · 0 评论 -
Linux smaps接口文件结构
在Linux内核 2.6.16中引入了一个系统内存接口特性,这个接口位于/proc/$pid/目录下的smaps文件中 ,一看内容发现是进程内存映像信息,比同一目录下的maps文件更详细些400df000-4048c000 r--s 00000000 1f:05 286 /data/dalvik-cache/system@framework@core.jar@classes.de转载 2014-09-27 16:32:19 · 745 阅读 · 0 评论 -
Redis 事务机制实现
事务提供了一种“将多个命令打包,然后一次性、按顺序地执行”的机制,它提供两个保证: • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断 • 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行 MULTI,EXEC,DISCARD,WATCH 四个命令是 redis 事务的四个基础命令。其中:原创 2014-09-26 11:37:10 · 4655 阅读 · 0 评论 -
Redis事务机制(二)
事务中可能出现的错误 执行事务机制时可能会出现以下两种错误: • 事务在执行EXEC 之前,入队的命令可能会出错。比如说,命令可能会产生语法错误(参数数量错误,参数名错误,等等),或者其他更严重的错误,比如内存不足(如果服务器使用 maxmemory 设置了最大内存限制的话) • 命令可能在EXEC 调用之后失败。举个例子,事务中的命令可能处理了错误类型的键,比如将列表命令用在了字符串键上原创 2014-09-26 15:45:35 · 1105 阅读 · 0 评论 -
Redis inset内部结构
ntset 和 dict 都是 sadd 命令的底层数据结构,当添加的所有数据都是整数时,会使用前者;否则使用后者。特别的,当遇到添加数据为字符串,即不能表示为整数时,redis 会把数据结构转换为 dict,即把 intset 中的数据全部搬迁到 dict。 整数集合的应用 Intset 是set的底层实现之一,如果一个集合: 1. 只保存着整数元素; 2. 元素的数量不多;原创 2014-09-24 11:18:20 · 1435 阅读 · 0 评论 -
Redis ziplist内部结构
ziplist是用一个字符串来实现的双向链表结构,顾名思义,使用ziplist可以减少双向链表的存储空间,主要是节省了链表指针的存储,如果存储指向上一个链表结点和指向下一个链表结点的指针需要8个字节,而转化成存储上一个结点长度和当前结点长度在大多数情况下可以节省很多空间(最好的情况下只需2个字节)。但是每次向链表增加元素都需要重新分配内存。 ziplist中的结构体 typedef struc转载 2014-09-24 10:39:11 · 773 阅读 · 0 评论 -
跳跃表skiplist
跳表是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的。下面来研究一下跳表的核心思想:先从链表开始,如果是一个简单的链表,那么我们知道在链表中查找一个元素I的话,需要将整个链表遍历一次。 如果是说链表是排序的,并且节点中还存储了指向前面第二个节点的指针的话,那么在查找转载 2014-09-22 20:12:42 · 559 阅读 · 0 评论 -
Redis核心结构字典
Redis 是支持多key-value数据库,并用 RedisDb 来表示一个key-value数据库. redisServer 中有一个 redisDb *db成员变量, RedisServer 在初始化时,会根据配置文件的 db 数量来创建一个 redisDb 数组. 客户端在连接后,通过 SELECT 指令来选择一个 reidsDb,如果不指定,则缺省是redisDb数组的第1个(即下标是原创 2014-09-20 12:52:27 · 647 阅读 · 0 评论 -
Redis运行流程解析
概述Redis通过定义一个 struct redisServer 类型的全局变量server 来保存服务器的相关信息(比如:配置信息,统计信息,服务器状态等等)。启动时通过读取配置文件里边的信息对server进行初始化(如果没有指定配置文件,将使用默认值对sever进行初始化),初始化的内容有:起监听端口,绑定有新连接时的回调函数,绑定服务器的定时函数,虚拟内存初始化,log初始化等等转载 2014-09-19 20:40:40 · 2756 阅读 · 0 评论 -
深入理解Redis中的主键失效及其实现机制
作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Reids也不例外。在Redis提供的诸多命令中,EXPIRE、EXPIREAT、PEXPIRE、PEXPIREAT以及SETEX和PSETEX均可以用来设置一条Key-Value对的失效时间,而一条Key-Value对一旦被关联了失效时间就会在到期后自动删除(或者说变得无法访问更为准确)。可以说,主键失效这个概念还是比较容易理解转载 2015-04-08 22:51:25 · 709 阅读 · 0 评论