【Redis】关于它为什么快?使用场景?以及使用方式?为何引入多线程?

目录

1.既然redis那么快,为什么不用它做主数据库,只用它做缓存?

2.Redis 一般在什么场合下使用?

 3.redis为什么这么快?

4.Redis为什么要引入了多线程?


1.既然redis那么快,为什么不用它做主数据库,只用它做缓存?

redis设计者的初衷,就只是为了存储小量级的共享数据

所以,他敢直接单线程直接干上去,因为数据量小,所以够快。

因此,一旦碰到大key的情况, redis的风险就来了。

我曾经遇到过,用redis做队列,产生了大key,然后导致主服务器阻塞。

接下里引发了集群的客观下线,数据全面紊乱。

试想一下,如果用redis存储个千万级别的数据,那select一下,是不是其他线程都别玩了。

ok,你可以说,那咱们搞个多线程版的redis不就解了。

但别忘了,关系型数据库,牛逼之处就是对事务的管控,比如mysql的mvcc。

那redis有这些东西吗?它没有啊。

那强行上车,到时候各种脏读,不可重复读,幻读全来了。

何必呢,有mysql这种现成的产品,何必为了追求那一点效率,去回炉重造呢?

2.Redis 一般在什么场合下使用?

Redis 是一种开源的、支持网络、基于内存、可持久化的键值数据库。常用于在高并发、高性能场景下进行缓存、消息队列、计数器、排序等操作。

  1. 缓存:Redis 的读写性能非常高,适合做缓存。
  2. 消息队列:Redis 支持发布订阅模式,可以作为消息队列使用。
  3. 计数器:Redis 支持原子计数器操作,可以用来统计网站的访问量等。
  4. 排序:Redis 支持对数据进行排序,可以用来做排行榜等应用。



 3.redis为什么这么快

Redis 之所以被认为是快速的原因有以下几点:

内存存储:Redis 将数据存储在内存中,这使得它能够提供快速的读写操作。与传统的磁盘存储相比,内存存储的访问速度更快,因为它无需进行磁盘 I/O 操作。

单线程模型:Redis 使用单线程模型来处理所有的客户端请求。这样可以避免多线程之间的上下文切换开销和锁竞争,使得请求的处理更加高效。此外,单线程模型还简化了 Redis 的实现和维护。

非阻塞 I/O:Redis 使用非阻塞的网络 I/O 模型,通过使用事件驱动的方式处理客户端请求。它利用操作系统提供的 epoll、kqueue 等机制,在单线程中同时处理多个客户端连接,避免了传统阻塞 I/O 的等待时间,提高了并发性能。

简单数据结构:Redis 提供了一些简单而高效的数据结构,如字符串、哈希表、列表、集合和有序集合等。这些数据结构的实现经过了优化,能够在常数时间内执行大多数操作,如插入、删除和查找等。

持久化选项:Redis 提供了多种持久化选项,包括快照(snapshot)和日志(append-only file)。通过将数据保存到磁盘上的文件,可以在重启后快速恢复数据,保证数据的持久性。

高效的操作:Redis 提供了丰富的命令和功能,可以通过一条命令完成复杂的操作。例如,它支持原子操作、批量操作、管道操作和事务等,这些操作可以减少网络往返次数,提高了性能。

4.Redis为什么要引入了多线程?

1、线程是什么?

线程是操作系统能够进行运算调度的最小单位,换句话说线程就是cpu调度的最小单位。在多线程编程中,线程是程序执行的流程,每个线程都有自己的执行路径和上下文,并且可以独立执行和同步与其他线程。

2、使用线程带来的好处?

  • 并发处理:线程可以让程序同时执行多个任务,实现并发处理。多线程可以充分利用多核处理器的优势,提高系统的处理能力。
  • 资源共享:线程可以共享进程的资源,如内存、文件等。这样可以减少资源的重复创建和占用,提高系统的效率和性能。
  • 提高响应性:通过多线程,可以将耗时的操作和阻塞任务放在后台线程中处理,保持主线程的响应性,提高用户体验。

3、Redis引入线程后的好处?

  • 并发处理能力:Redis是一个高性能的缓存和数据存储系统,引入多线程可以提高其并发处理能力,同时处理多个客户端请求,减少请求的排队等待时间。
  • 提高吞吐量:通过多线程处理客户端请求,Redis可以同时执行多个命令,提高系统的吞吐量,加快数据处理速度。
  • 高效利用资源:Redis引入线程后,可以更好地利用多核处理器的性能,充分发挥硬件资源的优势,提高系统的效率和性能。

