当前位置:网站首页>Redis是什么?简述它的优缺点
Redis是什么?简述它的优缺点
2022-07-25 21:50:00 【华为云】
Redis是什么?简述它的优缺点?
Redis本质上是一个Key-Value类型的内存数据库,很像Memcached,整个数据库加载在内存当中操作,定期通过异步操作把数据库中的数据flush到硬盘上进行保存。
因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value 数据库。
优点:
读写性能极高, Redis能读的速度是110000次/s,写的速度是81000次/s。
支持数据持久化,支持AOF和RDB两种持久化方式。
支持事务, Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
数据结构丰富,除了支持string类型的value外,还支持hash、set、zset、list等数据结构。
支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等特性。
缺点:
数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
Redis为什么这么快?
内存存储:Redis是使用内存(in-memeroy)存储,没有磁盘IO上的开销。数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是O(1)。
单线程实现( Redisv6.0以前):Redis使用单个线程处理请求,避免了多个线程之间线程切换和锁资源争用的开销。注意:单线程是指的是在核心网络模型中,网络请求模块使用一个线程来处理,即一个线程处理所有网络请求。
非阻塞IO:Redis使用多路复用IO技术,将epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间。
优化的数据结构:Redis有诸多可以直接应用的优化数据结构的实现,应用层可以直接使用原生的数据结构提升性能。
使用底层模型不同:Redis直接自己构建了 VM (虚拟内存)机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
Redis的VM(虚拟内存)机制就是暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。通过VM功能可以实现冷热数据分离,使热数据仍在内存中、冷数据保存到磁盘。这样就可以避免因为内存不足而造成访问速度下降的问题。
Redis提高数据库容量的办法有两种:一种是可以将数据分割到多个RedisServer上;另一种是使用虚拟内存把那些不经常访问的数据交换到磁盘上。需要特别注意的是Redis并没有使用OS提供的Swap,而是自己实现。
Redis相比Memcachd有哪些优势?
数据类型:Memcached所有的值均是简单的字符串,Redis支持更为丰富的数据类型,支持string(字符串),list(列表),Set(集合)、Sorted Set(有序集合)、Hash(哈希)等。
持久化:Redis支持数据落地持久化存储,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 memcache不支持数据持久存储 。
集群模式:Redis提供主从同步机制,以及 Cluster集群部署能力,能够提供高可用服务。Memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据
性能对比:Redis的速度比Memcached快很多。
网络IO模型:Redis使用单线程的多路 IO 复用模型,Memcached使用多线程的非阻塞IO模式。
Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。
这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
边栏推荐
- c sqlite ... ...
- How to configure and use rocksdb in the flinksql environment
- PHP zero time task, PHP laravel time task schedule [dry goods]
- Face and key point detection: yolo5face practice
- Detailed explanation of several ideas for implementing timed tasks in PHP
- MPI学习笔记(二):矩阵相乘的两种实现方法
- Redis configuration
- C#Socket
- Is there any document for synchronizing from Oracle to ODPs?
- 性能调试 -- Chrome Performance
猜你喜欢

FAW red flag "King fried" is listed, which is safe and comfortable

Pyqt5 use pyqtgraph to draw multiple y-value scatter plots

【Redis底层解析】字符串类型

【Redis底层解析】链表类型

少儿编程 电子学会图形化编程等级考试Scratch一级真题解析(判断题)2022年6月

ORIGYN基金会正式启动$OGY Staking,引领新一轮生态利好

Zero basic learning canoe panel (17) -- panel CAPL function
![[MAIXPY]kpu: load error:2005, ERR_READ_FILE: read file failed问题解决](/img/0b/da67b5a361a2cdfaf81568d34cf5f7.png)
[MAIXPY]kpu: load error:2005, ERR_READ_FILE: read file failed问题解决

【Flink】FLink RocksDBListState 报错 You cannot add null to a ListState

C#Socket
随机推荐
Fastjson deserialization vulnerability utilization analysis collection
Optimization analysis of storage structure and IO performance of openharmony littlefs file system
sql语句练习题整理
Redis usage details
I/O案例实操
Unity Metaverse(二)、Mixamo & Animator 混合树与动画融合
Isn't it too much to play Gobang in idea?
PE格式: 分析IatHook并实现
Dovecot set mailbox quota
How to use RS485 half duplex chip correctly
Web3 entrepreneurship has all the elements of explosive growth of innovation
QT | learn about QT creator by creating a simple project
2 lines of code to generate a solid desktop background
Simple use of protobuf
人脸与关键点检测:YOLO5Face实战
[manageengine]itsm application in retail industry
Origen foundation officially launched $ogy stacking, leading a new round of ecological benefits
Special class design
919. Complete binary tree inserter: simple BFS application problem
Face and key point detection: yolo5face practice