随笔分类 - redis源码
摘要:魔改redis之添加命令hrandmember 正文 前言 想从redis的hash表获取随机的键值对,但是发现redis只支持set的随机值SRANDMEMBER。但是如果把hash表中的数据又存一份,占用的空间又太大。也可以通过先HLEN获取hash表的大小,随机出一个偏移值,再调用HSCAN获
阅读全文
摘要:redis4.0的持久化 简介 虽然redis是内存数据库,但它也提供了持久化的功能。其中rdb持久化可以定时备份用于回滚,而aof持久化则更接近数据库最新的状态,服务器重启后可以恢复至最新的状态。两者数据备份的粒度不同,rdb将整个数据库备份,aof持久化粒度更为小,但生成的文件更大。如果有多个线
阅读全文
摘要:redis4.0的时间事件与expire 简介 时间事件和文件事件有着相似的接口,他们都在aeProcessEvents中被调用。不同的是文件事件底层委托给 select,epoll等多路复用接口。而时间事件通过每个tick检查时间事件的触发时间是否已经到期。redis4.0版本中只注册了一个时间事
阅读全文
摘要:redis4.0的命令 简介 正文 redisCommand与redisCommandTable 所有的命令一开始都位于server.c文件起始位置的redisCommandTable中,在观察redisCommandTable表之前,我们先看一下redisCommand结构体。 typedef v
阅读全文
摘要:redis4.0的文件事件与客户端 简介 文件事件的流程大概如下: 在服务器初始化时生成aeEventLoop并赋值给server,接着创建监听TCP连接事件。 处理TCP连接时会创建client类型的对象,将其绑定在accept函数返回的文件描述符fd上,并对fd注册一个可读事件,当客户端数据来临
阅读全文
摘要:redis4.0的启动流程 简介 redis 在接收客户端连接之前,大概做了以下几件事情: 初始化服务端配置 初始化服务器 进入事件主循环 正文 全局server对象 在redis中,有一个全局的对象server保存了redis服务器对象的信息,redis服务器的操作都围绕着该对象展开。下文中当提及
阅读全文