01 Redis引入和概述

news2024/9/27 9:26:43

Redis引入和概述

一、Redis的历史和发展过程

​ Redis是在2008年由意大利的一家创业公司Merzia的创始人Salvatore Sanfilippo(萨尔瓦托.圣菲利波)创造的。

​ 当时,Salvatore 正在开发一款基于MySQL的网站实时统计系统LLOOGG,然而他发现MySQL的性能并不能满足他的需求。因此,他决定为自家产品量身定做一个数据库,这就是Redis。经过一年的开发,Redis在2009年完成并开源发布。由于其出色的性能,Redis吸引了大量的用户,现在已经成为世界上最受欢迎的数据库之一。

​ 2022年Salvatore,宣布退出redis的维护

​ Redis的官方网站地址:https://redis.io/。

二、Redis的主要特性和优势

一)高性能

​ 10w QPS(每秒查询率)

​ memcached(缓存)

二)支持数据类型丰富

​ 数据结构

​ 基本的数据类型

三)单线程处理

​ 单线程模型

​ 提高性能

四)持久化机制

​ RDB

​ AOF

​ 持久化机制

三、Redis的使用场景

一)会话缓存(Session Cache)

​ 在Web应用中,用户会话信息经常需要被存储和检索。这些信息可能包括用户登录状态、购物车内容等。使用Redis作为会话缓存,可以存储这些会话信息,并在需要时快速检索。相比于其他存储解决方案,如Memcached,Redis提供了持久化服务,这意味着即使服务器重启,会话信息也不会丢失。

二)排行榜/计数器

​ Redis的有序集合(Sorted Set)和列表(List)数据结构使其成为实现排行榜的理想选择。例如,你可以利用有序集合的排序功能,轻松地创建一个游戏得分排行榜。同时,Redis的原子性操作使其成为实现计数器的理想工具,例如跟踪页面访问量、文章阅读量等。

三)消息队列

​ 在分布式系统中,消息队列是一种重要的通信方式。Redis的发布/订阅模型和列表数据结构可以实现简单的消息队列。生产者可以将消息发布到特定的频道,消费者可以订阅这个频道并接收消息。Redis的高读写速度使得它能够处理高并发的消息队列。

四)全页缓存(Full Page Cache,FPC)

​ 在高流量的Web应用中,减轻数据库负载是提高性能的关键。通过使用Redis作为全页缓存,可以存储预渲染的页面,并在用户请求时快速提供,而无需查询数据库。

五)数据存储和配置

​ Redis可以作为数据存储系统来使用,对于一些不需要长期持久化的数据,或者一些频繁变动的数据,可以使用Redis进行存储。同时,Redis也常常用来存储一些系统的配置信息,这样在需要读取配置的时候,可以直接从Redis中获取,而不需要读取文件或者查询数据库。

四、Redis的架构

​ Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务,redis命令的执行过程如下

在这里插入图片描述

​ 因为Redis是单线程来处理命令的,所以一条命令从客户端达到服务端不会立刻被执行,所有命令都会进入一个队列中,然后逐个被执行。如下图

在这里插入图片描述

​ 所有命令在一个队列里排队等待被执行

​ 为什么单线程还能这么快?

​ 通常来讲,单线程处理能力要比多线程差,例如有10000斤货物,每辆车的运载能力是每次200斤,那么要50次才能完成,但是如果有50辆车,只要安排合理,只需要一次就可以完成任务。那么为什么Redis使用单线程模型会达到每秒万级别的处理能力呢?可以将其归结为三点:

第一,纯内存访问,Redis将所有数据放在内存中,内存的响应时长大约为100纳秒,这是Redis达到每秒万级别访问的重要基础。

第二,非阻塞I/O,采用I/O多路复用技术,可以使得单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)

第三,单线程避免了线程切换和竞态产生的消耗。

​ 既然采用单线程就能达到如此高的性能,那么也不失为一种不错的选择,因为单线程能带来几个好处:

