您的位置:首页 > 数据库 > Redis

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的创建过程(上码):

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: