首页 > 数据库 >Redis为什么快

Redis为什么快

时间:2023-09-10 10:45:48浏览次数:40  
标签:为什么 单线程 Redis 线程 内存 多线程 CPU

1、Redis到底有多快
根据官方数据,Redis 的 QPS 可以达到约 100000(每秒请求数)。

2、基于内存实现
这个不用多说,Redis是一个基于内存操作的缓存系统,所以请求处理很快。

3、高效的数据结构
Redis一共5种数据类型,String、List、Hash、Set、SortedSet。
不同的数据类型底层使用了一种或者多种数据结构来支撑,目的就是为了追求更快的速度。

4、单线程模型
Redis 的单线程指的是 Redis 的网络 IO (6.x 版本后网络 IO 使用多线程)以及键值对指令读写是由一个线程来执行的。 对于 Redis 的持久化、集群数据同步、异步删除等都是其他线程执行。

Redis为什么采用单线程模型?
因为 Redis 是基于内存的操作,CPU 不是 Redis 的瓶颈,Redis 的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了。

单线程有什么好处?
不会因为线程创建导致的性能消耗;
避免上下文切换引起的 CPU 消耗,没有多线程切换的开销;
避免了线程之间的竞争问题,比如添加锁、释放锁、死锁等,不需要考虑各种锁问题。
代码更清晰,处理逻辑简单。

5、I/O多路复用模型
Redis 采用 I/O 多路复用技术,并发处理连接,采用了 epoll + 自己实现的简单的事件框架。
image

标签:为什么,单线程,Redis,线程,内存,多线程,CPU
From: https://www.cnblogs.com/tonyq/p/17690850.html

相关文章

  • windows系统上docker配置redis闪退以及版本匹配问题
    安装镜像首先,在windows命令行安装指定版本的redis镜像:dockerpull<image_name>:<version>除此之外,因为docker安装运行redis容器,是没有配置文件的,需要自己手动创建一个 redis.conf 文件。redis.conf文件的获取最好从github官网中找。将conf文件一下参数进行调整:bind......
  • 作为Android程序员,为什么我的简历能让HR一眼就约面谈?
    前言我看过很多的简历,很多程序员其实是很懒的,尤其是工作了三、四年的程序员,很多人的简历才只有一页,只是把自已工作过的公司以及做的项目简单罗列一下,这是不对的,这是自已的不负责任。因为这样的简历很有可能让HR直接筛掉,因为HR每天面对几百上千份简历,一般都是通过关键词搜索来做初筛......
  • REDIS安装教程
    以下是在Linux系统上安装Redis的简单步骤:步骤1:下载Redis首先,从Redis官方网站下载最新版本的Redis。你可以在 https://redis.io/download 页面找到下载链接。步骤2:解压文件在Linux终端中,使用以下命令将下载的Redis压缩文件解压缩:tarxvzfredis-x.y.z.tar.gz(x.y.z是Redis的版......
  • 为什么使用int而不是字符串
    title:为什么使用int而不是字符串index_img:https://picss.sunbangyan.cn/2023/07/30/stdtw2.jpgtags:-JavaSE-字符串categories:-JavaSEhide:falseexcerpt:int、字符串效率更高整数数据类型在计算机中的存储和处理效率更高整数是基本的数值类型,......
  • vue 项目改为微应用后,原本的项目地址打不开为什么?
    当将Vue项目改为微应用之后,需要进行一些配置才能正常运行。首先,确保微应用项目的依赖中已经添加了qiankun,并在主应用的main.js中进行了相关配置。可以参考qiankun官方文档来配置主应用。在进行部署时,需要注意以下几点:跨域配置:微应用可能会存在跨域请求的问题。在部署时,需确保主应用......
  • 为什么el-table-column的type属性不能动态变化?
    在ElementUI中,`el-table-column`组件的`type`属性无法动态变化,而`el-button`组件的`disabled`属性可以动态变化,这是因为这两个属性在实现上有所不同,涉及到了Vue组件的属性绑定方式和属性的响应性。`el-table-column`组件的`type`属性是静态属性,是在组件初始化阶段就确定的,无法通......
  • 你为什么总招不到对的人?
    办公室里,技术面试官Arron和HR正对近期的招聘失误进行争执——新招的技术岗试用了几个月,就因能力不足离开了。HR不断吐槽岗位画像太模糊,Arron反问:“不是给了你关键词吗?”HR气不打一处来:“你要招Java后端,说要熟练使用Java语言,你给我翻译翻译,到底什么叫熟练?熟练的标准是什......
  • Redis五大基本数据类型之Hash哈希(转载)
    一、概述Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便: Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD: Hash类型的常见命令HSETkeyfieldvalue:......
  • MyBatis 的 # 传参,是参数化查询,那参数化查询到底为什么可以防止sql注入?
    对于MyBatis的#传参,虽然最终的SQL查询语句中会将参数值替换到对应的位置,但是这个过程并不是简单的字符串拼接,而是通过预编译的方式进行处理。这样做有以下几个方面的好处,从而减少了SQL注入的风险:参数值转义:在参数化查询中,MyBatis会自动对参数值进行转义处理。这样可以......
  • Redis缓存整合 考虑的一些方面(2)
    当与Redis缓存整合时,还可以考虑以下一些方面:缓存击穿处理:当某个热点数据的缓存过期或在缓存中不存在时,可能会导致大量的请求直接访问数据库,造成数据库压力过大。为了解决这个问题,可以使用互斥锁(如Redis的分布式锁)来控制只有一个请求去加载缓存数据,其他请求等待加载完成。缓存雪崩......