与君远相知,不道云海深-邂逅Redis

目录

一、Redis是什么

二、Redis之父

三、谁在用

四、Redis特性

4.1 速度贼快

4.2 可持久化

4.3 丰富数据结构

4.4 丰富运用场景

4.5 高可用/分布式

4.6 多语言支持

五、Redis优缺点

六、小结-全景图

6.1 传统使用

6.2 两维度,三主线

6.3 Redis 全景


一、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>纯内存读写

存储类型每秒读写次数随机读写延迟访问带宽
内存千万级80ns5GB
SSD盘350000.1~0.2ms100~300MB
机械盘100左右10ms100MB左右

从读写次数与读写延迟可以看出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张图,总结一下本篇内容

6.1 传统使用

6.2 两维度,三主线

6.3 Redis 全景

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪飞yes

我对钱没兴趣~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值