![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
绝世好阿狸
这个作者很懒,什么都没留下…
展开
-
【redis】RDB 持久化
RDB是基于快照的持久化方式,也就是把数据按照一定的格式转化为二进制格式,存在磁盘上,之后可以根据这个快照文件恢复数据。关于RDB有两个命令一个是SAVE,这是阻塞式的,服务端只有执行完持久化才会接受并处理新的请求,在此期间,其余的请求只能等待。另一个是BGSAVE,服务端会fork一个进程来做持久化,之后仍然可以处理其他的请求,所以是非阻塞式的。RDB文件的格式如下:REDI原创 2017-08-24 23:49:13 · 234 阅读 · 0 评论 -
【redis】AOF 持久化
AOF是基于命令的持久化方式,通常来讲,最简单是就每一次执行一个命令,就把命令保存到缓冲区中,这个缓冲区也是在redisServer结构体内定义的。然后会按照一定的策略将缓冲区的命令写入到文件中,持久化。使用缓冲区一次性写入大量数据io效率更高。但是如果采用以上简单的把每一条命令都写入文件,如果进行了很多次操作,AOF文件会十分庞大。所以有了另一种方法,AOF重写,字面意思有些误导,这个策原创 2017-08-25 10:27:34 · 188 阅读 · 0 评论 -
【redis】服务端 数据库实现
redis是用C实现的内存数据库,今天学习了下其服务端的实现。服务端用一个redisServer的结构体定义了一个服务端数据结构。其中有一个db指针,是一个数组,数组的每一个元素是一个db结构体,db结构体定义了一个数据库的结构。默认情况,redis会创建16个数据库,即db数组的代销是16。如果要修改数据库的数目,可以通过设置redisServer的dbNum属性,在启动时会根据原创 2017-08-24 23:28:39 · 431 阅读 · 0 评论 -
【redis】事件
redis是单进程单线程的服务器,在服务端是使用多路io复用技术实现的,也就是说是基于事件实现的。redis分为两种类型的事件,文件时间和时间事件。文件事件:也就是传统的io操作,基本分为连接,读取,写入和关闭。不同的客户端发来各种各样的请求,redis的多路复用程序会把请求分解为不同的事件,然后将socket和事件一起打包放入队列中,交给事件分离器处理,事件分离器会把各个事件交给对应原创 2017-08-26 16:14:33 · 542 阅读 · 0 评论 -
【redis】客户端
这里的客户端并不是说redis-cli的是实现,而是在服务端检测到一个连接事件以后,创建的一个描述客户端的数据结构,本质上还是服务端的实现,服务端对客户端的封装。用的是一个叫做redisClient的结构体。里面的重要属性有:套接字;名字;冲入缓冲区,客户端发来的命令会被存在这里输出缓冲区,服务端给客户端返回的数据存在这里命令,服务端解析客户端缓冲区的内容,分析出命令和原创 2017-08-26 16:24:43 · 251 阅读 · 0 评论 -
【redis】字符串实现原理sds
redis 键值对中的key都是string类型的。redis内部实现中是怎么处理string呢?redis底层是用c写的,对于stirng并没有直接使用c的字符数组,而是自己封装了一个sds的类型。结构如下:buf数组用于存真正的字符。为什么要新建数据类型?必然是为了抽象,是的编程更加简单。原有的c的字符串的api是不安全的,因为在使用字符数组以后,需要跟踪内存的分配。在使用之前,需原创 2017-08-16 14:17:41 · 1345 阅读 · 0 评论 -
【Redis】map实现原理
哈希表是一个很常用的数据结构,不同的平台对它有不同的实现。下面是redis的实现。首先是redis中与哈希表有关的数据结构定义。节点定义:这里有next指针的存在说明这是一个采用拉链法构建的哈希表。key是键,值是一个union,可以是以下的任意一种类型:指针,uint64和int64类型。下面是table的实现:一个ht结构体就是哈希表的一个容器数组。table是一个...原创 2017-09-18 19:35:30 · 5001 阅读 · 0 评论 -
【redis】Key 命名
https://redis.io/documentationKey不宜过大,占空间;命名时,redis有一个隐式的规范,使用:号分割语义。比如业务:实体类型:id这种方式,可读性较高。可以把Key前缀放入一个公共jar包统一维护。...原创 2019-03-14 11:12:34 · 646 阅读 · 0 评论 -
【redis】zset 命令
1)添加zadd key score1 member1 score2 member2 ....2)查看单个元素查看rankzrank key member:增序zrevrank key member:降序许多zset的命令都会提供增序和降序两个版本,而且默认是增序排序的。查看scorezscore key member3)查看整个set按照rank查...原创 2019-07-07 13:11:20 · 4230 阅读 · 0 评论