Redis: 特点,优势,与其他产品的区别以及高并发原理

入门Redis概述


1 )选择Redis是因为其高性能

  • 因为 Redis 它数据存储的机制是存在内存中的,减少了传统关系数据库的磁盘IO
  • 它是单线程的保证了原子性,它还提供了事务,锁等相关的机制

2 )Redis 环境安装配置

  • linux 或 docker 环境

3 )Redis 的并发下的模式演进

  • 并发在十万以下的时候,Redis提供了单机单节点模式
  • 官方测试的数据: 读取每秒11万次,写入每秒8万1, 所以性能是非常高的
  • 当并发上来了,10万 到 20万左右的时候,使用 Redis 提供到读写分离, 主从模式
  • 在这种模式下,主节点肯定要保持高可用的,Redis 提供了哨兵监控机制
  • 为了降低各节点之间存储数据的压力,Redis 提供了集群模式

4 )了解微服项目的构建以及springboot应用的开发

  • 我们围绕着项目来打通Redis任督二脉的,以项目作为驱动
  • 在项目中实现 Redis 各种应用场景:实现缓存,保证缓存中的数据一致性等等

5 )理论准备

  • 理论作为基石,需要了解缓存相关中间件,(Redis, Memcache 和 Ehcache) 的比较
  • 对 Redis 的基本理解,Redis 它的定位是什么?解决了什么问题?
  • 微服务相关的概念,最终是以微服务项目作为驱动开发的

5 )实际操作

  • 在linux环境中安装 Redis,包括了解它的一些配置信息,每一个配置项都代表什么意思
    • 以及把 Redis 作为开机自启项加入到系统服务当中,它的启动, 停止该如何去操作
  • Redis 的基本命令
  • 数据库表结构的设计
    • Redis 作为一款 nosql 数据库, 肯定不能百分百替代关系数据库的
    • 在一般项目中都是 Redis 和 mysql 组合,而 Redis 都是作为缓存层而存在
    • 它最终缓存的是关系数据库中的数据
  • SpringBoot & SpringCloud项目搭建
    • 通过一个微服务的项目,也可以使用 go-micro 或 其他
    • 这里了解 SpringBoot & SpringCloud 类似的微服务项目环境如何搭建

Redis 如何支撑 10w+ QPS


1 ) Redis 特点

  • 内存数据库,速度快,也支持数据的持久化。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供Lists、Hashes、Sets、Sorted Sets 等多种数据结构的存储
  • Redis支持数据的备份(master-slave)与集群(分片存储),以及拥有哨兵监控机制
  • 支持事务

2 ) 优势

  • 性能极高-Redis能读的速度是110000次/s,写的速度是81000次/s
  • 丰富的数据类型-Redis支持 Strings、Lists、Hashes、Sets、Sorted Sets 等数据类型操作
  • 原子操作-Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行(事务)
  • 丰富的特性-Redis还支持 publish/subscribe,通知,key 过期等特性

3 ) Redis、Memcached、Ehcache 的区别

EhcacheMemcachedRedis
最新版本2017年2月
3.3.0
2018年7月
1.5.9
2018年7月
5.0 Beta
许可证开源免费开源免费开源免费
实现语言JavaCC
服务器系统JavaFreeBSD、Linux、OSX、Unix、WindowsFreeBSD、Linux、OSX、Unix、Windows
数据类型支持不支持支持多种:string、hash、list、set、sorted set等
客户端语言Java.Net、C、C++、ColdFusion、Erlang、Java、Lisp、Lua、Ocaml、Perl、PHP、Python、RubyC、C#、C++、D、Erlang、Go、Haxe、Java、Node.js、Lisp、Lua、MatLab、Objective-C、Pascal、Perl、PHP、R、Ruby、Scala、Swift、Visual Basic 等 30十多种
  • 在分布式的情况下, 用 Ehcache,就不能很好的去实现分布式项目之间缓存的同步共享的问题
  • Memcached 对于数据类型比较单一,存在一些瓶颈
  • 最终通过比较,还是选择 Redis
  • 这三个中间件都可以应用于缓存,但目前市面上使用Redis的场景会更多,更广泛,其原因是:Redis性能高、原子操作、支持多种数据类型,主从复制与哨兵监控,持久化操作等