总的就是redis引入多线程可以提高并发处理能力和性能,能够更好地应对高并发的请求,而且能充分利用多核处理器的性能,提高系统的吞吐量和响应速度。多线程还可以优化资源的利用和提高系统的效率,好好处多多。

另外很多人有个误解redis 不是单线程的吗?怎么并发处理?

这是对于Redis的误解。事实上,Redis在处理客户端请求时采用了单线程的模型,但这并不意味着它不能并发处理。

Redis之所以可以并发处理,主要有以下几个原因:

  • 非阻塞式I/O:Redis使用了非阻塞式的网络I/O模型,通过异步地处理网络请求,减少了对于阻塞等待的需求,提高了系统的并发处理能力。
  • 高速内存访问:Redis将数据存储在内存中,并通过内存访问来处理请求,相比于磁盘访问,内存访问更快速,能够更快地响应客户端请求。
  • 单线程模型的优化:虽然Redis使用单线程处理请求,但它通过使用高效的数据结构和算法来优化性能,例如使用跳表(Skip List)来实现有序集合,使用字典(Dictionary)来实现快速的键值查找,这些优化使得Redis能够在单线程下处理大量的请求。
  • 多路复用技术:Redis使用多路复用技术来管理多个客户端连接,通过监听多个连接的事件并进行处理,从而实现了同时处理多个客户端请求的能力。

尽管Redis在处理客户端请求时采用了单线程的方式,但它通过上面优化策略,使得单线程能够高效地处理并发请求。这也是Redis在性能高的原因之一。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电路笔记 :MOS场效应晶体管+红外遥控+AMS1117 电源模块

三极管(BJT,Bipolar Junction Transistor)和 MOSFET(Metal-Oxide-Semiconductor Field-Effect Transistor)是两种不同类型的晶体管,它们在工作原理、性能特性和应用方面有一些重要的区别。 结构和工作原理…

基于.NET+FreeSql实现的仿掘金专栏前后端分离的CMS

前言 今天分享一款基于.NETFreeSql实现的仿掘金专栏前后端分离、支持Docker部署、集成了OAtuh2授权登录、QQ、Github、Gitee快速登录、简单实用的CMS:lin-cms-dotnetcore。 什么是 Lin CMS? 林间有风团官方团队Gitee地址:https://gitee.com/…

数据库管理-第139期 做大还是做小-Oracle名称哪些事(20240125)

数据库管理139期 2024-01-25 第139期 做大还是做小-Oracle名称哪些事(20240125)1 问题2 排查3 扩展总结 第139期 做大还是做小-Oracle名称哪些事(20240125) 作者:胖头鱼的鱼缸(尹海文) Oracle A…

【硬件产品经理】避免硬件产品失败 | 技术维度

目录 简介 技术维度一:低估产品开发 技术维度二:低估规模生产的复杂性 技术维度三:测试不足 技术维度四:产品太复杂 技术维度五:对客户承诺太高 推荐内容 简介 这节内容主要从技术维度来谈谈避免硬件产品失败这…

指针的深入了解5

1.二维数组传参本质 在此之前我们学习了一维数组传参&#xff0c;传的是它的首元素地址。那么二维数组也是这样的吗&#xff1f; 我们来看一串代码&#xff1a; void print(int(*pt)[5]) {for (int i 0; i < 3; i){for (int j 0; j < 5; j){printf("%d ",…

bert提取词向量比较两文本相似度

使用 bert-base-chinese 预训练模型做词嵌入&#xff08;文本转向量&#xff09; 模型下载&#xff1a;bert预训练模型下载-CSDN博客 参考文章&#xff1a;使用bert提取词向量 下面这段代码是一个传入句子转为词向量的函数 from transformers import BertTokenizer, BertMod…

2024年了,是谁还在学C++11?(没错,是我)

今天要聊的这本书&#xff0c; 是真正畅行全球20年的C入门必读经典&#xff0c;各版本全球总销量超1300万册&#xff01; 它惠及了数百万高校师生&#xff0c;启蒙了5代国产程序员&#xff0c; 令全球数千万C开发者全部为之疯狂的大&#xff01;师&#xff01;名&#xff01…

实现Crm系统的灵活配置,满足不同行业客户需求

目录 一&#xff1a;数据模型配置 二&#xff1a;流程配置 三&#xff1a;扩展性配置 实现CRM系统的可配置性需要关注以下几个方面&#xff1a; 一&#xff1a;数据模型配置 为了满足企业的个性化需求&#xff0c;CRM系统需要提供灵活的数据模型配置。用户可以根据自己的业…

秋招面试—计算机网络安全

