命令: https://redis.io/commands
官方文档: https://redis.io/documentation

Redis 知识体系

Ref: https://pdai.tech/md/db/nosql-redis/db-redis-overview.html

Redis 入门 - Redis 概念和基础
Redis 是一款内存高速缓存数据库。Redis 全称为:Remote Dictionary Server(远程字典服务),使用 C 语言编写,Redis 是一个 key-value 存储系统(键值存储系统),支持丰富的数据类型,如:String、list、set、zset、hash
Redis 是一种支持 key-value 等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
image.png

基础数据类型

这些适用场景都是基于 Redis 支持的数据类型的,所以我们需要学习它支持的数据类型;同时在 redis 优化中还需要对底层数据结构了解,所以也需要了解一些底层数据结构的设计和实现。

Redis 所有的 key(键)都是字符串。我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括常见的 5 种数据类型,分别是:String、List、Set、Zset、Hash

Redis 除了上文中 5 种基础数据类型,还有三种特殊的数据类型,分别是 HyperLogLogs(基数统计), Bitmaps (位图) 和 geospatial (地理位置)

Redis5.0 中还增加了一个数据结构 Stream,它借鉴了 Kafka 的设计,是一个新的强大的支持多播的可持久化的消息队列。

我们在前文已经阐述了 Redis 5 种基础数据类型详解,分别是字符串 (string)、列表 (list)、哈希 (hash)、集合 (set)、有序集合 (zset),以及 5.0 版本中 Redis Stream 结构详解;那么这些基础类型的底层是如何实现的呢?Redis 的每种对象其实都由对象结构 (redisObject) 对应编码的数据结构组合而成,本文主要介绍对象结构 (redisObject) 部分。

前文是第一部分底层设计:对象机制详解,本文主要介绍底层数据结构部分。

在学习完底层数据结构之后,我们终于可以结合前文内容阐述 redis 对象及编码之间的关系了。

核心功能

Redis 支持的核心功能,包括持久化,消息,事务,高可用;高可用方面包括,主从,哨兵等;高可拓展方面,比如分片机制等。

为了防止数据丢失以及服务重启时能够恢复数据,Redis 支持数据的持久化,主要分为两种方式,分别是 RDB 和 AOF; 当然实际场景下还会使用这两种的混合模式。

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

Redis 采用事件驱动机制来处理大量的网络 IO。它并没有使用 libevent 或者 libev 这样的成熟开源方案,而是自己实现一个非常简洁的事件驱动库 ae_event。

Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。

我们知道要避免单点故障,即保证高可用,便需要冗余(副本)方式提供集群服务。而 Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。本文主要阐述 Redis 的主从复制。

在上文主从复制的基础上,如果注节点出现故障该怎么办呢? 在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制,它有效地解决了主从复制模式下故障转移的问题。

前面两篇文章,主从复制和哨兵机制保障了高可用,就读写分离而言虽然 slave 节点来扩展主从的读并发能力,但是写能力和存储能力是无法进行扩展的,就只能是 master 节点能够承载的上限。如果面对海量数据那么必然需要构建 master(主节点分片) 之间的集群,同时必然需要吸收高可用(主从复制和哨兵机制)能力,即每个 master 分片节点还需要有 slave 节点,这是分布式系统中典型的纵向扩展(集群的分片技术)的体现;所以在 Redis 3.0 版本中对应的设计就是 Redis Cluster。

实践

具体的实践以及实践中遇到的问题和解决方法了:在不同版本中有不同特性,所以还需要了解版本;以及性能优化,大厂实践等。

  • Redis 进阶 - 缓存问题:一致性,穿击,穿透,雪崩,污染等
    • Redis 最常用的一个场景就是作为缓存,本文主要探讨作为缓存,在实践中可能会有哪些问题?比如一致性,穿击,穿透,雪崩,污染等
  • Redis 进阶 - 版本特性: Redis4.0、5.0、6.0 特性整理
    • 在学习 Redis 知识体系时,我们难免会需要查看版本实现之间的差异,本文主要整理 Redis 较为新的版本的特性。
  • Redis 进阶 - 运维监控:Redis 的监控详解
    • Redis 实战中包含开发,集群 和 运维,Redis 用的好不好,如何让它更好,这是运维要做的;本文主要在 Redis 自身状态及命令可视化监控工具,以及 Redis 监控体系等方面帮助你构建对 redis 运维 / 监控体系的认知,它是性能优化的前提。
  • Redis 进阶 - 性能调优:Redis 性能调优详解
    • Redis 的性能问题,涉及到的知识点非常广,几乎涵盖了 CPU、内存、网络、甚至磁盘的方方面面;同时还需要对上文中一些基础或底层有详细的了解。针对 Redis 的性能调优,这里整理分享一篇水滴与银弹(公众号)的文章,这篇文章可以帮助你构筑 Redis 性能调优的知识体系。
  • Redis 大厂经验 - 微博:万亿级日访问量下,Redis 在微博的 9 年优化历程
    • 再分享一篇微博使用 redis 的经验的文章,因为 Redis 在微博内部分布在各个应用场景,比如像现在春晚必争的 “红包飞” 活动,还有像粉丝数、用户数、阅读数、转评赞、评论盖楼、广告推荐、负反馈、音乐榜单等等都有用到 Redis;我们可以通过大厂使用 redis 的经验来强化对 redis 使用上的认知。