Redis学习(二)--为什么使用缓存

缓存中间件Redis进阶之路二(快速安装Redis) 对于在Linux及Mac开发环境的安装方法,读者可以访问Redis的官网或者查找其他资料进行安装与配置即可。(2)在缓存中创建一个key,设置其名字为redis:order:no:10011(按照自己的习惯取名即可,但是建议最好具有某种含义),设置其值为10011,命令为set redis:order:no:1001110011。(3)查看缓存中指定key的取值,如获取刚刚创建的key:redis:order:no:10011的取值,命令为get redis:order:no:10011,如下图所示。 阅读详情

1.为什么使用缓存技术?

   Mysql和Oracle数据都是存放在磁盘中,虽然在数据库层中也做了对应缓存,但数据库层次的缓存一般仅针对于查询的内容。一般只有表中数据没有发生变更的时候,数据库中的cache才会发生作用。但这并不能减少业务系统对数据库产生的增、删、改、查的IO压力。因此缓存数据库应运而生,该技术实现了对热点数据的高速缓存,提高应用的响应速度,极大缓解后端数据库的压力 。

2.主流应用架构

   一般为了提升性能都会在客户端和存储层之间添加一个缓存层。

(1)当客户端向后端发送请求的时候,会先去缓存中查,看看有没有相关的数据。

(2)如果有相关数据,就将数据直接返回,减轻了存储层的压力。

(3)如果缓存中没有相关数据。

(4)则穿透缓存,再去存储层中查询

(5)如果在存储层中找到相关数据,则将该数据回写回缓存层中,以便下次客户端再次请求同样数据时,可以快速的从缓存层返回。回写的过程就是所谓的回种。

(6)将结果返回至客户端,完成一次请求、响应的操作。

(7)当我们发现存储层挂掉时,或者没办法提供服务时,可以让客户端请求直接打在缓存层上。

(8)不管有没有数据都直接返回,在有损的情况下,对外提供服务。

3.缓存中间件--Memcache和Redis

Memcache:代码层次类似于hash。

  • 支持简单的数据类型;
  • 不支持数据持久化存储;
  • 不支持主从;
  • 不支持分片。

Redis:

  • 数据类型丰富(支持set、list等类型);
  • 支持数据磁盘持久化存储;
  • 支持主从;
  • 支持分片。

建议有持久化需求、或者对数据结构和处理有高级要求的应用,应选择redis。

其他简单的key-value存储,选择Memcache。

4.为什么redis能这么快?

100000+QPS(QPS即query per second,每秒内查询次数)。

  • 完全基于内存。

       绝大部分请求是存粹的内存操作,执行效率高。不会受到硬盘IO速度的限制,所以速度极快(采用单进程、单线程模型的key-         value数据库);

  • 数据结构简单,对数据操作也简单。                                                                                                                                           

        redis不使用表,他的数据库不会预定义或者强制去要求用户对redis存储的不同数据进行关联。因此性能相比于关系型数据库要高出不止一个量级。其存储结构就是键值对,类似于hashmap,hashmap的优势就是查找和操作时间的复杂度都是O(1);

  • 采用单线程,单线程也能处理高并发请求,想多核也可启动多实例。

       ​​​一般在面对多并发的请求时候,首先想到的是用多个线程来处理,将IO线程与业务线程分开,业务线程使用线程池,避免频繁创建和销毁线程,即便是一次请求阻塞了也不会影响到其他请求。为什么redis会反其道而为之,准确来说redis的单线程结构是指其主线程是单线程的,这里主线程包括IO事件的处理以及IO对应的相关请求的业务的处理,此外主线程还负责过期键的处理,复制协调、集群协调等等,这些除了IO事件之外的逻辑,会被封装成周期性的任务,由主线程周期性的处理,正因为采用单线程的设计,对于客户端的所有读写请求都有一个主线程串行的处理,因此多个客户端同时对一个键进行写操作的时候,就不会有并发的问题,避免了频繁的上下文切换和锁竞争,使得redis执行起来效率更高。

       那么单线程可以处理高并发的请求吗?当然可以了,redis都实现了。

       首先,并发并不是并行,并行性意味着服务器能够同时执行几个事情,具有多个计算单元。而并发性IO流,意味着能够让一个计算单元来处理来自多个客户端的流请求,redis使用单线程配合着IO多路复用,将能大幅度的提升性能。在多核CPU流行的今天,只有一个线程,只用一个核,多少让人感觉很浪费,并且是否没法让CPU利用其它的计算能力,其实大家大可不必担心,因为redis早已对相关问题进行验证,在实际的测试中发现,redis支持的QPS相当高,并且在QPS峰值时候CPU也并没有被跑满,只是由于网络等原因,导致并发处理量等不能进一步上升,因此CPU并不是制约redis的性能瓶颈,此外大家依旧可以在多核的服务器中启动多个redis实例,来利用多核的特性。大家需要注意的是,这里我们一直强调的单线程,只是在处理我们的网络请求的时候,只有一个单线程来处理。一个正式的redis server在运行的时候,肯定不止是一个线程的,例如redis进行持久化时候,会根据实际情况,以子进程或者子线程的方式执行。

  • 使用多路I/O复用模型,非阻塞IO。

       redis是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或者输出都是阻塞的,所以I/O操作,在一般情况下,往往不能直接返回,这会导致某一文件的I/O阻塞,进而导致整个进程无法对其它客户端提供服务,而I/O多路复用就是为了解决这个问题而出现的。

