目录
一、Redis是什么
Redis:REmote Dictionary Server(远程字典服务器)
翻译:
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
梳理一遍
- Redis是NoSQL数据库
- Redis是一个开源的key-value存储系统。
- Redis定位是缓存, 目的为提高数据读写效率
- Redis支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。
- Redis为单线程操作,每个操作都是原子操作,没有并发相关问题
- Redis支持数据持久化,会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
- Redis支持横向与纵向拓展,直接多种集群部署模式。
二、Redis之父
Redis之父Salvatore Sanfilippo(安特雷兹),一名意大利程序员,大家更习惯称呼他Antirez ,没错就是这位帅哥。
他Github地址:antirez (Salvatore Sanfilippo) · GitHub 恶意微观
个人博客:List of posts - <antirez>
三、谁在用
国内外能叫得出名字大小厂,没有不用的。
四、Redis特性
4.1 速度贼快
官方bench-mark数据:测试完成了50个并发执行100000个请求。设置和获取的值为一个256字节字符串。结果:Redis能读的速度是11w次/s,写的速度是81000次/s。
Redis的高性能读写得益于3点:
1>纯内存读写
存储类型 | 每秒读写次数 | 随机读写延迟 | 访问带宽 |
---|---|---|---|
内存 | 千万级 | 80ns | 5GB |
SSD盘 | 35000 | 0.1~0.2ms | 100~300MB |
机械盘 | 100左右 | 10ms | 100MB左右 |
从读写次数与读写延迟可以看出IO操作与内存操作存在很大的量差。
w级对千w 毫秒对纳秒
2>高效的编程语言
Redis底层是使用的ANSI C语言编写的,C语言离操作系统较近的语言,执行效率算顶尖的。同时redis编码水准也算业内顶尖的,性能自然没得说。
3>单线程操作
Redis的快跟Redis工作机制有关。
Redis6之前是单线程操作的,Redis6之后,使用的多线程操作,但其核心逻辑执行部分还是使用单线程方式执行,所以Redis本质还是单线程操作。而单线程操作带好处也是显著的:1:避免的线程间来回切换,减少了线程上下文切换,处理速度自然上来了。 2:单线程保证Reids任意命令操作都是原子性的,避免加锁性能开销。
那Redis怎么做到单线程高性能读写呢?
Redis工作设计模式:I/O多路复用 + 文件事件处理
Redis服务端与客户端通信采用epoll非阻塞式I/O多路复用机制(简单理解为线程轮询),开启一个线程重复检查多个客户端,当客户端发起read,write,wait事件时,线程将该事件注册到文件事件分派器中,并交给相应的事件处理器完成处理。此过程因为都是单线程同步操作,特别是最后的事件处理上,所有认为redis是单线程的。
总结:Redis使用高效的C语言开发,并让所有操作都在内存中完成,再加上采用文件事件处理器+多路io复用单线程工作模式,这组合让Redis能实现高性能的网络通信。
4.2 可持久化
前面说了,Redis数据操作是内存级别的,所有数据缓存在内存中。但是为了防止因为不可抗拒原因到倒置Redis宕机,Redis提供2种持久化策略:RDB模式与AOF模式
RDB模式与AOF模式都是将Redis内存数据通过某种手动持久化到硬盘中一定程度上保证Redis数据尽可能少丢失。
具体RDB模式与AOF模式,后续章节再展开讲。
4.3 丰富数据结构
Redis支持的数据结构:
常用的:strIng, hashe,list, set, sorted set
高级点:bitmap, hyperloglog,geospatial index, stream
丰富的数据结构让Redis能适应大部分常规需求开发。
4.4 丰富运用场景
简单KV缓存:热点排行,播放量统计等
发布订阅:粉丝订阅,公共提醒等
事务处理:批量命令处理
Lua脚本编程:分布式锁
pipeline:大量命令执行
比如:热搜
比如:各类统计
比如:各类app基本都有
4.5 高可用/分布式
主从复制

哨兵模式
分片集群
4.6 多语言支持
基本上市面常见的编程语言Redis都提供客户端支持。
五、Redis优缺点
优点: Redis能读的速度是110000次/秒,写的速度是81000次/秒
Redis数据类型丰富,不仅支持简单的key-value对,同时还提供list,set,zset,hash等数据结构的存储
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
Redis支持数据的备份,即master-slave模式的数据备份
缺点: Redis(ACID处理非常简单) ,无法像关系型数据库一样进行事务处理 无法做太复杂的关系数据库模型
六、小结-全景图
到这,本篇就结束啦,用3张图,总结一下本篇内容