【redis进阶之路】redis工作原理之redis为什么这么快(五)

143 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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、代码过于复杂