当前位置:网站首页>为什么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为什么这么快?
边栏推荐
猜你喜欢
chart.js水平柱状图插件
技能大赛训练题:组策略一
"Chief Engineer" Principal (Principal) engineer's way of training
OneFlow source code parsing: operator instructions executed in a virtual machine
谷歌数据中心发生“电力事故”造成 3 人受伤
Redis6 (1) - Introduction to NoSQL Database and Installation of Redis
GPU加速Pinterest推荐模型,参数量增加100倍,用户活跃度提高16%
内存问题难定位,那是因为你没用ASAN
OneFlow源码解析:算子指令在虚拟机中的执行
金九银十跳槽旺季:阿里、百度、京东、美团等技术面试题及答案
随机推荐
Weilai-software development engineer side record
OneFlow源码解析:算子指令在虚拟机中的执行
Codeforces 814 C. An impassioned circulation of affection (dp)
面试官:项目中 Dao、Service、Controller、Util、Model 怎么划分的?
Mobile and PC compatible loading and toast message plugins
GPU加速Pinterest推荐模型,参数量增加100倍,用户活跃度提高16%
[Microservice Architecture] Microservices and SOA Architecture (2)
ECCV 2022 | 视频理解新框架X-CLIP:仅用微调的成本,达到预训练的全能
Redis6 (1) - Introduction to NoSQL Database and Installation of Redis
chart.js水平柱状图插件
database constraints
Redis (six) - transaction and lock mechanism of Redis6 (unfinished, to be supplemented)
Mount [shell][mount -o loop]
谷歌数据中心发生“电力事故”造成 3 人受伤
"Scalability" extensibility best practices: lessons from eBay
Pycharm终端出现PS问题、conda或activate不是内部命令问题..
Chapter 22 Source Code File REST API Reference (4)
程序员追求技术夯实基础学习路线建议
HCIP ---- VLAN
POJ 1026 Cipher (置换群)