当前位置:网站首页>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会是不错的选择。
边栏推荐
- 分享|智慧消防应急管理平台解决方案(附PDF)
- 【饭谈】测试平台为什么有组件化?模块化?很多看不到的地方设计的很好是种浪费么?
- MPI learning notes (II): two implementation methods of matrix multiplication
- Unity metaverse (II), mixamo & animator hybrid tree and animation fusion
- 2022-07-18: what is the output of the following go language code? A:Groutine; B:Main; C:Goroutine; D:GoroutineMain。 package m
- 【饭谈】Web3.0到来后,测试人员该何去何从?(十条预言和建议)
- 函数栈帧的创建和销毁
- 919. 完全二叉树插入器 : 简单 BFS 运用题
- [MAIXPY]kpu: load error:2005, ERR_ READ_ File: read file failed problem solving
- 2022最新软件测试八股文,能不能拿心仪Offer就看你背得怎样了
猜你喜欢

GPON介绍及华为OLT网关注册配置流程

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

8000 word super detailed custom structure type

动画曲线天天用,你能自己整一个吗?看完这篇你就会了!
![[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问题解决
![[leetcode ladder] linked list · 021 merge two ordered linked lists](/img/72/d3e46a820796a48b458cd2d0a18f8f.png)
[leetcode ladder] linked list · 021 merge two ordered linked lists

如何用 Redis 实现分布式锁的?

ansible+Crontab批部署巡检

【leetcode天梯】链表 · 021 合并两个有序链表

【leetcode天梯】链表 · 876 查找链表中间结点
随机推荐
【Redis底层解析】字符串类型
Face and key point detection: yolo5face practice
动画曲线天天用,你能自己整一个吗?看完这篇你就会了!
2022 latest examination questions and answers of eight members (standard staff) of Shanghai Architecture
【面试:并发篇25:多线程:volatile】可见性
Create files, file permissions, ownership, and sticky bits
QT | learn about QT creator by creating a simple project
I'm also drunk. Eureka delayed registration and this pit!
Babbitt | metauniverse daily must read: the popularity of virtual people has decreased, and some "debut is the peak", and the onlookers have dispersed
狗粮的成分
Special class design
In Oracle 19C version, logminer package continuous_ The outdated function of mine leads to CDC failure
PE format: analyze and implement IATHOOK
Interviewer of large factory: how to quickly query a table with tens of millions of data?
C#程序设计的6大原则
H5 realize the animation effect of a scratch card
Lichuang EDA -- creation of devices 01 resistance (II)
Tesseract OCR初探
Shopify sellers: share some tips for social media marketing!
Detailed explanation of JVM memory model and structure (five model diagrams)