当前位置:网站首页>为什么Redis很快
为什么Redis很快
2022-08-10 10:44:00 【棒棒吃不胖】
与主流的关系型数据库MySQL相比,Redis的读写效率要高出很多,有下图的几个原因。
一.基于内存实现
众所周知,内存读写速度要远高于磁盘读写,Redis是基于内存实现存储的数据库,相较于磁盘存储的MySQL,省去了IO磁盘消耗,提高系统性能。
二.高效的数据结构
三.合理的数据编码
String:如果存储数字的话,是用int类型的编码;如果存储非数字,小于等于39字节的字符串,是embstr;大于39个字节,则是raw编码。
List:如果列表的元素个数小于512个,列表每个元素的值都小于64字节(默认),使用ziplist编码,否则使用linkedlist编码
Hash:哈希类型元素个数小于512个,所有值小于64字节的话,使用ziplist编码,否则使用hashtable编码。
Set:如果集合中的元素都是整数且元素个数小于512个,使用intset编码,否则使用hashtable编码。
Zset:当有序集合的元素个数小于128个,每个元素的值小于64字节时,使用ziplist编码,否则使用skiplist(跳跃表)编码
四.合理的线程模型
1)单线程模型:避免了上下文切换
Redis是单线程的,其实是指Redis的网络IO和键值对读写是由一个线程来完成的。但Redis的其他功能,比如持久化、异步删除、集群数据同步等等,实际是由额外的线程执行的。
Redis的单线程模型,避免了CPU不必要的上下文切换和竞争锁的消耗。也正因为是单线程,如果某个命令执行过长(如hgetall命令),会造成阻塞。Redis是面向快速执行场景的内存数据库,所以要慎用如lrange和smembers、hgetall等命令。
2)I/O 多路复用
I/O :网络 I/O
多路 :多个网络连接
复用:复用同一个线程。
IO多路复用其实就是一种同步IO模型,它实现了一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;而没有文件句柄就绪时,就会阻塞应用程序,交出cpu。
五.虚拟内存机制
暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。通过VM功能可以实现冷热数据分离,使热数据仍在内存中、冷数据保存到磁盘。这样就可以避免因为内存不足而造成访问速度下降的问题。
参考文章:
Redis为什么这么快?
边栏推荐
- 网络文化经营许可证
- HCIP ---- VLAN
- Some tips for using Unsafe
- runtime-core.esm-bundler.js?d2dd:218 Uncaught TypeError: formRef.value?.validate is not a function
- Kyligence 通过 SOC 2 Type II 审计,以可信赖的企业级产品服务全球客户
- OneFlow源码解析:算子指令在虚拟机中的执行
- runtime-core.esm-bundler.js?d2dd:218 Uncaught TypeError: formRef.value?.validate is not a function
- POJ 1026 Cipher (Permutation Groups)
- TCP/IP笔记
- Open Office XML 格式里如何描述多段具有不同字体设置的段落
猜你喜欢
STM32封装ESP8266一键配置函数:实现实现AP模式和STA模式切换、服务器与客户端创建
3D rotating text animation js special effects
runtime-core.esm-bundler.js?d2dd:218 Uncaught TypeError: formRef.value?.validate is not a function
Text selection rounded style border-radius
Dry goods!ASSANet: Making PointNet++ faster and stronger
Dialogue with Chen Ciliang: Nezha wants to popularize high-end products
动作捕捉系统用于室内组合定位技术研究
[Azure Cloud] What is the difference between a service endpoint and a private link?point of view (1)
【勇敢饭饭,不怕刷题之链表】链表中有环的问题
什么是抽象类
随机推荐
Codeforces 814 C. An impassioned circulation of affection (dp)
runtime-core.esm-bundler.js?d2dd:218 Uncaught TypeError: formRef.value?.validate is not a function
Regarding the missing json converter, the error message is: No converter found for return value of type
database constraints
Gartner reiterates the important value of 'data weaving'
YTU 2894: G--我要去内蒙古大草原
Situation丨The intrusion of hackers intensifies, and the shooting range sets up a "defense shield" for network security
【电商运营】你真的了解社交媒体营销(SMM)吗?
js对象转FormData对象(一般用于上传)
[Azure Cloud] What is the difference between a service endpoint and a private link?point of view (1)
组合模式:Swift 实现
《MySQL高级篇》六、索引的创建与设计原则
Break through the dimensional barriers and let the dolls around you move on the screen!
自动化测试及Selenium
用proteus直接仿真stm32-可以完全丢弃编程器
what is rtems
企业如何判断数据治理是否成功?
Kyligence 通过 SOC 2 Type II 审计,以可信赖的企业级产品服务全球客户
HDU 1520 Anniversary party (树型dp)
【Azure云】服务端点和私有链接有什么区别?观点(1)