当前位置: 首页 > news >正文

【NoSQL系列】为什么要使用Redis?

第一次知道Redis是以前准备面试的时候,只知道是用来缓存数据的。随着这几年的工作,对软件的认识从盲人摸象到睁眼看世界。

在常用的软件架构评价模型中,性能、可用性、安全性和可维护性是常见的评价属性,客户总希望系统响应又快有不易崩溃,那这又和Redis由有什么关系?

在常见的C/S(Client/Server)架构或B/S(Browser/Server)的架构模型中,当请求达到服务端应用实例后,应用实例进行内部逻辑处理,再通过数据持久层将SQL请求转发至数据库层面,最后返回响应报文。

当请求方发起的流量是亿级,比如微博上的热搜排行榜,每个用户登录后都可以看到排行榜,并且用户会频繁刷新页面请求最新的热搜排行榜。如果每次是数据库直接查询到排行榜信息,亿级的请求并发就直接传递到数据库层面,用户微小的操作极大的增加了数据库的负载。为了解决这类问题,聪明的程序员们想到将一些数据缓存到独立的服务器,每次查询优先请求独立服务器,于是就产生了Redis。

根据官方定义,Redis(Remote Dictionary Server)是一个使用ANSI C编写的支持网络、基于内存、分布式、可选持久性的键值对存储数据库。
作为一个远程服务器,Redis可以独立部署在一台服务器上,将应用实例和Redis实例物理隔离,保证两者互不干扰,独立对外提供服务。
在常见的开发规范中,常量通常设置为静态类,以保证数据唯一性和在程序内部的共享。Redis的远程部署便是静态类的升级版本,它类似一个独立的中央数据仓库,当一个服务更新了执行数据,另一个服务能快速获取到最新数据,方便数据在多个服务中共享。

在关系型数据库中,数据是存储在磁盘(硬盘)上。每次需要从硬盘上读写数据文件。在计算的存储体体系中,存储速度快的设备通常用于需要快速读写的场景,而速度相对较慢的设备则通常用于大容量数据存储。内存容量小,但读写速度快,磁盘容量大,但读写速度慢。Redis设计初衷是提高数据读写性能,采用内存存储数据,使得Redis能够在高并发和低延迟场景下表现出色,适用于各种需要快速响应的应用场景。

随着数据量的增长,单个 Redis 实例可能无法满足存储需求和性能要求。分布式 Redis 允许将数据分布在多个节点上,从而提升系统的存储容量和处理能力。即使某个节点出现故障,系统仍然可以正常运行。通过分布式机制,Redis 可以将读写请求分散到多个节点上,避免单节点的性能瓶颈。

总的来说,Redis通过内存存储、分布式架构、高性能和高可用性解决了在大规模数据处理和高并发请求中的许多问题。它不仅提高了系统响应速度,还减轻了后端数据库的负担,使得应用系统能够更加高效和稳定地运行,成为了现代软件架构中常用的解决方案。

http://www.lryc.cn/news/506078.html

相关文章:

  • MySQL Explain 分析SQL语句性能
  • IIS部署程序https是访问出现403或ERR_HTTP2_PROTOCOL_ERROR
  • 学技术学英文:代码中的锁:悲观锁和乐观锁
  • 青少年编程与数学 02-004 Go语言Web编程 02课题、依赖管理
  • MyBatis写法汇总
  • 【Linux学习】十五、Linux/CentOS 7 用户和组管理
  • 三维无人机航迹算法的目标函数如何确定
  • uniapp v-tabs修改了几项功能,根据自己需求自己改
  • 用vscode,进行vue开发
  • Kafka 磁道寻址过程详解
  • 基于Spring Boot的社区药房系统
  • 005 QT常用控件Qwidget_上
  • 机器学习之交叉熵
  • 数据结构 ——前缀树查词典的实现
  • MySQL 主从复制与高可用架构
  • 【Golang】如何读取并解析SQL文件
  • git branch -r(--remotes )显示你本地仓库知道的所有 远程分支 的列表
  • Typescript安装
  • 使用C#在目录层次结构中搜索文件以查找目标字符串
  • 基于Redis实现令牌桶算法
  • [Java] 使用 VSCode 来开发 Java
  • 奇怪的知识又增加了,ESP32下的Lisp编程:ULisp--Lisp for microcontrollers
  • STM32标准库学习之寄存器方法点亮LED灯
  • Jenkins:持续集成与持续部署的利器
  • 概率论得学习和整理30: 用EXCEL 描述泊松分布 poisson distribution
  • 汽车SoC芯片及其安全岛设计与未来发展趋势(学习笔记)
  • 【排序算法】——选择排序
  • 第十五章 Linux Shell 编程
  • 【c++笔试强训】(第三十八篇)
  • go 自己写序列化函数不转义