(1)FD:File Descriptor,文件描述符。

         一个打开的文件通过唯一的描述符进行引用,该描述符是打开文件的源数据到文件本身的映射。

         在Linux内核中,这个描述符称为文件描述符,文件描述符用一个整数来表示。

(2)传统的阻塞I/O模型

         当使用read或者write对某一个文件描述符FD进行读写时,如果当前FD不可读,或者不可写,整个redis服务就不会对其它的操作做出响应,导致整个服务不可用,这也就是传统意义上的,也就是我们在编程中使用最多的阻塞模型。阻塞模型虽然在开发中非常常见,也非常易于理解,但是他会影响其它FD对应的服务,所以在需要处理多个客户端任务的时候,往往都不会使用阻塞模型,此时,需要一种更高效率的I/O模型来支持redis的高并发处理,这里涉及的就是I/O多路复用模型。

(3)Select系统调用--I/O多路复用模型中最终要的函数调用

         select方法能够同时监控多个文件描述符的可读和可写操作,当其中的某些文件描述符可读、可写状态时,select方法就会返回可读、可写的文件描述符个数。select是负责监听文件是否可读、可写。监听的任务交给selector之后,程序又可以继续进行别的事情而不被阻塞了。

(4)多路I/O复用模型

         Redis采用的I/O多路复用函数:epoll/kqueue/evport/select

         epoll/kqueue/evport相比于select性能更为优秀,同时也能支撑更多的服务。

  •   因地制宜(根据编译平台的不同);
  •   优先选择时间复杂度为O(1)的I/O多路复用函数作为底层实现

         包括Linux中的epoll和macOs中的kqueue等,上述的这些函数都使用了内核内部的结构,并且能够服务几十万的文件描述符,性能比select优秀 ;

  • 以时间复杂度为O(n)的select作为保底

       因为select函数是作为poxy标准中的系统调用,在不同版本的操作系统上都会实现,以此作为保底方案,因为在当前的编译环境中没有epoll/kqueue/evport等比select更优秀的函数,将会选择select作为备选方案。由于其在使用时会扫描全部的监听的描述符,因此其时间复杂度较差,通常为O(n)

  • 基于react设计模式监听I/O事件。

       使用react设计模式来实现文件事件处理器的,文件事件处理器使用I/O多路复用模块,同时监听多个FD。当accept、read、write和close文件事件产生时,文件事件处理器就会回调FD绑定的事件处理器。虽然整个文件事件处理器是在单线程上运行的,但是通过I/O多路复用模块的引用,实现了同时对多个FD读写的监控,提高了网络通信模型的性能,同时也可以保证整个redis服务实现的简单。 

【Redis】Redis缓存使用问题 只要使用到缓存,无论是本地内存做缓存还是使用 redis 做缓存,那么就会存在数据同步的问题。 我以 Tomcat 向 MySQL 中写入和删改数据为例,来给你解释一下,数据的增删改操作具体是如何进行的。 阅读详情

相关推荐

【Redis】缓存

