Redis起源

2024-07-30 18:28:37 浏览数 (1)

从数据库发展史说起

1.单数据库实例

  • 时代背景:在互联网 大数据时代之前,企业的数据量相对较小,业务逻辑也相对简单。
  • 技术特点:单个数据库实例足以处理企业的内部信息管理系统需求,常见的关系型数据库如Oracle、MySQL、SQL Server等能够满足基本的存储和查询需求。

2. 缓存 单个数据库实例

  • 时代背景:随着系统访问用户的增多和数据量的增大,单个数据库实例开始出现性能瓶颈。
  • 技术特点:引入缓存技术,将热点数据存储在内存中,减少数据库的读取压力,提高系统响应速度。

3. 缓存 单个数据库实例 读写分离

  • 时代背景:数据量继续增大,数据库的写入和读取压力进一步增加。
  • 技术特点:实现数据库的读写分离,主数据库处理写操作,从数据库处理读操作,通过主从复制保持数据一致性。

4. 缓存 主从数据库集群 读写分离 分库分表

  • 时代背景:数据量再次增大,主数据库的写库压力成为新的瓶颈。
  • 技术特点
    • 引入数据库集群,通过主从复制和负载均衡提高系统的可用性和扩展性。
    • 实施分库分表策略,将数据分散存储在多个数据库实例中,降低单个数据库的压力。

5. NoSQL 主从数据库集群 读写分离 分库分表

  • 时代背景:互联网 大数据时代的到来,对数据库系统提出了更高的并发性、实时性和灵活性要求。
  • 技术特点
    • 引入NoSQL数据库(如MongoDB、Cassandra、Redis等),以支持高并发、高可用和灵活的数据模型。
    • 结合主从数据库集群、读写分离和分库分表,构建更加复杂和强大的数据存储解决方案。

Redis出现的背景

磁盘存储的原理

  • 磁道和扇区:磁盘由多个磁道组成,每个磁道被划分为多个扇区,每个扇区通常为512字节。这些是磁盘存储数据的基本单元。
  • 寻址速度:寻址速度是指磁盘臂移动到指定磁道所需的时间,通常以毫秒(ms)为单位。
  • 带宽:带宽是指磁盘读取或写入数据的速率,通常以每秒千兆字节(GB/s)来衡量。

内存存储的原理

  • 寻址速度:内存的寻址速度非常快,通常在纳秒(ns)级别。
  • 带宽:内存的带宽也比磁盘大得多,这使得内存的数据读写速度远超磁盘。

I/O成本问题

  • 大文件的挑战:当数据文件非常大时,从磁盘中读写数据会变得非常慢,尤其是随机读写操作。
  • 索引的挑战:为了有效管理大量数据,需要创建索引。然而,索引本身可能变得非常大,需要占用大量内存,否则会导致频繁的磁盘I/O操作。
  • 操作系统的最小读取单位:操作系统在读取磁盘数据时,通常以块(block)为单位进行,这个块的大小通常是4KB,这意味着即使只需要一个字节的数据,操作系统也会读取整个4KB块。

磁盘作为存储介质,I/O瓶颈是最大的问题,当文件越来越大,磁盘寻址和带宽远低于内存,磁盘比内存寻址慢了10w倍

诞生

2008年萨尔瓦多在开发一个进行网站实时统计软件项目(LLOOGG),项目的实时统计功能需要频繁的进行数据库的读写(对数据库的读写要求很高—数千次/s),MySQL满足不了项目的需求,萨尔瓦多就使用C语言自定义了一个数据存储系统—Redis。考虑到最终限制数据库性能的瓶颈在于磁盘,他自己去实现一个具有列表结构的数据库的原型,把数据放在内存而不是磁盘,这样可以大大地提升列表的 push 和 pop 的效率。萨尔瓦多发现这种思路确实能解决这个问题,所以用 C 语言重写了这个内存数据库,并且加上了持久化的功能。2009 年,Redis 横空出世了。从最开始只支持列表的数据库,到现在支持多种数据类型,并且提供了一系列的高级特性,Redis 已经成为一个在全世界被广泛使用的开源项目。后来萨尔瓦多不满足仅仅在LLOOGG这个项目中使用redis,就对redis进行产品化并进行开源,以便让更多的⼈能够使用。

LLOOGG.COM 提供的类似于访客的功能,它可以查看最多 10000 条的最新浏览记录。这样的话,它需要为每一个网站创建一个列表(List),不同网站的访问记录进入到不同的列表。如果列表的长度超过了用户指定的长度,它需要把最早的记录删除(先进先出)。

Redis主要发展史

Redis 1.0.0 Redis的第一个版本于2009年发布,主要提供了基本的键值对存储功能,包括设置键值、获取值、删除键等操作。此外,还提供了持久化功能,可以将数据存储到硬盘上。

Redis 2.0.0 在2011年,Redis发布了2.0版本,这个版本引入了新的数据类型,如哈希表和集合。哈希表可以存储多个键值对,而集合则可以存储不重复的元素。此外,还增加了事务功能和Lua脚本功能,提高了数据操作的灵活性和性能。

Redis 3.0.0 在2013年,Redis发布了3.0版本,这个版本引入了新的持久化方式——RDB和AOF。RDB通过生成数据快照的方式实现持久化,而AOF则通过记录操作日志的方式实现持久化。此外,还增加了发布订阅功能和Lua脚本的缓存机制。

Redis 4.0.0 在2015年,Redis发布了4.0版本,这个版本引入了集群功能,实现了数据的分布式存储和读取。此外,还增加了二进制安全、IPv6支持和流式API等功能。

Redis 5.0.0 在2018年,Redis发布了5.0版本,这个版本引入了字符串的修改操作、新的数据类型——有序集合和地理空间索引。此外,还增加了复制过滤和事务执行时支持对个别键的放弃等特性。

Redis 6.0.1

2020 年 5 月 2 日正式发布了,如 Redis 作者 antirez 所说,这是迄今为止最“企业”化的版本,也是有史以来改动最大的一个 Redis 版本,同时也是参与开发人数最多的一个版本。

  • 提供了众多的新模块(modules)API
  • 提供了客户端缓存功能
  • 多线程 I/O 能力
  • 提升了 RDB 日志的加载速度
  • 修改了若干 bug 和一些优化

Redis 7.0

2022年4月27日,经历接近一年的开发、三个候选版本,Redis 7.0终于正式发布,这是Redis历史上改变最多的一个大版本,它不仅包含了50多个新命令,还有大量核心新特性与改进,这些不仅能够解决用户使用中的诸多问题,还进一步拓展了Redis的使用场景。

0 人点赞