持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
redis为什么这么快
1、基于内存
redis的数据都是存储在内存中的,所有读写速度很快
2、单线程,不用维护锁机制
redis采用单线程机制,指令串行,不用维护额外的锁机制,资源竞争等
3、数据结构简单,操作简单
自己内部实现了各种数据结构,根据情况进行了优化 (1)动态字符串结构 redis采用c语言进行开发,我们知道c对于字符串的支持不是很友好,比如要访问字符串的长度还需要遍历所有字符来查询,而redis对字符串数据类型进行了重构,使得字符串查询效率更高,其结构代码如下
struct sdshdr { //SDS简单动态字符串\
int len; //记录buf中已使用的空间\
int free; // buf中空闲空间长度\
char buf[]; //存储的实际内容\
}
(2)hash的字典结构的容量大小取2^N,使取模运算可以转换为按位运算,更快。同时扩容缩容采用采用渐进式rehash
(3)zset采用跳表结构,范围查询更快
(4)list采用压缩链表结构,内存空间连续
4、采用了epoll多路复用器
能够接收大量socket连接,并且监控,能将有效socket传给内核执行后续读写操作
redis的VM机制
之前有看到不少博客都将redis的VM机制纳入redis快的原因之一,VM的操作是内存满了将冷数据保存到磁盘,之前了解到redis的淘汰策略是内存满了将冷数据删除,于是不禁产生这两个不是矛盾吗的疑问,进一步查询资料后发现VM机制在redis2.4的时候就已经弃用了,在redis2.6的时候删除了。使用VM反而存在性能问题,可能导致redis卡死,所以被弃用了。因此个人觉得VM机制不应该再作为redis快的原因
VM机制为什么被弃用?
1、重启太慢
2、保存数据太慢
3、代码过于复杂