4 ) Redis的高并发

  • 官方的bench-mark数据:测试完成了50个并发执行100000个请求, 设置和获取的值是一个256字节字符串
  • 结果:读的速度是110000次/s,写的速度是81000次/s。redis尽量少写多读,符合缓存的适用要求
  • 单机redis支撑万级,如果10万+可以采用主从复制的模式

4.1.原理

  • Redis是纯内存数据库,所以读取速度快。
  • Redis使用的是非阻塞10,10多路复用,减少了线程切换时上下文的切换和竞争。
  • Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
  • Redis存储结构多样化,不同的数据结构对数据存储进行了优化加快读取的速度。
  • Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。

4.2. Redis的单线程

选择单线程原因

  • 不需要各种锁的性能消耗
  • 单线程多进程集群方案
  • CPU消耗

优劣对比

单进程单线程优势

  • 代码更清晰,处理逻辑更简单
  • 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
  • 不存在多进程或者多线程导致的切换而消耗CPU

单进程单线程弊端

  • 无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善

4.3 IO多路复用技术

redis 采用网络10多路复用技术来保证在多连接的时候,系统的高吞吐量

  • 举个现实生活的例子,从左边水龙头流向右边,传统的模式下,需要建立5个管子,如下
  • 而在 IO 多路复用模式下,只需要建立一根管子让左侧水龙头分别与这根管子相连即可,如下
  • 最终目的,都是要提高系统的吞吐量,而提高吞吐量就是为了快速的写入和读取
  • 它拥有这些特性才能保证 Redis 在高并发的场景下,仍然是拥有非常高的性能的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/431389.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业网盘能作为FTP替代产品吗?

在数字化办公日益普及的今天,企业对于文件存储、传输和协作的需求不断增长。传统的FTP协议虽然在文件传输领域有着不可替代的地位,但其在用户体验、安全性、协作功能等方面逐渐显得力不从心。企业网盘作为一种新兴的数据管理解决方案,正逐渐成…

LeetCode234. 回文链表(2024秋季每日一题 26)

给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true 示例 2: 输入:hea…

建立分支提交代码

git分支 git branch 产看当前分支 git branch -a 查看所有分支 git checkout 分支名 切换分支 git checkout -b 分支名 建立分支(仅仅是在本地建立了,并没有关联线上) git push --set-upstream origin 分支名 把本地分支推到先线上 gti add …

【计算机视觉】YoloV8-训练与测试教程

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 💫 欢迎来到我的学习笔记! 制作数据集 Labelme 数据集 数据集选用自己标注的,可参考以下&#xff1a…

Paper 0 | Visual Instruction Tuning

使用机器生成的指令跟踪数据对大型语言模型 (LLM) 进行指令调整已被证明可以提高新任务的零样本能力,但这个想法在多模态领域的探索较少。我们首次尝试使用纯语言 GPT-4 生成多模态语言图像指令跟踪数据。通过对此类生成的数据进行指令调整,我们引入了 L…

多智能体笔记本专家系统:集成CrewAI、Ollama和自定义Text-to-SQL工具

在这个项目中,我们的目标是创建一个由多智能体架构和本地大语言模型(LLM)驱动的个人笔记本电脑专家系统。该系统将使用一个SQL数据库,包含有关笔记本电脑的全面信息,包括价格、重量和规格。用户可以根据自己的特定需求…

unix中如何查询和修改进程的资源限制

一、前言 一个进程在运行时,会用到各种资源,比如cpu的使用时间、内存空间、文件等等。那么,一个进程能够占用多少资源呢?cpu使用的时间有多长?进程空间有多大?能够创建多少个文件?这个就是本文…

2024.9.24 数据分析

资料 111个Python数据分析实战项目,代码已跑通,数据可下载_python数据分析项目案例-CSDN博客 【数据挖掘六大项目实战】敢说这是全B站讲的最详细最通俗易懂的数据挖掘教程!整整60集!学不会来找我!-数据挖掘、数据挖掘…

校园自助打印系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,店长管理,打印店管理,打印服务管理,服务类型管理,预约打印管理,系统管理 微信端账号功能包括:系统首页&…

