Redis原理及应用|青训营笔记

94 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第17天

Redis 是完全开源免费的,遵守 BSD 协议,是一个灵活的高性能 key-value 数据结构存储,可以用来作为数据库、缓存和消息队列。

Redis 比其他 key-value 缓存产品有以下三个特点:

Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载到内存使用。 Redis 不仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。 Redis 支持主从复制,即 master-slave 模式的数据备份。

高性能: Redis 将所有数据集存储在内存中,可以在入门级 Linux 机器中每秒写(SET)11 万次,读(GET)8.1 万次。Redis 支持 Pipelining 命令,可一次发送多条命令来提高吞吐率,减少通信延迟。

持久化: 当所有数据都存在于内存中时,可以根据自上次保存以来经过的时间和/或更新次数,使用灵活的策略将更改异步保存在磁盘上。Redis 支持仅附加文件(AOF)持久化模式。

数据结构: Redis 支持各种类型的数据结构,例如字符串、散列、集合、列表、带有范围查询的有序集、位图、超级日志和带有半径查询的地理空间索引。

原子操作:处理不同数据类型的 Redis 操作是原子操作,因此可以安全地 SET 或 INCR 键,添加和删除集合中的元素等。

支持的语言: Redis 支持许多语言,如 C、C++、Erlang、Go、Haskell、Java、JavaScript(Node.js)、Lua、Objective-C、Perl、PHP、Python、R、Ruby、Rust、Scala、Smalltalk 等。

主/从复制: Redis 遵循非常简单快速的主/从复制。配置文件中只需要一行来设置它,而 Slave 在 Amazon EC2 实例上完成 10 MM key 集的初始同步只需要 21 秒。

分片: Redis 支持分片。与其他键值存储一样,跨多个 Redis 实例分发数据集非常容易。

可移植: Redis 是用 C 编写的,适用于大多数 POSIX 系统,如 Linux、BSD、Mac OS X、Solaris 等。

Redis 有着更为复杂的数据结构并且提供对它们的原子性操作,这是一个不同于其他数据库的进化路径。

Redis 的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样 Redis 可以做很多内部复杂性很强的事情。同时,因 RDB 和 AOF 两种磁盘持久化方式是不适合随机访问,因为它们是顺序写入的。

数据分冷热,热数据是访问次数高,热数据放内存、Redis持久性不丢失, image.png

基本工作原理 数据从内存中读写 数据保存到硬盘上防止重启数据丢失 增量数据保存到AOF文件 全量数据RDB文件 单线程处理所有操作命令顺序执行

image.png

应用场景 连续签到:key-value过期、原有加一 存储计数、Session
String数据结构 sds 可以存储字符串、数字、二进制 image.png

消息通知、lish作为消息队列 Quicklist 由双向链表和listpack实现

image.png

image.png image.png

计数 一个用户有多个计数需求,通过hash结构存储

image.png

排行榜 积分变化 排名要实时更新 结合dict后,可实现通过key操作跳表

image.png

image.png

限流 限制一秒内放行请求,超过就禁止访问,incr()函数

image.png

分布式锁 并发场景,要求一次只能有一个协程执行,执行完成后,其他等待中的协程才能执行,可以使用redis的sernx实现,利用了两个特性 redis是单线程执行命令,setnx只有未设置过才能执行成功

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

Redis 简介

【后端专场 学习资料七】第五届字节跳动青训营 - 掘金 (juejin.cn)