redis的底层架构
2013-10-22 18:43
141 查看
简历中写着熟悉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% 时,将可用节点数量减少至大于等于当前已用节点数量。
注:http://www.redisbook.com/en/latest/internal/db.html#id3
另外:http://www.dewen.org/search/q/redis%20%E5%BA%95%E5%B1%82%E5%8E%9F%E7%90%86
这个帖子里面,讲解了好多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的创建过程(上码):
试着积累一下:
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% 时,将可用节点数量减少至大于等于当前已用节点数量。
注:http://www.redisbook.com/en/latest/internal/db.html#id3
另外:http://www.dewen.org/search/q/redis%20%E5%BA%95%E5%B1%82%E5%8E%9F%E7%90%86
这个帖子里面,讲解了好多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);
相关文章推荐
- ASP.NET底层架构探索之HttpHandlers
- 分布式架构springmvc+springboot+springcloud+redis
- 架构分布式____Redis集群架构各种方案分析
- 基于吉日嘎底层架构的Web端权限管理操作演示-组织机构管理
- 新浪微博首席架构师漫谈微博底层架构
- JavaWeb项目架构之Redis分布式日志队列
- 细说分布式Redis架构设计和踩过的那些坑
- Redis架构之防雪崩设计:网站不宕机背后的兵法
- 阅读笔记- 了解ASP.NET底层架构 之三
- 新浪微博首席架构师漫谈微博底层架构(转)
- 深入理解Redis:底层数据结构
- Redis与网站架构
- 一次关于游戏服务器底层通信架构的重构过程
- Redis在唯品会的应用实践-架构演进与功能定制
- flume+kafka+redis+storm分析系统架构
- 新浪微博首席架构师漫谈微博底层架构
- [架构] 大型网站架构系列只二 ----------------- 底层架构概论
- Redis底层数据结构之链表
- Memcached 及 Redis 架构分析和比较
- Android 底层系统架构图