使用Redis作为Mysql缓存时,当Redis刚刚启动,或者Redis大批key失效之后,此时由于Redis自身相当于是空着的,没有什么缓存数据,那么Mysql就很可能直接被访问到,从而造成较大的问题因此就需要提前把热点数据备好,直接写入到Redis中,使Redis为Mysql搭建的“保护罩”尽快成型热点数据可以基于上文介绍过的统计方式生成,这份热点数据不用那么“精确”,只要能帮助Mysql低于大部分请求即可,随着程序运行,缓存的热点数据会逐步自动调整,来更一步适应当前情况。

2202_75555590的博客 920

Redis 缓存(Cache)

Redis 缓存(Cache)

ikun66666的博客 2433

Unity PBR实战:从零打造丝绸材质各向异性高光效果

本文详细介绍了在Unity中实现丝绸材质各向异性高光效果的PBR实战技巧。通过改造Standard Shader、适配IBL环境光以及高级效果调优,开发者可以创建出逼真的丝绸材质,展现动态光纹变化。文章包含关键代码示例和参数配置建议,特别适合需要提升材质表现力的Unity开发者。

weixin_29015483的博客 461

【Redis】为什么要使用redis作缓存

1 高性能 用户第一次访问数据库中的某些数据时,会从硬盘上读取,速度较慢。随后会将数据存在内存中,下一次再访问这些数据时,可以直接从内存中获取,速度很快。如果数据库中的数据改变,则同步改变缓存中相应的数据即可。 2 高并发 直接操作内存能够承受的请求是远远大于直接访问数据库的。所以可以把数据库中的部分数据转移到内存中去,这样用户的一部分请求会直接到缓存中,不用经过数据库。 3 分布式缓存 使用redis或者memcached之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。

Awt_FuDongLai的博客 1962

Windows 10/11 注册表 ProfileImagePath 误改修复:3步恢复用户登录与数据安全

本文详细介绍了Windows 10/11系统中因误改注册表ProfileImagePath键值导致用户无法登录的修复方法。通过3个关键步骤,包括定位SID、安全修复注册表项及验证处理,帮助用户恢复登录并保障数据安全。特别强调了操作顺序的重要性以避免数据丢失,适用于各类Windows用户账户登录错误的紧急处理。

chuoshao2508的博客 404

解密网页视频Blob链接:从防盗链到流媒体分片技术

本文深入解析了网页视频中Blob链接的工作原理,揭示了其作为现代视频防盗链与流媒体分片技术核心的本质。文章详细阐述了Blob对象与Media Source API如何协同工作,将视频数据分片传输,并结合HTML5的video元素实现安全、流畅的播放体验,有效提升了资源保护能力。

c7d8e的博客 317

为什么使用redis做缓存

高可用性:Redis提供了主从复制和集群功能,可以实现数据的备份和故障恢复。持久化支持:尽管Redis是一个基于内存的数据库,但它提供了持久化的支持,可以将数据保存到磁盘上,以防止数据丢失。这使得Redis可以在应用程序重启后快速恢复数据,并且可以根据需求进行灵活的配置,以平衡性能和数据安全性。内置数据结构:Redis不仅仅是一个简单的键值存储,它还支持丰富的数据结构,如字符串、哈希表、列表、集合和有序集合等。综上所述,Redis作为缓存具有高性能、灵活的数据结构、持久化支持和高可用性等优势,

qq_43795369的博客 1113

vmware vsphere 证书过期告警处理方法

vSphere Clinet 管理页面出现“证书告警” ,检查证书未发现现有证书有过期现象

m0_51902127的博客 3640

为什么要使用Redis缓存

Redis的优势 主要从“高性能”和“高并发”这两点来看待这个问题。 高性能: 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可! 高并发: 直接操作缓存能够承受的请求...

代码学习之路的博客 6744

SolidWorks2020详细步骤安装教程

1、在安装软件前请断开网络连接,需要安装.NETFramework3.5和4.0,最后还要确保把之前安装的旧版本完全卸载,以管理员身份运行SolidWorks_Flexnet_Server\server_remove.bat,然后等到服务“SolidWorksFlexnet服务器”将被删除。12、先不要运行软件,找到_SolidSQUAD_文件夹,将文件夹“ProgramFiles\SOLIDWORKSCorp”中的所有破解文件复制替到“ProgramFiles\SOLIDWORKSCorp”目录下;

qq_53545309的博客 1万+

量化交易零基础入门教程

