Redis—相关背景

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: Redis—相关背景

🔎Redis—特性


MySQL 主要是通过 “表” 的方式组织存储数据 → 关系型数据库

Redis 主要是通过 “键值对” 的方式组织存储数据 → 非关系型数据库

In-memory data structures—在内存中存储数据


在内存中存储数据

Redis 通过键值对方式组织存储数据

其中 key 都是 string 类型, value 可以是 strings, hashes, lists, sets, sorted sets, streams…

Programmability—可编程性


可编程性

针对 Redis 的操作

可直接通过简单的交互式命令进行操作

也可以通过一些脚本的方式批量执行一些操作

Extensibility—可扩展性


可扩展性

可以在 Redis 原有的功能基础上进行扩展(通过 C, C++, Rust 进行扩展)

Persistence—持久化


持久化

Redis 为了能够快速访问, 将数据存储至内存中

内存中的数据是易丢失的(进程退出, 系统重启…)

因此 Redis 也会将数据存储至硬盘(硬盘中的数据相当于是对内存的数据进行备份) → 持久化

例如当系统重启, 就会在重启时加载硬盘中的备份数据, 使 Redis 的内存恢复如初

Clustering—集群


集群

一个 Redis 所能存储的数据是有限的(内存空间有限)

集群 → 引入多台主机, 部署多个 Redis 节点, 让每个 Redis 存储一部分数据

High availability—高可用


高可用

你可以将高可用理解为备份

Redis 支持主从结构, 从节点相当于是主节点的备份

🔎Redis 为什么快


Redis 对比 MySQL 为什么快

  1. Redis 的数据存储在内存中, MySQL 的数据存储在硬盘中
  2. Redis 的核心功能都是比较简单的操作内存结构
    MySQL 中的一些操作较为复杂. 例如插入数据时, 如果存在约束, 需要查看具体的约束状态…
  3. Redis 使用了 IO 多路复用的方式(一个线程管理多个 socket)
  4. Redis 默认情况下使用单线程处理请求, 避免多线程之间的锁竞争和锁带来的开销(大多数简单的的读写操作, 使用单线程方式更高效)
    MySQL 处理复杂查询时采用多线程处理, 导致额外的开销

🔎Redis 的使用场景


  1. Real-time data store—实时数据存储
  2. Caching—缓存
  3. session storage—会话存储
  4. Streaming&messaging—消息队列

Real-time data store—实时数据存储


实时数据存储, 将 Redis 作为数据库

大多数场景下的数据存储针对的是存储量大

而一些特定场景要求的是存储速度快, Redis 针对的就是这样的情况

将 Redis 作为数据库, 存储的是全部数据, 这里面的数据不能随便丢失

Caching—缓存


根据二八原则, 将热点数据存储至 Redis, MySQL 中依旧存储全部数据

即使 Redis 中的数据丢失, 也可以从 MySQL 中继续加载

session storage—会话存储


cookie → 浏览器存储的用户身份标识

session → 服务器存储的真正的用户数据

只有一台应用服务器时, 会话信息就存储在该应用服务器上

有多台应用服务器之后, 会话信息该如何存储呢?

举个栗子🌰

用户 A 登录一个网站, 输入对应的用户名和密码

只有一台应用服务器时, 无需负载均衡, 会话信息存储在该服务器上

此时 A 再次点击该网站, 该网站已经保存了 A 的会话信息, 无需进行登录操作

当有多台应用服务器时, 如果会话信息分别保存在多台应用服务器, 那么当 A 再次点击该网站, 又需要进行登录操作

万一 A 很不幸, 每次点击该网站, 负载均衡器都将其请求分配到了不同的应用服务器, 那么 A 会一直进行登录操作

对于上述的问题, 解决方式有 2 种🍂

  1. 通过特定的算法, 让 A 用户的请求每次都指定到同一个应用服务器
  2. 将会话信息单独保存至一台独立的机器(Redis)

Streaming&messaging—消息队列


有很多比较知名的消息队列, 例如 RabbitMQ, Kafka, RocketMQ…

Redis 也具有消息队列的功能

如果当前场景中, 对于消息队列的功能依赖比较少, 并且不想引入其他依赖的情况下, 可以将 Redis 作为消息队列

生产者可以将消息推送到 Redis 列表中, 然后消费者从列表中获取消息进行处理


🌸🌸🌸完结撒花🌸🌸🌸


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
存储 消息中间件 NoSQL
【redis】redis的特性和主要应用场景
【redis】redis的特性和主要应用场景
103 1
|
3月前
|
存储 缓存 NoSQL
Redis 相关背景
Redis 是一款开源的内存数据存储系统,常被用作数据库、缓存或消息中间件,在分布式环境中展现强大优势。它支持多种数据结构如字符串、哈希表、列表等,并提供简单直观的操作接口及脚本执行功能。Redis 以其快速访问速度著称,得益于内存存储、高效的单线程模型及I/O多路复用技术。它具备数据持久化能力,确保重启后数据可恢复。同时支持集群部署,实现数据分片和高可用性,适合高并发环境。Redis 在需要高性能读写、实时数据处理或缓存加速的应用场景中表现优异,如会话存储、热点数据缓存等,但受限于内存容量,不适于存储大规模数据。
48 5
Redis 相关背景
|
2月前
|
缓存 NoSQL Java
Redis基础
redis下载、安装、启动、五种数据类型、常用命令、springboot使用Redis、lettucs、jedis
Redis基础
|
3月前
|
存储 NoSQL Redis
redis基础
redis基础
21 0
|
5月前
|
JSON NoSQL Java
|
5月前
|
存储 NoSQL 关系型数据库
|
6月前
|
存储 NoSQL 关系型数据库
Redis -- 背景知识
Redis -- 背景知识
40 0
|
6月前
|
存储 NoSQL 关系型数据库
Redis基础1
Redis基础
35 0
|
6月前
|
存储 NoSQL Java
Redis基础2
Redis基础
30 0
|
6月前
|
NoSQL 算法 Java
深入浅出Redis(八):Redis的集群模式
深入浅出Redis(八):Redis的集群模式