Redis:高性能内存数据库的六大核心优势

Redis是一个在内存中存储数据的中间件,用于作为数据库,消息队列,数据缓存,在分布式系统中能够大展拳脚(对于分布式系统的理解,在本分栏的第一讲)

Redis的特性(优点)

1.在内存中存储数据

redis是在内存中通过特定的数据结构(不同类型的值不同的数据结构)来存储数据的

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

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

在键值对中,string是键,string、hashes、lists等是值

2.可编程性

"Programmability"(可编程性)特性,指的是 Redis 在服务器端通过特定方式实现自定义逻辑的能力。

针对Redis的操作,可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式,批量化的执行一些操作。

原子性操作:通过 Lua 脚本,Redis 可以将多个命令组合成一个原子操作。例如,在一个电商应用中,要实现库存扣减和订单记录同时成功或者同时失败,可以使用 Lua 脚本将 "查询库存""扣减库存""插入订单记录" 等多个 Redis 命令写在一起,Redis 会保证整个脚本的执行是原子的,避免了并发操作下可能出现的库存和订单数据不一致问题 。

减少网络开销:如果需要执行多个 Redis 命令,传统方式下每次命令都需要客户端与服务器进行一次网络通信。而使用 Lua 脚本,可以将多个命令打包在脚本中,客户端只需要与服务器进行一次交互,就能完成原本多次交互才能实现的功能,极大地减少了网络传输的开销,提升了性能。

灵活性和扩展性:Lua 是一种轻量级、可嵌入的脚本语言,具有良好的灵活性。用户可以根据自己的业务需求,编写 Lua 脚本来实现一些 Redis 原生命令不直接支持的复杂逻辑,拓展了 Redis 的功能边界。

3.可扩展性

Redis 提供了一个模块 API(应用程序编程接口),支持开发者使用 C、C++ 和 Rust 这三种编程语言,为 Redis 构建自定义的扩展功能。

自己去扩展Redis的功能,比如,redis自己已经提高了很多的数据结构和命令,通过扩展,让redis支持更多的数据结构已经支持更多的命令

通过这几个语言编写的Redis扩展,本质上就是一个动态连接库

在windows上的dll,可以让exe去调用里面包含很多的代码

在Linux中的动态库是,so,这部分知识可以去看我的Linux的系统编程

4.持久化

**快速访问:**Redis 将数据集保存在内存中,这样能实现快速的数据访问,因为内存的读写速度比磁盘等存储设备快很多。

**持久化存储:**同时,Redis 还可以将所有写入操作持久化到永久性存储设备(比如硬盘 )中。这样做是为了在服务器重启或者系统出现故障时,数据不会丢失,等系统恢复后,能从持久化存储中恢复数据,保证数据的完整性和可用性。

5.集群

作为一个分布式系统的中间件,能够支持集群是很关键的

这个水平扩展,类似于"分库分表"

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

引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分

Redis 集群借助基于哈希的分片技术 来实现水平扩展性。简单来说,就是把数据通过哈希算法分散到不同节点上存储。而且,当集群需要扩容(比如要支持更多数据、更高访问量,新增节点时),Redis 能自动对数据进行重新分区,让集群可以轻松扩展到数百万个节点的规模,以此来应对大规模的数据存储和高并发访问需求。

6.高可用

Redis 支持复制(Replication)机制,并且具备自动故障转移(automatic failover)能力。无论是独立部署(standalone,即单节点或主从架构的简单部署),还是集群部署(clustered deployments)的场景,当主节点出现故障时,都能自动将从节点提升为新的主节点,从而保证服务持续可用,减少因节点故障导致的服务中断时间。

Redis快的原因

对于第二点:Redis 的核心功能围绕着简单的数据结构(如字符串、哈希、列表、集合、有序集合等)展开,这些数据结构都是在内存中进行操作的,且操作逻辑相对简单直接。不像复杂的数据库,需要处理各种复杂的关系、事务等逻辑,所以 Redis 执行核心操作时效率很高。

对于第三点中的epoll可以去看我的Linux网络编程

对于第四点:Redis 采用单线程模型来处理客户端的请求(高版本中,IO 处理等部分引入了多线程,但核心的数据操作逻辑还是单线程)。单线程避免了多线程之间的锁竞争、线程上下文切换等开销。因为 Redis 的核心操作是内存操作,速度很快,单线程足以处理大部分场景下的请求,多线程带来的线程竞争等开销反而可能降低效率。

对于第五点:有自己的见解就行,有自己能立足的论据说明就行

对于Redis的面试:可以跟面试官讲解这几个特性

相关推荐
迦南的迦 亚索的索3 分钟前
PYTHON_DAY20_数据库
数据库·oracle
数厘13 分钟前
2.14 sql数据删除(DELETE、TRUNCATE)
数据库·oracle
XDHCOM25 分钟前
MySQL ER_ERROR_ENABLING_KEYS报错修复,远程处理索引启用失败故障,解决数据表锁定与性能瓶颈问题
数据库·mysql
高梦轩27 分钟前
Python 操作 MySQL 数据库
数据库·oracle
Arva .29 分钟前
Redis 数据类型
数据库·redis·缓存
CDN36035 分钟前
高防切换后网站打不开?DNS 解析与回源路径故障排查
前端·网络·数据库
笑我归无处1 小时前
Redis和数据库的数据一致性问题研究
数据库·redis·缓存
水痕011 小时前
使用sqlSugar来操作mysql数据库
数据库·mysql
zandy10111 小时前
衡石科技 HENGSHI SENSE:一站式智能分析平台,让企业数据价值“所见即所得”
大数据·数据库·科技
fly spider1 小时前
MySQL日志篇
数据库·mysql