redis-学习笔记(概念, 相关名词, 特性, 优势: 快)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: redis-学习笔记(概念, 相关名词, 特性, 优势: 快)

redis 概念

官网介绍如下

redis 的初心,是作为 "消息中间件" 来用, 但是因为业内有更专业的消息中间件 (RabbitMQ …), 因此使用不多, 但是如果只是简单的消息获取,转发,也可以用redis,而不必花费大力气添加其他消息中间件

作为数据库使用, 相对于 MySQL 来说, 存储空间有限是最大的劣势,但因为其快,所有更多作为缓存来使用

如何使得存储数据又大 (不是) 又快?

把 redis 和 MySQL (或 Oracle 之类的), 结合起来使用

redis 存储热点数据, MySQL 存储所有数据, 查询数据时从redis开始, 查不到再去MySQL

redis 是在分布式系统中的大杀器, 单机系统中, 直接使用变量存储数据, 会比使用 redis 快得多. (redis 是的,可以把自己的内存分配给别的进程, 甚至是别的主机使用)

几个相关概念

应用(Application) / 系统(System)

一个应用, 就是一个组 / 服务器程序

模块(Model) / 组件(Component)

一个应用, 里面有多个功能, 每一个功能, 可称为一个 模块 / 组件

分布式(Distributed)

引入多个主机 / 服务器, 协同配合完成一系列的工作 (物理上的主机)

集群(Cluster)

引入多个主机 / 服务器, 协同配合完成一系列的工作 (逻辑上的主机)

分布式和集群的区别

分布式: 多个系统协同完成一个特定任务的系统

集群: 在几个服务器上部署相同的应用程序来分担客户端的请求

简单理解:

分布式: 把一个大业务拆成几个小业务, 每个小业务均是独立的系统, 子业务之间相互协作

集群: 处理同一个业务, 但是由系统部署多个节点

分布式的子节点也可以由集群构成

( 参考自大佬博客(点击跳转))

主(Master) / 从(Slave)

构成分布式的一个比较奇特的结构, 多个服务器节点中, 一个是主, 其余是> 从. 从节点的数据, 要从主节点同步.

中间件(Middleware)

更复杂的东西了,xdm 自己搜 (其实简单理解就是字面意义, 我是老板, 下面有几十个员工, 分派任务很麻烦, 但是中间有个经理, 我就只把任务告诉经理就 ok, 可以减少的工作量, 可以只做主要工作即可)

可用性(Availability)

(一个系统的第一要务)

系统整体可用的时间 / 总的时间

响应时间(Response Time 即 RT)

吞吐(Throughput) vs 并发(Concurrent)

(响应时间和吞吐并发 可以用来衡量服务器的性能)

Redis 特性

在内存中存储

使用键值对方式来存储组织结构, “非关系型数据库”

可编程性

使用 Lua 语言 (撸啊)

可拓展性

Redis 提供了一组API, 以便于用户使用过程中对原有功能进行在拓展


持久化

Redis 虽然是基于内存, 但是会把数据在硬盘上备份 (内存为主, 硬盘为辅)

即 Redis 重启或退出前会将内存中的数据备份一份到硬盘, 每次启用也会从硬盘上加载数据

支持集群

上面写过,集群与分布式配合使用, 类似于 “分库分表”

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

因此可以引入多个主句,部署多个 Redis 节点, 每个 Redis 存储数据的一部分

高可用性 ⇒ 冗余 / 备份

Redis 自身支持 "主 / 从"结构, 从节点就相当于主节点的备份

即 主节点挂了, 从节点顶上, 减小 bug 对程序运行的影响

Redis 为什么快

  1. Redis 直接操作内存, 肯定比访问硬盘的数据库快
  2. Redis 核心功能都是简单的逻辑 (老板给员工分任务, 肯定比员工做任务, 要简单的多得多)
  3. Redis 使用了 IO 多路复用的方式 (epoll) (简单说就是使用一个线程, 管理多个 socket , 毕竟不是每一个 socket 都会时刻被用到, 那单独占一个线程, 会很浪费资源)
  4. Redis 使用单线程模型, 减少了不要用的线程之间的竞争开销 (宏观多线程并发进行, 即多个地方同时使用 Redis 但是消息到达 Redis, 会在一个队列中排队, Redis 会单个进行调用, 即微观上是单线程)
  1. Redis 是C语言开发的(存疑, MySQL也是C语言开发的,但是二者之间的运行速度可谓天差地别,只能说相对于 java, py 实现的 Redis 来说, C语言实现确实快一点)

(PS: 因为快,所以小 [不是], 所以不建议存储大量数据 )

相关实践学习
基于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
目录
相关文章
|
15天前
|
存储 消息中间件 运维
使用Redis的优势以及会引发的问题
Redis作为一种高性能、功能丰富的内存数据结构存储系统,在缓存、消息队列和实时数据处理等场景中具有显著优势。然而,使用Redis也可能引发内存消耗大、数据一致性问题和运维复杂性等挑战。了解Redis的优缺点,合理设计和优化系统架构,可以充分发挥Redis的优势,同时避免潜在的问题。希望本文能够为您在实际应用中提供有价值的参考和指导。
31 1
|
1月前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
63 10
|
2月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
41 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
2月前
|
缓存 分布式计算 NoSQL
大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念
大数据-47 Redis 缓存过期 淘汰删除策略 LRU LFU 基础概念
70 2
|
2月前
|
存储 消息中间件 NoSQL
【redis】redis的特性和主要应用场景
【redis】redis的特性和主要应用场景
112 1
|
2月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
281 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
2月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
151 0
|
5月前
|
消息中间件 缓存 NoSQL
Redis快速度特性及为什么支持多线程及应用场景
Redis快速度特性及为什么支持多线程及应用场景
118 11
|
4月前
|
NoSQL Java 调度
Lettuce的特性和内部实现问题之Redis的管道模式提升性能的问题如何解决
Lettuce的特性和内部实现问题之Redis的管道模式提升性能的问题如何解决
|
4月前
|
NoSQL 网络协议 安全
Lettuce的特性和内部实现问题之Lettuce天然地使用管道模式与Redis交互的问题如何解决
Lettuce的特性和内部实现问题之Lettuce天然地使用管道模式与Redis交互的问题如何解决