Redis 快速上手
Redis 快速上手
Nov 3, 2021
| Dec 25, 2024
1993  |  Read Time 5 min
type
status
date
slug
summary
tags
category
icon
password
AI 摘要

概念

REmote Dictionary Server,key-value 存储系统,是跨平台的非关系型数据库
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-value 数据库,并提供多种语言的 API

特点

  • 支持数据的持久化
  • 除了简单的 key-value 类型的数据,同时还提供以下数据结构的存储
    • list
    • set
    • zset
    • hash
  • 支持数据的备份,即 master-slave 模式的数据备份

zset 数据结构

有序数据集合:保存一个集合,并为集合中的每个元素分配一个分数(score),相比于普通集合,有序集合中的元素可以根据分数进行排序。
类似于 Set 和 Hash 的复合数据结构
底层使用跳跃表(Skip List)来实现 —— 跳表 = 多层链表 + 二分查找
使用场景:
  • 排行榜:得分作为排序的 key
  • 计数器:数目作为 key

应用场景

  • 缓存:Redis 缓存能够提高应用的响应速度,减轻数据库的压力。
  • 计数器:Redis 可以用来做计数器,比如网站的 UV,PV 等。
  • 排行榜:Redis 可以用来做排行榜,比如微博的热门微博排行榜,微信的热门文章排行榜等。
  • 社交网络:Redis 可以用来做社交网络的好友关系,比如微博的关注,粉丝等。
  • 消息队列:Redis 可以用来做消息队列,比如秒杀系统中的下单队列,支付队列等。
  • 分布式锁:Redis 可以用来做分布式锁,比如秒杀系统中的分布式锁。
  • 分布式 Session:Redis 可以用来做分布式 Session,比如网站的购物车,购物记录等。
  • 其他:还有很多应用场景,比如:分布式 ID 生成器,分布式任务调度等。
  • Redis 的应用场景还在不断的扩展中,比如:Redis 可以用来做分布式任务调度,比如 CeleryResque 等。

关于社交网络

Redis 可以通过使用 Sorted Set 数据结构来存储用户之间的好友关系。每个用户都被视为一个元素,而他们之间的关系则通过分数字段进行表示。
例如,如果用户 A 关注了用户 B,那么可以将 A 的 ID 作为 Sorted Set 中的一个元素,将 B 的 ID 作为另一个元素,然后将 B 的 ID 分配给 A 的元素作为分数字段,这样就可以表示出 A 关注了 B 这个关系。
同时,还可以使用 Sorted Set 的交集运算和并集运算等功能来实现好友推荐、查找共同好友等高级功能。

关于消息队列

Redis 在消息队列(Message Queue)中的应用主要是通过实现 Redis List 来实现的。Redis List 可以看做是一个支持双向插入和删除操作的链表,它可以存储多个字符串元素,并且可以快速地从两端插入或者弹出元素。
利用 Redis List 的这些特性,我们可以将其作为消息队列的底层数据结构。具体地,当生产者需要发送消息时,它可以将消息写入到 Redis List 的尾部;而消费者则可以从 Redis List 的头部获取消息并进行处理。由于 Redis 的高效读写以及原子操作的支持,可以保证消息队列的高吞吐量和低延迟。
除了基本的消息传送功能,Redis 还支持一些其他的高级特性,例如:
  1. Pub/Sub:Redis 支持发布/订阅模式,它可以让多个客户端同时监听同一个消息频道,并且实时地接收到新发布的消息。
  1. 消息持久化:Redis 提供了多种消息持久化方式,包括 RDB 快照、AOF 日志等,可以确保消息在重启或者故障恢复后不会丢失。
  1. 阻塞式操作:Redis 提供了阻塞式操作,例如 BRPOP 和 BLPOP 命令,可以让消费者在没有消息可处理时自动等待并阻塞,避免了轮询和忙等待的开销。

优缺点

  • 优点:
    • 性能极高 – Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。
    • 丰富的数据类型 – Redis 支持二进制案例的 StringsListsHashesSets 及 Ordered Sets 数据类型操作。
    • 原子 – Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作全并后的原子性执行。
    • 丰富的特性 – Redis 还支持 publish/subscribe, 通知, key 过期等等特性。
  • 缺点:
    • 单线程 – Redis 的所有操作都是单线程的,这样会导致在高并发的情况下,Redis 会成为性能的瓶颈。
    • 不支持复杂的查询 – Redis 虽然提供了丰富的数据类型,但是还是不支持复杂的查询。
    • 数据不是真正的删除,而是被清除 – Redis 删除某个 key 后,会立即释放内存,但是对于大 key 来说,内存释放会比较慢。

扩展

Redis 的持久化

  • RDB:Redis 默认的持久化方式,会在指定的时间间隔内将内存中的数据集快照写入磁盘。
  • AOF:Redis 的另一种持久化方式,会将每个收到的写命令追加到文件中,Redis 重启时会重新执行这些命令来恢复数据。
  • 混合持久化:RDBAOF 两种持久化方式的结合。

Redis 内部的数据结构

  • Redis 的数据结构主要有三种:简单动态字符串(SDS)、双端链表(deque)、字典(dict)。
  • SDS:简单动态字符串,是 Redis 的基本数据结构,是 Redis 的字符串实现。
  • deque:双端链表,是 Redis 的基本数据结构,是 Redis 的列表实现。
  • dict:字典,是 Redis 的基本数据结构,是 Redis 的哈希实现

Redis 的主从复制

主从复制是 Redis 的高可用方案,主从复制的原理是:主节点会将数据同步到从节点,从节点可以是只读的,也可以是可读可写的。
  • 主从复制的优点:
    • 读写分离:主节点负责处理写请求,从节点负责处理读请求,从而实现读写分离。
    • 高可用:主节点宕机后,从节点会自动提升为主节点,从而实现高可用。
    • 数据冗余:主从复制可以实现数据冗余,从而实现数据的安全。
  • 主从复制的缺点:
    • 主从复制的延迟:主从复制的延迟是主节点写入数据后,从节点才能读到数据的时间差。
    • 主从复制的数据不一致:主从复制的数据不一致是指主节点和从节点的数据不一致。
    • 主从复制的故障转移:主从复制的故障转移是指主节点宕机后,从节点提升为主节点的过程

哨兵模式

哨兵模式是 Redis 的高可用方案,哨兵模式的原理是:哨兵会监控主节点和从节点的运行状态,当主节点宕机后,哨兵会自动将从节点提升为主节点,从而实现高可用
  • back-end
  • 情书消失的附近
    Loading...