登录
首页 >  数据库 >  Redis

单线程Redis很快?带你看看原因

来源:51cto

时间:2023-01-23 09:01:14 244浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是数据库学习者,那么本文《单线程Redis很快?带你看看原因》就很适合你!本篇内容主要包括单线程Redis很快?带你看看原因,希望对大家的知识积累有所帮助,助力实战开发!

 Redis 作为一种 KV 缓存服务器,有着极高的性能,相对于 Memcache,Redis 支持更多种数据类型,因此在业界应用广泛。

记得刚毕业那会参加面试,面试官会问我 Redis 为什么快,由于当时技术水平有限,我只能回答出如下两点:

  • 数据是存储在内存中的。

  • Redis 是单线程的。

当然,将数据存储在内存中,读取的时候不需要进行磁盘的 IO,单线程也保证了系统没有线程的上下文切换。

但这两点只是 Redis 高性能原因的很小一部分,下面从数据存储层面上为大家分析 Redis 性能为何如此高。

Redis性能如此高的原因,我总结了如下几点:

  • 纯内存操作

  • 单线程

  • 高效的数据结构

  • 合理的数据编码

  • 其他方面的优化

在 Redis 中,常用的 5 种数据结构和应用场景如下:

  • String:缓存、计数器、分布式锁等。

  • List:链表、队列、微博关注人时间轴列表等。

  • Hash:用户信息、Hash 表等。

  • Set:去重、赞、踩、共同好友等。

  • Zset:访问量排行榜、点击量排行榜等。

SDS

Redis 是用 C 语言开发完成的,但在 Redis 字符串中,并没有使用  C 语言中的字符串,而是用一种称为 SDS(Simple Dynamic String)的结构体来保存字符串。

struct sdshdr { 
      int len; 
    int free; 
    char buf[];

SDS 的结构如上图:

  • len:用于记录 buf 中已使用空间的长度。

  • free:buf 中空闲空间的长度。

  • buf[]:存储实际内容。

例如:执行命令 set key value,key 和 value 都是一个 SDS 类型的结构存储在内存中。

SDS 与 C 字符串的区别

①常数时间内获得字符串长度

C 字符串本身不记录长度信息,每次获取长度信息都需要遍历整个字符串,复杂度为 O(n);C 字符串遍历时遇到 '

声明:本文转载于:51cto 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表