redis的底层架构

简历中写着熟悉redis,结果找工作中,人家就问redis的底层架构,源码:

试着积累一下:

1、redis的数据类型:

redis是一种key-value的结构,key主要就是字符串,value则可以是字符串、列表、哈希表、集合或者有序表。

2、关于redis的一点小结:

  • 数据库主要由 dict 和 expires 两个字典构成,其中 dict 保存键值对,而 expires 则保存键的过期时间。
  • 数据库的键总是一个字符串对象,而值可以是任意一种 Redis 数据类型,包括字符串、哈希、集合、列表和有序集。
  • expires 的某个键和 dict 的某个键共同指向同一个字符串对象,而 expires 键的值则是该键以毫秒计算的 UNIX 过期时间戳。
  • Redis 使用惰性删除和定期删除两种策略来删除过期的键。
  • 更新后的 RDB 文件和重写后的 AOF 文件都不会保留已经过期的键。
  • 当一个过期键被删除之后,程序会追加一条新的 DEL 命令到现有 AOF 文件末尾。
  • 当主节点删除一个过期键之后,它会显式地发送一条 DEL 命令到所有附属节点。
  • 附属节点即使发现过期键,也不会自作主张地删除它,而是等待主节点发来 DEL 命令,这样可以保证主节点和附属节点的数据总是一致的。
  • 数据库的 dict 字典和 expires 字典的扩展策略和普通字典一样。它们的收缩策略是:当节点的填充百分比不足 10% 时,将可用节点数量减少至大于等于当前已用节点数量。
这个帖子里面,讲解了好多redis的疑问,可以好好读读。

2、redis为什么快:

采用epoll的通信方式。谈到epoll,在百度面试时两度被问到epoll,现在来仔细讲解一下:

Epoll可是当前在Linux下开发大规模并发网络程序的热门人选,Epoll Linux2.6内核中正式引入,和select相似,其实都I/O多路复用技术而已,并没有什么神秘的。

其他的复用技术还有, PPC/TPC模型,select,poll,模型;但是他们都是轮询,而epoll相当于中断。epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll之会把哪个流发生了怎样的I/O事件通知我们。此时我们对这些流的操作都是有意义的。(复杂度降低到了O(1))

另外对于epoll的创建过程(上码):

    g_workpool.set_epoll_timeo(g_Conf.ep_pool_tout_ms);
    g_workpool.set_conn_timeo(g_Conf.ep_conn_tout_ms * 1000);
    g_workpool.set_sock_num(g_Conf.ep_snum);
    g_workpool.set_queue_len(g_Conf.ep_qlen);


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值