Redis简述 | 青训营

92 阅读4分钟

Redis是什么?

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统。它可以用作数据库、缓存和消息中间件。除了简单的键值对,Redis还支持多种复杂的数据结构,如字符串(Strings)、散列(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)、位图(Bitmaps)、HyperLogLogs和地理空间(Geospatial)索引半径查询。

为什么需要Redis?

  1. 性能和低延迟:由于Redis基于内存,它能够提供非常快速的读写速度,通常在微秒级。
  2. 灵活的数据结构:与传统的关系型数据库相比,Redis支持多种数据结构,使其更加灵活以满足不同的应用场景。
  3. 持久化:虽然Redis是一个基于内存的系统,但它也提供了多种持久化方法,可以根据需要将数据保存到磁盘。
  4. 扩展性和高可用性:Redis支持主从复制,允许多个Redis节点之间的数据同步,以及分片以实现水平扩展。
  5. 原子性:Redis操作是原子性的,意味着如果两个客户端并发访问,Redis服务器能够接收修改数据的更新请求,而无需外部同步。
  6. 丰富的客户端支持:几乎所有语言都有Redis客户端,包括Java、Python、PHP、C、C++、C#、JavaScript、Node.js、Ruby等。

Redis的工作原理:

  1. 基于内存:Redis主要存储在内存中,这意味着它的数据访问速度非常快,但也意味着数据量受到物理内存的限制。
  2. 单线程模型:Redis使用单线程模型来处理命令,保证每个命令的原子执行。这意味着在给定时刻,只有一个操作在执行。
  3. 事件驱动:Redis使用事件驱动程序模型来实现其非阻塞I/O。
  4. 持久化:Redis提供了两种主要的持久化方法:RDB快照和AOF日志文件。RDB是在指定的时间间隔内对数据进行快照存储,而AOF会记录服务器接收到的每一个写操作。
  5. 数据复制:Redis支持主从数据复制,从服务器可以是其他主服务器的从服务器,这种方式称为级联复制。数据复制可以用于数据备份、故障恢复或为读取操作分担负载。
  6. 分片:为了超越物理内存限制并增加读写吞吐量,数据可以在多个Redis节点之间进行分片。

简而言之,Redis是一个高性能、支持多种数据结构的内存存储系统,它的设计目标是实现快速、灵活且可靠的数据管理。 Redis支持两种主要的持久化方法:AOF (Append-only file) 和 RDB (Redis Database Snapshot)。这两种方法有各自的优势和用途。

1. RDB (Redis Database Snapshot):

  • 工作方式:RDB持久化方法会在指定的时间间隔内对你的数据集进行快照存储。

  • 文件:数据被保存到一个叫作dump.rdb的文件中。

  • 配置:你可以配置Redis在给定的时间段内有多少次更新操作时,就自动保存数据快照。例如,“每10分钟,如果至少有1000次写操作,就保存一次”。

  • 优点

    • RDB文件是压缩的二进制文件,因此通常比相应的AOF文件小。
    • RDB可以最大化Redis的性能:父进程在保存数据快照时并不执行任何I/O操作,真正的保存工作是由子进程完成的。
    • 快速数据加载:当Redis启动时,它可以非常快速地加载RDB文件。
  • 缺点

    • 可能会丢失数据:因为RDB文件是在指定的时间间隔内保存的,所以你可能会丢失最后一次快照后的所有数据。
    • 对于大数据集,生成RDB文件可能会需要一些时间,这可能会导致某些延迟。

总结

Redis的便捷性给了后端开发极大的支持,Redis是一个高性能、支持多种数据结构的内存存储系统,它的设计目标是实现快速、灵活且可靠的数据管理。