​ 第一,单线程可以简化数据结构和算法的实现。如果对高级编程语言熟悉的读者应该了解并发数据结构实现不但困难而且开发测试比较麻烦。

​ 第二,单线程避免了线程切换和竞态产生的消耗,对于服务端开发来说,锁和线程切换通常是性能杀手。

​ 但是单线程会有一个问题:对于每个命令的执行时间是有要求的。如果某个命令执行过长,会造成其他命令的阻塞,对于Redis这种高性能的服务来说是致命的,所以Redis是面向快速执行场景的数据库。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VAE、GAN与Transformer核心公式解析

VAE、GAN与Transformer核心公式解析 VAE、GAN与Transformer:三大深度学习模型的异同解析 【表格】VAE、GAN与Transformer的对比分析 序号对比维度VAE(变分自编码器)GAN(生成对抗网络)Transformer(变换器&…

计算机网络(四)数字签名和CA认证

什么是数字签名和CA认证? 数字签名 数字签名的过程通常涉及以下几个步骤: 信息哈希:首先,发送方使用一个哈希函数(如SHA-256)对要发送的信息(如电子邮件、文件等)生成一个固定长度…

GIS场景升级:支持多种影像协议与天气效果

在GIS场景编辑领域,升级视效的需求日益增加。有一款名为山海鲸可视化的免费工具,本人亲测能够完美满足这一需求。山海鲸可视化不仅支持多种GIS影像协议(如TMS、WMS、WMTS等),还能一键添加天气效果,瞬间提升…

【Unity】 HTFramework框架(五十三)使用 Addressables 可寻址系统

更新日期:2024年7月25日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 Addressables 可寻址系统使用 Addressables 可寻址系统一、导入 Addressables二、切换到 Addressables 加载模式三、切换资源加载助手四、加载资源五、注…

【全面介绍Python多线程】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 🦇目录 1. 🦇前言2. 🦇threading 模块的基本用法3. 🦇Thre…

编程类精品GPTs

文章目录 编程类精品GPTs前言种类ChatGPT - GrimoireProfessional-coder-auto-programming 总结 编程类精品GPTs 前言 代码类的AI, 主要看以下要点: 面对含糊不清的需求是否能引导出完整的需求面对完整的需求是否能分步编写代码完成需求编写的代码是否具有可读性和可扩展性 …

【个人亲试最新】WSL2中的Ubuntu 22.04安装Docker

文章目录 Wsl2中的Ubuntu22.04安装Docker其他问题wsl中执行Ubuntu 报错:System has not been booted with systemd as init system (PID 1). Can‘t operate. 参考博客 😊点此到文末惊喜↩︎ Wsl2中的Ubuntu22.04安装Docker 确定为wsl2ubuntu22.04&#…

57 数据链路层

用于两个设备(同一种数据链路节点)之间传递 目录 对比理解“数据链路层” 和 “网络层”以太网 2.1 认识以太网 2.2 以太网帧格式MAC地址 3.1 认识MAC地址 3.2 对比理解MAC地址和IP地址局域网通信MTU 5.1 认识MTU 5.2 MTU对ip协议的影响 5.3 MTU对UDP的…

vue elementui 在table里使用el-switch

<el-table-columnprop"operationStatus"label"状态"header-align"center"align"center"><template slot-scope"scope"><el-switch active-value"ENABLE" inactive-value"DISABLE" v-mod…

Java OpenCV 图像处理40 图形图像 图片裁切ROI

Java OpenCV 图像处理40 图形图像 图片裁切 在 OpenCV 中&#xff0c;Rect 类是用来表示矩形的数据结构&#xff0c;通常用于定义图像处理中的感兴趣区域&#xff08;Region of Interest&#xff0c;ROI&#xff09;&#xff0c;或者指定图像中的某个区域的位置和大小。Rect 类…

【深度学习】大模型GLM-4-9B Chat ,微调与部署(3) TensorRT-LLM、TensorRT量化加速、Triton部署

文章目录 获取TensorRT-LLM代码&#xff1a;构建docker镜像并安装TensorRT-LLM&#xff1a;运行docker镜像&#xff1a;安装依赖魔改下部分package代码&#xff1a;量化&#xff1a;构建图&#xff1a;全局参数插件配置常用配置参数 测试推理是否可以代码推理CLI推理 性能测试小…

Python爬虫技术 第09节 状态码

在使用Python进行网络爬虫开发时&#xff0c;理解HTTP状态码是至关重要的。HTTP状态码是由服务器返回给客户端的响应状态指示&#xff0c;通常用于告知客户端请求是否成功、失败或需要采取进一步的操作。下面是一些常见的HTTP状态码及其含义&#xff1a; 常见的HTTP状态码 1xx…

Lua脚本简单理解

目录 1.安装 2.语法 2.1Lua数据类型 2.2变量 2.3lua循环 2.4流程控制 2.5函数 2.6运算符 2.7关系运算符 3.lua脚本在redis中的使用 3.1lua脚本再redis简单编写 3.2普通锁Lua脚本 3.3可重入锁lua脚本 1.安装 centos安装 安装指令&#xff1a; yum -y update yum i…

5. System Design 5.2. 身份验证框架和信任链

快速链接: . &#x1f449;&#x1f449;&#x1f449; 个人博客笔记导读目录(全部) &#x1f448;&#x1f448;&#x1f448; 付费专栏-付费课程 【购买须知】我的联系方式-自建交流群-学习群 【必看/必看&#xff01;&#xff01;】ATF架构开发精讲-专题目录&#x1f448;…

Unity Android接入SDK 遇到的问题

1. buildtools、platformtools、commandline tools 以及compiled sdk version、buildtools sdk version、target sdk version 的说明 Android targetSdkVersion了解一下 - 简书 2. 查看.class 和.jar文件 jd_gui 官网地址&#xff1a; 下载jd_gui 工具 &#xff0c;或者 idea 下…

全方位数据管理:一站式爬虫服务解决方案

摘要 面对互联网信息爆炸的时代&#xff0c;如何高效地收集、整理并分析海量数据&#xff0c;成为企业与开发者面临的一大挑战。本文将深入探讨一站式爬虫服务解决方案&#xff0c;揭示如何通过全方位数据管理策略&#xff0c;助力企业轻松驾驭大数据海洋&#xff0c;实现数据…

事务和函数索引

事务 事务的定义 事务&#xff08;Transaction&#xff09;&#xff0c;就是将一组SQL语句放在同一批次内去执行&#xff0c;如果一个SQL语句出错&#xff0c;则该批次内 的所有SQL都将被取消执行。 事务的特点 一个事务中如果有一个数据库操作失败&#xff0c;那么整个 事务…

光明乳业:以科技赋能品质,引领乳业绿色新未来

近日&#xff0c;光明乳业再次成为行业焦点&#xff0c;其在科技创新与绿色发展方面的卓越表现赢得了广泛赞誉。作为中国乳制品行业的领军企业&#xff0c;光明乳业始终坚守品质至上的原则&#xff0c;不断探索科技创新之路&#xff0c;致力于为消费者提供更高品质、更健康的乳…

芯片的计算能力由什么决定

芯片的计算能力由什么决定 芯片的计算能力由多个因素决定。 包括但不限于&#xff1a; 架构设计&#xff1a; 芯片的架构设计决定了其计算单元的数量和类型&#xff0c;以及它们之间的连接方式和通信方式。不同的架构可以提供不同的计算能力和性能。处理器速度&#xff1a; 处…

Linux下普通用户无法执行sudo指令

当执行sudo指令时出现&#xff1a; xxx&#xff08;普通用户名字&#xff09; is not in the sudoers file 说明在/etc/sudoers文件中没有把xxx加入到可执行sudo指令的名单中&#xff0c;因此需要修改sudoers文件。 解决方法&#xff1a;1、vim /etc/sudoers &#xff08;要…