Redis
文章平均质量分 90
优质毛
这个作者很懒,什么都没留下…
展开
-
一起学Redis(1)——简单动态字符串
Redis是企业使用非常广泛的内存数据库,通常用作缓存,也是典型的NoSql数据库。NoSql数据库生产上比较受欢迎的主要有面向键值对的Redis和MemcacheDB,文档存储的MongoDB还有按列存储的HBase、Cassandra。这里我们主要研究学习Redis。前面说到Redis既然是一种数据库,那研究数据库,最基本也就是最核心的一定是它的存储设计,由于Redis的读写快速、使用简单...原创 2018-05-02 19:05:28 · 211 阅读 · 0 评论 -
一起学Redis(11)——事件
Redis服务器是一个事件驱动程序,服务器主要处理两类事件:文件事件(file event):Redis服务器通过套接字与客户端(或者其他Redis服务器)进行连接,而文件事件就是服务器对套接字的抽象。服务器与客户端(或者其他服务器) 的通信会产生相应的文件事件,而服务器则通过监听并处理事件来完成一系列网络通信操作。时间事件(time event):Redis服务器中的一些操作(比如se...原创 2018-06-28 14:41:29 · 367 阅读 · 0 评论 -
一起学Redis(13)——服务端
Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转。命令请求的执行过程发送命令请求Redis服务器的命令请求来自Redis客户端,当用户在客户端中键入一个命令请求时,客户端会将这个命令请求转换成协议格式,然后通过连接到这个服务器的套接字, 将协议格式的命令请求发送给服务器。...原创 2018-07-10 16:28:43 · 338 阅读 · 0 评论 -
一起学Redis(9)——RDB持久化
Redis是一个键值对数据库服务器,服务器中包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便,我们把服务器中的非空数据库以及它们的键值对统称为数据库状态。因为redis是内存数据库,如果不想办法将存储在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。为了解决这个问题,Redis提供了RDB持久化功能,这个功能可以将Redis...原创 2018-06-08 22:44:36 · 262 阅读 · 0 评论 -
一起学Redis(10)——AOF持久化
除了RDB持久化,Redis还提供了AOF(Append Only File)持久化功能。AOF不同于RDB,其保存Redis服务器所执行的写命令来记录数据库状态。AOF持久化的实现命令追加AOF持久化分为命令的追加(append)、文件写入、文件同步(sync)三个步骤。AOF打开时,服务器执行一个写命令后,会以协议格式将被执行的写命令追加到服务器的状态aof_buf缓冲区的...原创 2018-06-22 22:16:01 · 195 阅读 · 0 评论 -
一起学Redis(6)——对象属性
类型检查和命令多态Redis中用于操作键的命令基本上可以分为两种类型:对任何键都可以执行的命令,比如DEL、EXPIRE、RENAME、OBJECT只能对特定类型的键执行,比如SET、GET、APPEND、SRRLEN 只能对字符串键执行HDEL、HSET、HGET、HLEN 只能对哈希键执行RPUSH、LPOP、LINSERT、LLEN 只能对列表键执行SADD、SPOP、...原创 2018-05-31 09:46:56 · 895 阅读 · 0 评论 -
一起学Redis(8)——过期时间和通知
设置键的生存时间或过期时间通过EXPIRE命令或者PEXPIRE命令,客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间(Time To Live,TTL),在经过指定的秒数或者毫秒数之后,服务器就会自动删除生存时间为0的键。EXPIREAT命令或者PEXPIREAT命令,以秒或者毫秒精度给数据库中的某个键设置过期时间(expire time)。TTL命令和PTTL命令接受一个带有生...原创 2018-06-06 18:53:47 · 3305 阅读 · 0 评论 -
一起学Redis(7)——RedisDB
服务器中的数据库Redis服务器将所有的数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库。在初始化服务器时,程序会根据服务器状态的dbnum属性来决定创建 多少个数据库。struct redisServer { redisDb *db; // ...原创 2018-06-05 19:45:20 · 2305 阅读 · 0 评论 -
一起学Redis(5)——对象
前面说了Redis使用的主要数据结构,但是Redis并没有直接使用这些数据结构来实现,而是基于这些数据结构创建了一个对象系统,包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象。除此之外,redis还有基于引用计数器的内存回收机制,以及对象共享机制。对象的类型和编码typedef struct redisObject{ unsigned type; unsi...原创 2018-05-29 19:24:41 · 227 阅读 · 0 评论 -
一起学Redis(4)——整数集合、压缩表
整数集合整数集合(intset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。redis-> SADD numbers 1 3 5 7 9(integers) 5redis-> OBJECT ENCODING numbers"intset"看看整数集合的定义typedef ...原创 2018-05-06 01:40:31 · 415 阅读 · 0 评论 -
一起学Redis(3)——跳跃表
概念Redis中又一个重要的数据结构——跳跃表。跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。大部分情况下,跳跃表的效率可以和平衡二叉树相媲美,并且跳跃表比平衡二叉树实现更简单,操作也更容易。Redis使用跳跃表作为有序集合的底层...原创 2018-05-05 23:10:20 · 615 阅读 · 0 评论 -
一起学Redis(2)——链表、哈希表
链表废话不多说,今天继续学习Redis的基本数据结构——链表和哈希表。 先看一个例子,以下展示的integers列表键包含了从1到1024共一千零二十四个整数:redis-> LLEN integers(integer) 1024redis-> LRANGE integers 0 51)"1"2)"2"3)"3"4)"4"5)"5"integers原创 2018-05-03 19:52:03 · 1140 阅读 · 1 评论 -
一起学Redis(12)——客户端
Redis服务器是典型的一对多服务器程序,一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接受 并处理客户端发送的命令请求,并向客户端返回命令回复。通过使用由I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的 方式来处理命令请求,并与多个客户端进行网络通信。对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的red...原创 2018-07-04 18:44:54 · 595 阅读 · 0 评论