前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[技术创作101训练营] 一文带你了解Redis如此火爆的原因

[技术创作101训练营] 一文带你了解Redis如此火爆的原因

原创
作者头像
神无月
修改2020-09-22 10:24:13
3800
修改2020-09-22 10:24:13
举报
文章被收录于专栏:小文博客小文博客

Redis 之父 Salvatore Sanfilippo 决定不再担任 Redis 项目的软件维护者,Redis 项目放弃之前的专制管理模式,转而采用新的“社区自治模式”。

前段时间,Sanfilippo在自己的博客上发布了一篇公告,表示将不再担当 Redis 开源项目的软件维护者,并“将 Redis 交给 Redis 社区”。这意味着 Redis 项目的未来命运将由整个社区决定,而不再单纯掌握在 Sanfilippo 一个人手中。

原文链接:http://antirez.com/news/133
原文链接:http://antirez.com/news/133

今天就和大家聊聊,近些年来,被大家广泛应用且经久不衰的redis是有什么优点让它如此迷人?

性能超强

1. “底子好”——C语言编写,操作完全基于内存

redis完全基于内存,绝大部分请求是纯粹的内存操作,如此一来让redis的读写速度基本秒杀所有数据库。

而C作为性能最好的高级编程语言,自然成为了redis的首选。

正是高性能编程语言+高速数据存储方式,为redis成为“性能之王”奠定了坚实的基础。

2. "专注"——单线程

同其他高性能程序设计不同,redis为了避免加锁、释放锁产生的性能消耗,并没有采用多线程。这使得CPU不在成为限制redis性能的因素,所以在处理海量数据时也不用担心redis的性能问题。

redis采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。

3. "量身打造的数据结构"——一套为redis打造的数据结构

为了追求读写速度,Sanfilippo为redis单独设计了一套数据结构供其读写数据。全方位压榨每一点可以优化的空间,只为redis能更快一点!详细的数据结构内容我们下文会展开分析。

支持多种数据类型存储

redis支持字符串(string)、散列(hash)、列表(list)、集合(set)和有序集合(sorted set)这五种类型的存储。考虑到C语言数据结构的局限性,redis自己设置了一套完整的数据结构供其读写数据,这使得redis基本能存储所有数据。

Redis 没有直接使用 C 语言传统的字符串表示, 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串表示。

SDS相比C 字符串有如下优点:

  1. 常数复杂度获取字符串长度。
  2. 杜绝缓冲区溢出。
  3. 减少修改字符串长度时所需的内存重分配次数。
  4. 二进制安全。
  5. 兼容部分 C 字符串函数。

相比C字符串来说,SDS最大的优点就是能存储二进制数据,这使得redis基本能存储所有数据。

持久化存储

作为一个内存数据库,最担心的,就是万一机器死机,数据会消失掉。redi使用rdb和aof做数据的持久化存储。主从数据同时,生成rdb文件,并利用缓冲区添加新的数据更新操作做对应的同步。

发布/订阅模式

发布/订阅极大的扩展了redis的应用场景,被广泛应用于实时消息系统、邮件订阅、队列推送等场景。

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

著名的Laravel框架队列系统实现也是基于redis发布/订阅模式。

干货

以上这些优点让redis在缓存、排行榜、商品秒杀、分布式会话、消息系统等场景得到了极好的运用,更是被行业内大小公司所热爱。有小伙伴想更深入了解redis数据结构以及其如何实现,小编推荐以下两个链接供大家学习。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 性能超强
  • 支持多种数据类型存储
  • 持久化存储
  • 发布/订阅模式
  • 干货
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档