字符串命令,列表命令,散列命令,集合命令,有序集合命令
Redis服务器时一个事件驱动程序,服务器处理的事件分为时间事件和文件事件两类。 文件事件处理器是基于Reactor模式出现的网络通信程序。 文件事件是对套接字操作的抽象:每次套接字变为可应答(acceptable)、可写(writable)或者可读(readable)时,相应的文件事件就会产生。 文件事件分为AE_READABLE事件和AE_WRITEABLE事件两类。 时间事件分为定时事件和周期性事件。 服务器在一般情况下只执行serverCron函数一个时间函数,并且这个事件是周期性事件。 文本事件和时间事件之间是合作关系,服务器会轮流处理这种事件,并且处理事件的过程中也不会产生抢占。 时间事件的实际处理时间通常会比设定的到达时间晚一些。
AOF文件通过保存所有修改数据库的写命令请求来记录服务器的数据库状态。 AOF文件中的所有命令都以Redis命令请求协议的格式保存。 命令请求会先保存到AOF缓冲区里面,之后再定期写入并同步到AOF文件。 appebdfsync选项的不同值对AOF持久化功能的安全性以及Redis服务器的性能有很大的影响。
RDB文件用于保存和还原Redis服务器所有数据库中的所有键值对数据。 SAVE命令由服务器进程直接执行保存操作,所以该命令会阻塞服务器。 BGSAVE命令由子进程执行保存操作,所以该命令不会阻塞服务器。 服务器状态中会保存所有用save选项设置的保存条件,当任意一个保存条件被满足时,服务器会执行BGSAVE命令。 RDB文件时一个经过压缩的二进制文件,由多个部分组成。 对于不同类型的键值对,RDB文件会使用不同的方式来保存它们。
Redis服务器的所有数据库都保存在redisServer.db数组中,而数据库的数量则由redisServer.dbnum属性保存。 客户端通过修改目标数据库指针,让它指向redisServer.db数组中不同元素来切换不同的数据库。 数据库主要由dict和expire两个字典构成,其中dict字典负责保存键值对,而expires字典则负责保存键的过期时间。 因为数据库由字典构成,所以对数据库的操作都是建立在字典操作之上的。 数据库的键总是一个字符串对象,而值则可以是任意一种Redis对象类型。 expires字典的键指向数据库中的某个键,而值则记录了数据库键的过期时间,过期时间是一个以毫秒为单位的UNIX时间戳。 Redis使用惰性删除和定期删除两种策略来删除过期的键:惰性删除策略值在碰到过期的键时才进行删除操作,定期删除策略则每隔一段时间主动查找并删除过期键。 执行SAVE命令或者BGSAVE命令所产生的新RDB文件不会包含已经过期的键。 执行BGREWRITEAOF命令所产生的重写AOF文件不会包含已经过期的键。 当一个过期键被删除之后,服务器会追加一条DEL命令到现有AOF文
Redis数据库中的每个键值对的键和值都是一个对象。 Redis共有字符串、列表、哈希、集合、有序集合五种类型的对象,没中类型的对象至少都有两种或者以上的编码方式,不同的编码可以在不同的使用场景上优化对象的使用效率。 服务器在执行某些命令之前,会先检查给定键的类型能否执行指定的命令,而检查一个键的类型就是检查键的值对象的类型。 Redis的对象系统带有引用计数实现的内存回收机制,当一个对象不再被使用时,该对象所占用的内存就会被自动释放。 Redis会共享值为0到9999的字符串对象。 对象会记录自己的最后一次被访问的时间,这个时间可以用于计算对象的空转时间。
压缩列表是一种为节约内存而开发的顺序型数据结构。 压缩列表被用作列表键和哈希键的底层实现之一。 压缩列表可以包含多个节点,每个节点可以保存一个字节数组或者整数值。 添加新节点到压缩列表,或者从压缩列表中删除节点,可能会引发连锁更新操作,但这种操作出现的几率并不高。
整数集合是集合键的底层实现之一。 整数集合的底层实现为数组,这个数组以有序、无重复的方式保存结合元素,在有需要时,程序会根据新添加元素的类型,改变这个数组的类型。 升级操作为整数集合带来了操作上的灵活性,并且尽可能的节约了内存。 整数集合只支持升级操作,不支持降级操作。
跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。 Redis使用跳跃表作为有序结合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员(member)是比较长的字符串时,Redis就会使用跳跃表来作为有序集合见的底层实现
字典,有称为符号表(symbol table)、关联数组(associative array)或映射(map),是一种用于保存键值对(key-value pair)的抽象数据结构。
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过删除节点来灵活地调整链表地长度。当一个列表键包含了数量比较多地元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。出了链表键之外,发布与订阅、慢查询、监视器等功能也用到了链表,Redis服务器本身还使用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区(Output buf
C字符串只会作为字符串字面量(string literal)用在一些无须对字符串进行修改的地方,不如打印日志 redisLog(REDIS_WARNING, "Redis is now ready to exit, bye bye…"); 当Redis需要的不仅仅是一个字符串字面量,而是一个可以被修改的字符串时,Redis就会使用SDS来表示字
Redis[Remote Directory Server]:远程服务器字典
MySql-统计所有会员的最高前10次的积分和
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号