特点 从零开始教编程。靠谱的量化交易学习资源稀少,且具有不讲编程、代码较难、过多等不适合新手等问题,本教程中则会从零开始教编程,解决量化入门过难过编程门槛这一问题。 量化与编程相结合。本教程不仅会教编程,而且会尽量结合量化情景,减少“我要做量化交易为什么要看这些用来培训程序员的东西”的愤懑。 简易精炼,快速入门。尽量只讲最核心最常用的知识,助你快速摆脱想学习量化却处处陌生不知所措的茫然的新手阶段。 读前说明 文后会有自测与自学,包括一些额外的延伸自学内容以及稍有难度的自测题目。 最最最基础的股票.

JanLEE 2888

为什么要使用Redis做缓存?

缓存可以将常用的数据存储在内存中,以加快数据的读取速度,减少数据库等存储设备的读取次数,从而降低系统的响应时间。通过使用缓存技术,可以将常用的数据存储在内存中,在下一次访问时直接从缓存中获取,避免了频繁的 IO 操作,提高了系统的性能和响应速度。就像在家里放置了一部分啤酒,缓存能够为系统提供更快的访问速度和更高的效率,同时减少了数据库等存储设备的负载,降低了系统的成本和风险。2.减轻服务器负担:通过使用缓存,可以减少服务器对数据库等存储设备的访问,降低服务器的负载,提高服务器的吞吐量。

m0_50180963的博客 844

SAP 业务技术平台(BTP) Workflow(工作流)功能介绍

这背后其实发生了很多事情:Workflow 应用里 Determine Equipment Service Task 得到执行,通过 HTTP POST,消费部署在 SAP BTP 上的 Business Rules Service,后者根据我们在 Start New Instance 里传入的 Sample Data,返回自动决定出的设备明细。关于这个 SAP BTP 开发工具的更多介绍,参考我的文章:SAP 新一代全栈开发工具:SAP Business Application Studio.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 8756

使用Redis做MySQL的缓存

1 为什么使用缓存当网站的处理和访问量非常大的时候,我们的数据库的压力就变大了,数据库的连接池,数据库同时处理数据的能力就会受到很大的挑战,一旦数据库承受了其最大承受能力,网站的数据处理效率就会大打折扣。此时就要使用高并发处理、负载均衡和分布式数据库,而这些技术既花费人力,又花费资金。2 使用场景页面缓存经常用在CMS(content manage system)内存管理系统里面。 数据缓存经常会

Go for IT 5万+

YOLOv8改进 | 主干网络 | 增加网络结构增强小目标检测能力【独家创新——附结构图】

YOLOv8改进,小目标检测,yolov8

kay_545 6022

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

什么是缓存?为什么要使用Redis?

文章目录什么是缓存?缓存 VS 数据库本地缓存 VS 分布式缓存本地缓存分布式缓存Memcached VS Redis 什么是缓存? 缓存是⼀个⾼速数据交换的存储器,使⽤它可以快速的访问和操作数据。 举个通俗的例子。 小明经营着一家饭店,在刚开张的时候由于名气不足,客源少,生意并不是很忙,平时没事的时候就闲着,有客人来了再进厨房安排做菜。随着饭店的日益发展,此时的饭店已经不同往日,有着大量的稳定客源,并且在某些节假日的时候甚至爆满。按照以前的做法,那肯定是行不通了,在用餐高峰期的时候因为备餐慢导致了客户的

凌桓丶的博客 6013

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SpringBoot整合redis缓存使用

一开始写增删改查基本都是直接对库操作,接口调用量少的时候,性能问题几乎不存在,但是数据量级上升之后,这些增删改查接口的压力也会大大上升,甚至会出现慢查询的情况,出现较大的延迟。这时候机智的小伙伴会使用索引,没错,索引可以解决一部分查询造成的性能问题。那么如何才能进一步提升查询的性能呢?对于读多写少的表可以使用缓存,那么将大大减少读取数据库的次数。 缓存常见的问题 1...

carson0408的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Redis学习 ——缓存

我们在日常的代码编写中比较少使用到Redis,但是如果涉及到了比较大型的项目,常常避不开Redis这一项技术,那么在什么样的场景需要使用Redis呢。首先我们得明白Redis是一个高性能得键值数据库,我们使用它得原因很简单,就是因为快。这个问题在大并发,高负载的网站中必须考虑。redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis的的的在性能上对比其他基于硬盘存储的数据库有非常明显的优势。

