redis的高效工作方式

文章目录

redis的高效工作方式

我们总是能听到有人说:redis的效率很高,访问速度快

但是,redis究竟是什么快?为什么它就快呢?

明确何为redis的快

我们知道,redis操作数据,访问数据都是在内存中进行的

但是客户端和服务端之间还是得靠网络进行通信。所以redis在网络不好的时候还是有可能"慢"的

所以,我们需要知道:什么是redis的快?

redis所谓的快,其实是相对于一些关系型数据库mysql,oracle...等而言的

redis功能比较简单,而且是在内存中操作;关系型数据库功能繁多,硬盘操作

所以redis相比于数据库要快是必然的。毕竟"快"是一个相对的概念

redis的单线程模型

redis是单线程模型不假,但是不代表它只有单线程!

通常说redis是单线程模型指的是:redis在处理客户端的请求操作的时候,是使用单线程进行处理的

但是在处理其他方面,如网络的IO,肯定得用多线程来进行处理,否则抗不住高并发。

下面我们来看一下redis的工作方式:

redis是支持多个客户端同时连接的,也就是必然会有客户端的并发请求

正常来说,如果redis这边采用多线程处理请求,必然会有多线程的竞态问题,需要考虑同步互斥关系

但是,redis的设计思想就是:采用单线程进行处理请求!

所以,表面上看确实是并发请求,但是总会有时间差!所以进入redis服务端处理的时候就是串行的!

而且,前面了解过:redis底层用的是epoll,所以只有就绪了才会进行处理!

也就是从就绪队列中把就绪事件拿出来进行处理,然后返回给客户端

所以,这里完全不用担心redis工作的时候会有竞态问题,因为redis设计之初就是使用的单线程进行工作的!

redis的使用注意事项

首先,redis使用单线程快:

是因为redis的绝大部分操作都是【短平快】,几乎不消耗什么CPU的资源

开过多的线程反而会带来额外的线程切换,调度,销毁,回收的开销,最终得不偿失

所以,并不是所有的业务都适合使用单线程的!redis这里也是根据它要做的事情的特性来决定的

但也正是因为redis使用单线程:

所以在使用redis的时候,就需要特别注意不要让某个请求处理的时间过长【如keys *】

因为某个请求处理时间过长,会导致其他的请求被阻塞 -> 万一大量请求打到数据库就麻烦了

redis效率高的原因

这个部分,我们将重点总结一个问题:为什么redis的效率比较高呢?

下面将分为四个维度进行分析:

1.redis访问的是内存,而数据库访问的是硬盘

2.redis的操作大部分都是【短平快】,相比于数据库而言请求更加简单,处理更快

3.redis采用了单线程模型【这个是取决于redis本身支持的操作而言】

4.redis底层采用的是epoll的IO多路复用机制,一次性可以操作多个socket

这四点其实或多或少都已经讲过了,这里就不再赘述

多余epoll高效的原因可以参考这一篇文章:epoll

相关推荐
Lucis__17 小时前
Redis持久化机制解析
redis·缓存·操作系统·文件·非关系型数据库·1024程序员节
不脱发的程序猿17 小时前
纳指ETF量化策略
数据库·人工智能·1024程序员节
李纲明17 小时前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
程序员塔塔喵18 小时前
【MySQL篇|第一篇】索引失效的情况
数据库·mysql·索引失效
北京青蓝智慧马老师18 小时前
比外部黑客更难防的,是那个有权限的自己人(3 个脱敏复盘)
大数据·数据库·人工智能
笃行35019 小时前
拆一台数据集成产品:KFS 的骨架、肌肉和神经
数据库
4SAPI19 小时前
搭建 AI 数据分析工具大模型 API 选型指南
数据库·人工智能·架构·php·1024程序员节
用户0942485680320 小时前
第7章:Redis有序集合 ZSet 实战:排行榜与延时任务
redis·架构·源码
码士集团小青20 小时前
面霸篇:高频 Java 基础问题(核心卷一)
linux·服务器·数据库·redis·缓存·1024程序员节
2301_322414280420 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis