Redis5-为什么快

1.基于内存的数据库

存在内存,减少了不必要的IO操作,操作速率快

2.高效的数据结构

1.简单动态字符串

Redis字符串如果保存的对象是整数,就用int 存储,如果不能用整数表示,就用SDS来存储,SDS通过字符串的长度,预分配空间,可以高效计算长度,进行append操作。

2.双向链表

3.压缩列表

4.哈希表

链式哈希解决哈希冲突,随着链表长度的增加,查询会耗时,所以有了rehash,对哈希表长度进行扩展。

渐进式rehash的方式,进行增删改查时,会将索引位置上所有的键值对进行迁移

6.跳表

因为链表适合插入删除,不适合用来查询。所以为了适合查询,就有了跳表。跳表就是多层的有序的链表,查询过程从左到右,从上到下,时间复杂度logn。

跳表的实现是概率均衡的思想,随机函数决定节点插入的层数,50%的概率在第一层,25%的概率在第二层,12.5%的概率在第三层,这样保证了上层的数据越来越少,所以跳跃查询就很方便。

3.合适的线程模型

单线程的执行,不需要上下文切换,不需要考虑锁的问题,减少了耗时。(单线程的意思是处理网络请求的时候只用一个线程来处理。)

IO多路复用模型监听客户端连接。

引申:

1.redis数据结构?

对外是5种redis对象:String、List、Hash、Set、Zset

底层依托于:SDS、跳表、压缩列表等等

2.IO多路复用是什么意思?

多路,就是多个网络连接。复用:就是使用同一个线程。

IO多路复用程序职责:监听多个套接字,将产生事件的套接字放到队列里面,向 文件事件分派器传送这些套接字

IO多路复用程序的实现:底层使用的select、poll、epoll。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值