m0_74345597的博客 2624

如何使用 Redis 缓存?

​ 编辑 添加图片注释,不超过 140 字(可选) 如何使用 Redis 缓存 前言 对于 Redis 来讲,作为缓存使用,是我们在业务中经常使用的,这里总结下,Redis 作为缓存在业务中的使用。 旁路缓存 Cache Aside(旁路缓存)策略以数据库中的数据为准,缓存中的数据是按需加载的。它可以分为读策略和写策略。 只读缓存 只读缓存 从缓存中读取数据;如果缓存命中,则直接返回数据;如果缓存不命中,则从数据库中查询数据;查询到数据后,将数据写入到缓存中,并且返回给..

lyl54545的博客 1万+

【Redis缓存】

相比于数据库而言,缓存的操作性能更高,缓存性能高的主要原因有以下几点:1、缓存一般都是key-value查询数据的,因为不像数据库一样还有查询的条件等因素,所以查询的性能一般会比数据库高;2、缓存的数据是存储在内存当中的,而数据库的数据是存储在磁盘当中的,因为内存的操作性能远远大于磁盘,因此缓存的查询效率会高很多;3、缓存更容易做分布式部署(当一台服务器变成多台相连的服务器集群),而数据库一般比较难实现分布式部署,因此缓存的负载和性能更容易平行扩展和增加。缓存大致分为两大类:本地缓存、分布式缓存本地缓存:也

weixin_54161577的博客 9828

Redis 二 缓存

当我们客户端访问不存在的数据时,先请求redis,但是此时redis中没有数据,此时会访问到数据库,但是数据库中也没有数据,这个数据穿透了缓存,直击数据库,我们都知道数据库能够承载的并发不如redis这么高,如果大量的请求同时过来访问这种不存在的数据,这些请求就都会访问到数据库,简单的解决方案就是哪怕这个数据在数据库中也不存在,我们也把这个数据存入到redis中去,这样,下次用户过来访问这个不存在的数据,那么在redis中也能找到这个数据就不会进入到缓存了。如果请求量大的话,就会造成数据库崩溃。

George_huhu的博客 1274

Redis的使用方法之缓存

缓存穿透产生的原因是什么?用户请求的数据在缓存中和数据库中都不存在,不断发起这样的请求,给数据库带来巨大压力缓存穿透的解决方案有哪些?缓存null值布隆过滤增强id的复杂度,避免被猜测id规律做好数据的基础格式校验加强用户权限校验做好热点参数的限流。

m0_74039408的博客 2553

Python 如何使用 Redis 作为缓存

Redis是一个基于内存的高性能键值存储系统,它支持丰富的数据类型(如字符串、哈希、列表、集合等),可以用作数据库、缓存和消息中间件。由于 Redis 运行在内存中,因此其读写速度极快,非常适合用作缓存系统。此外,Redis 提供了持久化机制,允许将数据保存到磁盘,确保数据不会因为系统重启或崩溃而丢失。高性能:由于数据存储在内存中,Redis 的读写操作非常快,适合需要快速响应的应用场景。多种数据结构:支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,适合多种场景。持久性。

chusheng1840的博客 2121

Redis——缓存

我们都知道 Redis 的主要用途有三个方面:存储数据、作为缓存和消息队列,其中,Redis 最常用的场景就是作为缓存了,本篇文章就来和大家介绍一下缓存的基本概念,如何使用 Redis 作为缓存,缓存的更新策略有哪些,Redis 中的内存淘汰机制是怎样的,还有关于使用缓存的一些注意事项,那么就开始本篇文章的正题吧。

HKJ_numb1的博客 2814

Redis学习(三)缓存

缓存机制

LB_Wuyanzu的博客 2845

如何使用 Redis 作为高效缓存

Redis(RemoteDictionaryServer)是一个高性能的内存存储系统,通常被用作缓存来加速数据访问,提高应用的吞吐量和响应速度。本文详细讲解如何使用Redis作为高效缓存,包括基本原理、常见模式、最佳实践以及优化技巧。

maply的博客 1920
上一篇: java特性(一)之如何理解java的平台无关性
下一篇: Redis学习(一)--mac下安装Redis
田小江爱分享
博客等级 码龄10年 34粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值