用 Pygame 实现一个乒乓球游戏

用 Pygame 实现一个乒乓球游戏 伸手需要一瞬间,牵手却要很多年,无论你遇见谁,他都是你生命该出现的人,绝非偶然。若无相欠,怎会相见。 引言 在这篇文章中,我将带领大家使用 Pygame 库开发一个简单的乒乓球…

SPSS26统计分析笔记——3 假设检验

1 假设检验原理 假设检验的基本原理源于“小概率事件”原理,是一种基于概率性质的反证法。其核心思想是小概率事件在一次试验中几乎不会发生。检验的过程首先假设原假设 H 0 {H_0} H0​成立,然后通过统计方法分析样本数据。如果样本数据引发了“小概率事…

Krita连接comfyui报错缺少节点如何解决

介绍一下我用的版本: krita5.2.3 ComfyUI-aki-v1.3 首先:文件夹必须严格按照ComfyUI进行命名,我不知道这个是不是必须得,但是看官方的文档以及我解决这个问题的过程时,是这样的。 报错信息如下图(这个报错图…

航拍工程车辆识别检测数据集 yolo数据集 共650张

航拍工程车识别检测数据集 yolo数据集 共650张 2 工程车辆识别数据集(Engineering Vehicle Recognition Dataset, EVRD) 摘要 EVRD 是一个专门针对航拍视角下的工程车辆识别而设计的数据集,旨在提供一种标准的训练和评估平台,用…

玩手机数据集 8201张玩手机的照片,有对应的xml和txt文件,可以用于yolo训练

玩手机数据集 8201张玩手机的照片,有对应的xml和txt文件,可以用于yolo训练 玩手机数据集(Phone Usage Detection Dataset) 数据集概述 该数据集专为检测人们使用手机的行为设计,旨在帮助研究人员和工程师开发高效的…

Uniapp时间戳转时间显示/时间格式

使用uview2 time 时间格式 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 <text class"cell-tit clamp1">{{item.create_time}} --- {{ $u.timeFormat(item.create_time, yyyy-mm-dd hh:MM:ss)}} </text>

从零开始的软件开发详解:数字药店系统源码与医保购药APP

很多小伙伴们疑问&#xff0c;医保购药APP是如何开发的&#xff0c;今天我将从零数字药店系统源码开始为大家提供一条清晰的实现方案。 一、技术架构设计 在开发医保购药APP之前&#xff0c;首先需要明确技术架构。一般来说&#xff0c;APP的技术架构可以分为前端和后端。 1…

手写SpringMVC(简易版)

在上一篇博客中说到这里我们要进行手写SpringMVC&#xff0c;因此最好是将上一篇博客中的SpringMVC源码分析那一块部分搞懂&#xff0c;或者观看动力节点老杜的SpringMVC源码分析再来看这里的书写框架。 首先我们要知道对于一个完整系统的参与者&#xff08;即一个完整的web项…

目标检测系列(三)yolov2的全面讲解

YOLOv2&#xff08;论文原名《YOLO9000: Better, Faster, Stronger》&#xff09;作为该系列的第二个版本&#xff0c;对原始YOLO进行了显著的改进&#xff0c;进一步提高了检测速度和准确度。在精度上利用一些列训练技巧&#xff0c;在速度上应用了新的网络模型DarkNet19&…

Vue3:自定义customRef

目录 一.性质 1.自定义性 2.工厂函数参数 3.track 和 trigger 函数 二.作用 1.防抖/节流 2.异步更新 3.条件性更新 4.精细控制依赖追踪 5.优化性能 三.使用 1.ts组件 2.vue.组件 四.代码 1.ts代码 2.vue代码 五.效果 在 Vue 3 中&#xff0c;customRef 是一个…

一、机器学习算法与实践_04信息论与决策树算法笔记

1 信息论基础知识介绍 信息论是运用概率论与数理统计的方法&#xff0c;去研究信息、信息熵、通信系统、数据传输、密码学、数据压缩等问题的应用数学学科&#xff0c;熵&#xff08;Entropy&#xff09;是信息论中的一个重要概念&#xff0c;由克劳德香农&#xff08;Claude …