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

news2024/11/16 5:36:14

目录

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.coloradmin.cn/o/1409916.html

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

相关文章

在线SM4加密/解密工具

在线SM4加密/解密 - BTool在线工具软件,为开发者提供方便。在线SM4加密/解密工具支持快速、便捷地对数据进行SM4算法加密与解密。适用于各类业务场景,确保信息安全传输,操作简易直观,只需几步即可完成加解密过程。采用国家标准SM4…

Webpack5 基本使用 - 1

Webpack 是什么 webpack 的核心目的是打包,即把源代码一个一个的 js 文件,打包汇总为一个总文件 bundle.js。 基本配置包括mode指定打包模式,entry指定打包入口,output指定打包输出目录。 另外,由于 webpack默认只能打…

Python工具:pathlib

文件的路径实际上是一件很困扰的时间(各种平台有时候规则不一样,有时候还需要考虑字符转义的问题),因此我直接推荐使用模块 pathlib,当然,如果您不介意的话,可以使用 os.path 做较为低级的路径操…

蓝桥杯(Python)每日练Day5

题目 OJ1229 题目分析 题目完全符合栈的特征,后进先出。如果能够熟练使用列表的9种方法那么这道题很容易解出。 题解 a[]#存衣服 nint(input()) for i in range(n):llist(input().split())#判断每一步的操作if len(l[0])2:a.append(l[1])else:while a.pop()!l…

不停机迁移,TDengine 在 3D 打印技术中的“焕新”之路

小T导读:自 2021 年我们正式使用 TDengine 至今已接近三年,现在 TDengine 已经成熟应用于我们多个项目当中,凭借着强大的读写存储能力,为我司多项业务的核心数据保驾护航。近期我们团队刚好完成 TDengine 2.x 到 3.x 的数据迁移&a…

Redisson 分布式锁可重入的原理

目录 1. 使用 Redis 实现分布式锁存在的问题 2. Redisson 的分布式锁解决不可重入问题的原理 1. 使用 Redis 实现分布式锁存在的问题 不可重入:同一个线程无法两次 / 多次获取锁举例 method1 执行需要获取锁method2 执行也需要(同一把)锁如…

Redis面试

1.说说什么事redis Redis是一种基于键值对的NoSql数据库。 Redis中的value支持string(字符串)、hahs(哈希)、list、set、zset(有序集合)、bitmaps(位图),HyperLoglog等数…

树的学习day01

树的理解 树是一种递归形式的调用 树是由于多个结点组成的有限集合T 树中有且仅有一个结点称为根 当结点大于1的时候,往往其余的结点为m个互不相交的有限个集合T1,…,Tm,每个互不相交的有限集合本身右是一棵树,称为这个根的子树 空树也是树 关…

【Web前端开发基础】CSS3之空间转换和动画

CSS3之空间转换和动画 目录 CSS3之空间转换和动画一、空间转换1.1 概述1.2 3D转换常用的属性1.3 3D转换:translate3d(位移)1.4 3D转换:perspective(视角)1.5 3D转换:rotate3d(旋转&a…

城市开发区视频系统建设方案:打造视频基座、加强图像数据治理

一、背景需求 随着城市建设的步伐日益加快,开发区已经成为了我国工业化、城镇化和对外开放的重要载体。自贸区、开发区和产业园的管理工作自然也变得至关重要。在城市经开区的展览展示馆、进出口商品展示交易中心等地,数千路监控摄像头遍布各角落&#…

matlab窗函数-hann窗和hamming窗函数

窗函数的作用 在时域上,窗函数可以看作是对原始信号进行截断或调制的加权函数。这些窗函数通常在时域上是有限的宽度,并且具有对称性,如矩形窗、汉宁窗、汉明窗和布莱克曼窗等。例如,汉明窗是一种对称窗函数,它可以用…

Cuda笔记1

1、培训001 1 1…100,CPU是串行执行,GPU是分成几部分同时计算,如123,456… 2、培训002 一来一回 每种定义有对应的调用位置,和执行位置,不对会报错。 下图是用NVPROF时间分析 下图是资源分析 1) CUDA…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第 2章感知机

文章目录 第 2章感知机2.1 感知机模型2.2 感知机学习策略2.2.1 数据集的线性可分性2.2.2 感知机学习策略 2.3 感知机学习算法2.3.1 感知机学习算法的原始形式2.3.2 算法的收敛性2.3.3 感知机学习算法的对偶形式 实践:二分类模型(iris数据集)数…

爬虫正则+bs4+xpath+综合实战详解

Day3 - 1.数据解析概述_哔哩哔哩_bilibili 聚焦爬虫:爬取页面中指定的页面内容 编码流程:指定url -> 发起请求 -> 获取响应数据 -> 数据解析 -> 持久化存储 数据解析分类:正则、bs4、xpath(本教程的重点) 数据解析原理概述&am…

2024群硕荣誉首响,第十三届公益节斩获企业大奖

2024年1月23日至24日,第十三届公益节在北京顺利举行。 历经多年的探索和实践,公益节已经成为中国公益慈善领域颇具影响力的年度盛事。本届公益节全面恢复线下活动,各大企业齐聚现场,展现社会责任的力量,现场气氛热烈而…

什么是5G RedCap?5G RedCap有什么优势?

5G RedCap(Reduced Capability)是指5G轻量化技术,即通过对5G技术进行一定程度的“功能裁剪”,来降低终端和模组的复杂度、成本、尺寸和功耗等指标,从而“量体裁衣”适配不同的物联需求,实现兼顾物联网系统的…

【送书活动八期】docker容器中登陆并操作postgresql

这里的背景比较简单,因为区块链浏览器使用的是blockscout,blockscout的数据库选择的是postgresql,这些服务组件都是使用的docker容器来管理,今天进行区块链上交易查询的时候,发现数据存在部分问题,因此需要…

大数据信用查询系统能查到什么呢?

在金融助贷行业,大数据有叫大数据信用或者网贷大数据,在申贷的时候,想必大多数人都有听说过,很多人因为大数据不良的原因申贷被拒过,那大数据信用查询系统能查到什么呢?本文就简单为大家总结几点大数据信用查询的内容…

freeRTOS总结(十)消息 队列

1,队列简介(了解) 队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递) 与全局变量的区别 类似全局变量?假设有一个全局变量a 0,现有两个任务都在写这个变量a 假如 当任务…

三层架构-pc通外网小实验

要求:pc端能上外网(isp) 效果图:pc1(VLAN2)和pc3(vlan3)都能ping通2.2.2.2(R2环回) 代码:#先配置好r1,r2,端口ip # [R1] ip route-static 0.0.0.0 0.0.0.0 10.1.1.2 acl 2000 rule permit source any interface GigabitEthernet0/0/2 nat outbound 2000 …