2021 计算机网络安全 1.Get 和 Post 的区别 get 用于获取数据&#xff0c;post用于提交数据&#xff1b; get 的缓存保存在浏览器和web服务器日志中&#xff1b; get 使用明文传输&#xff0c;post请求保存在请求体中&#xff1b; get 长度限制在2048以内 2.常见的HTTP请…

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析

本次的漏洞研究基于thinkPHP开发开的一款项目..... 漏洞描述 Likeshop是Likeshop开源的一个社交商务策略的完整解决方案&#xff0c;开源免费版基于thinkPHP开发。Likeshop 2.5.7.20210311及之前版本存在代码问题漏洞&#xff0c;该漏洞源于文件server/application/api/contr…

pytest教程-8-用例参数化方法

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节中我们学习了pytest用例前后置方法的使用&#xff0c;本小节我们讲解一下pytest用例的参数化方法。 参数化简介&#xff1a; 参数化测试是指在测试用例中通过传入不同的参数来运行多次测试&#xff0c;…

图像复原的天花板在哪里?SUPIR:开创性结合文本引导先验和模型规模扩大

SUPIR&#xff08;Scaling-UP Image Restoration&#xff09;&#xff0c;这是一种开创性的图像复原方法&#xff0c;利用生成先验和模型扩大规模的力量。通过利用多模态技术和先进的生成先验&#xff0c;SUPIR在智能和逼真的图像复原方面取得了重大进展。作为SUPIR中的关键催化…

纵向拼接,一键高效,让图片处理更简单!

你是否曾经因为需要批量处理图片而感到烦恼&#xff1f;现在&#xff0c;有了我们的图片处理工具&#xff0c;你可以轻松地纵向拼接图片&#xff0c;一键批量处理&#xff0c;让图片处理工作更加高效&#xff01;这款工具采用先进的技术&#xff0c;能够快速准确地完成图片纵向…

Android SystemUI 介绍

目录 一、什么是SystemUI 二、SystemUI应用源码 三、学习 SystemUI 的核心组件 四、修改状态与导航栏测试 本篇文章&#xff0c;主要科普的是Android SystemUI &#xff0c; 下一篇文章我们将介绍如何把Android SystemUI 应用转成Android Studio 工程项目。 一、什么是Syst…

大数据 - Spark系列《一》- 分区 partition数目设置详解

目录 &#x1f436;3.2.1 分区过程 &#x1f436;3.2.2 SplitSize计算和分区个数计算 &#x1f436;3.2.3 Partition的数目设置 1. &#x1f959;对于数据读入阶段&#xff0c;输入文件被划分为多少个InputSplit就会需要多少初始task. 2. &#x1f959;对于转换算子产生的…

在centos 7 中安装配置Jdk、Tomcat、及Tomcat自启动

目录 一、安装配置Jdk 1.创建目录并上传文件 2.解压JDK压缩包 3.配置JDK环境变量 4.设置环境变量生效 二、安装配置Tomcat 1.上传Tomcat并解压 2.启停Tomcat 3.修改tomcat-user.xml配置 4.配置远程访问Tomcat 5.远程项目发布 三.Tomcat自启动配置 1.配置Tomcat自启…

imx6ull学习记录(一)

这一块主要是了解linux系统驱动部分&#xff0c;编译镜像相关的知识&#xff0c;这里记录一下。 使用板子如下&#xff1a; 教程用的这一个版本&#xff1a; 1、基本环境搭建 这个比较简单&#xff0c;只是注意一下就是正点原子的教程用了一个NFS文件系统&#xff0c;简单来…

MongoDB介绍及安装

文章目录 MongoDB介绍什么是MongoDBMongoDB技术优势MongoDB应用场景 MongoDB快速开始linux安装MongoDB启动MongoDB Server关闭MongoDB服务 Mongo shell使用mongo shell常用命令数据库操作集合操作 安全认证创建管理员账号常用权限创建应用数据库用户 Docker安装MongoDB工具官方…

物流平台如何与电商平台进行自动化流程管理

为什么要实现物流与电商平台进行自动化管理 实现物流平台与电商平台的自动化流程管理对企业和消费者都有着重要的意义&#xff0c;比如以下几点&#xff1a; 提高效率&#xff1a;自动化流程管理可以减少人为操作的错误和延误&#xff0c;提高订单处理和物流配送的效率。通过定…

What is Rust? Why Rust?

why Rust&#xff1f; 目前&#xff0c;Rust 变得越来越流行。然而&#xff0c;仍然有很多人&#xff08;和公司&#xff01;&#xff09;误解了 Rust 的主张价值是什么&#xff0c;甚至误解了它是什么。在本文中&#xff0c;我们将讨论 Rust 是什么以及为什么它是一种可以增强…
最新文章