Redis 服务器是一个事件驱动程序,服务器需要处理两类事件:
文件事件(file event)- Redis 服务器通过套接字(Socket)与客户端或者其它服务器进行通信,文件事件就是对套接字操作的抽象。服务器与客户端(或其他的服务器)的通信会产生文件事件,而服务器通过监听并处理这些事件来完成一系列网络通信操作。时间事件(time event)- Redis 服务器有一些操作需要在给定的时间点执行,时间事件是对这类定时操作的抽象。关键词:
文件事件、时间事件
- Java213
- 数据库115
- 分布式83
- 设计80
- 框架74
- JavaCore65
- Spring63
- 笔记52
- 工具50
- 大数据32
- 分布式通信30
- 设计模式28
- Spring核心24
- 架构23
- 搜索引擎数据库22
- DevOps21
- KV数据库21
- 关系型数据库21
- 软件20
- 网络19
- Redis19
- MQ18
- 算法17
- 分布式协同16
- Elasticsearch16
- 操作系统15
- 列式数据库15
- 分布式理论15
- MySQL15
- 综合14
- 面试13
- 基础特性13
- HBase13
- 编程12
- 文档数据库12
- Linux11
- IO11
- 并发11
- MongoDB11
- Spring数据10
- Kafka10
- 中间件9
- Flink9
- Hive9
- JVM9
- 其他9
- 安全9
- 构建9
- 工作8
- 服务器8
- 编程语言8
- 解决方案8
- 分布式存储8
- SpringWeb8
- 重构7
- 分布式调度7
- 容器7
- 高级特性7
- ZooKeeper7
- Maven7
- JavaWeb6
- 网络分层6
- 网络协议6
- 分布式治理6
- Tomcat6
- 监控诊断6
- Python6
- Nginx6
- Hadoop5
- 测试5
- 缓存5
- 微服务5
- Docker5
- Elastic5
- RPC5
- UML4
- 数据库综合4
- 网络技术4
- 术4
- 模板引擎4
- ORM4
- IDE4
- SpringIO4
- Spring其他4
- Spring综合4
- Spring集成4
- RocketMQ4
- 软件工程3
- 编程范式3
- 数据库中间件3
- Kubernetes3
- Git3
- JavaBean2
- 流量控制2
- 人工智能1
- 器1
- 法1
- Spring安全1
关键词:
Pipeline
Pipeline 简介
Redis 是一种基于 C/S 模型以及请求/响应协议的 TCP 服务。通常情况下,一个 Redis 命令的请求、响应遵循以下步骤:
- 客户端向服务端发送一个查询请求,并监听 Socket 返回(通常是以阻塞模式,等待服务端响应)。
- 服务端处理命令,并将结果返回给客户端。
显然,如果每个 Redis 命令都发起一次请求、响应,会很低效。因此,Redis 客户端提供了一种批量处理技术,即
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。
Redis 有两种发布订阅模式
- 基于频道(Channel)的发布订阅
- 基于模式(Pattern)的发布订阅
关键词:
订阅、SUBSCRIBE、PSUBSCRIBE、PUBLISH、观察者模式

关键词:
定时删除、惰性删除、定期删除、LRU、LFU
Redis 过期删除
Redis 可以为每个键设置过期时间,当键过期时,会自动删除该键。
设置键的生存时间或过期时间
Redis 中,和键的生存时间相关的命令如下所示:
| 命令 | 描述 |
|---|---|
EXPIRE |
设置 key 的过期时间,单位为秒 |
PEXPIRE |
设置 key 的过期时间,单位为毫秒 |
EXPIREAT |
设置 key 的过期时间为指定的秒级时间戳 |
PEXPIREAT |
设置 key 的过期时间为指定的毫秒级时间戳 |
TTL |
返回 key 的剩余生存时间,单位为秒 |
PTTL |
返回 key 的剩余生存时间,单位为毫秒 |
PERSIST |
移除 key 的过期时间,key 将持久保持 |

关键词:
对象、SDS、链表、字典、跳表、整数集合、压缩列表
SDS
SDS 简介
SDS 是 Simple Dynamic String 的缩写,即简单动态字符串。Redis 为 SDS 做了一些优化,以替代 C 字符串来表示字符串内容。此外,SDS 还被 Redis 用作缓冲区(buffer),如:AOF 模块中的 AOF 缓冲区;客户端状态中的输入缓冲区。

Redis 简介
【简单】什么是 Redis?
什么是 Redis?
Redis 是一个开源的、数据存于内存中的 K-V 数据库。由于,Redis 的读写操作都是在内存中完成,因此其读写速度非常快。
- 高性能 - 由于,Redis 的读写操作都是在内存中完成,因此性能极高。
- 高并发 - Redis 单机 QPS 能达到 10w+,将近是 Mysql 的 10 倍。

缓存
【中等】如何避免缓存雪崩、缓存击穿、缓存穿透?
- 缓存击穿:指某个热点数据在缓存中失效,导致大量请求直接访问数据库。此时,由于瞬间的高并发,可能导致数据库崩溃。
- 加锁:使用互斥锁,确保同一时间只有一个请求可以去数据库查询并更新缓存。
- 永久缓存:热点数据永不过期。
- 缓存穿透:指查询一个不存在的数据,缓存中没有相应的记录,每次请求都会去数据库查询,造成数据库负担加重。
- 布隆过滤器:使用布隆过滤器,过滤掉不存在的请求,避免直接访问数据库。
- 缓存空值:对查询结果进行缓存,即使是不存在的数据,也可以缓存一个标识,以减少对数据库的请求。

- 缓存雪崩:指多个缓存数据在同一时间过期,导致大量请求同时访问数据库,从而造成数据库瞬间负载激增。
- 随机过期时间:采用随机过期时间策略,避免多个数据同时过期。
- 多级缓存:使用双缓存策略,将数据同时存储在两层缓存中,减少数据库直接请求。

Redis 数据类型
【简单】Redis 支持哪些数据类型?
- Redis 支持五种基本数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合)。
- 随着 Redis 版本升级,又陆续支持以下数据类型: BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增)。


Redis 2.8 版本,新增了哨兵模式,以支持“自动故障转移”,它是 Redis 的 HA 方案。
Redis 哨兵模式由一个或多个 Sentinel 实例组成 Sentinel 集群,可以监控任意多个主服务器,以及这些主服务器的所有从服务器;并在被监视的主服务器进入下线状态时,自动将下线主服务器的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。
关键词:
高可用、监控、选主、故障转移、Raft

在 Redis 中,可以通过执行
SLAVEOF命令或设置slaveof选项,让一个服务器去复制(replicate)另一个服务器,其中,后者叫主服务器(master),前者叫从服务器(slave)。Redis 2.8 以前的复制不能高效处理断线后重复制的情况,而 Redis 2.8 新添的部分重同步可以解决这个问题。
关键词:
SLAVEOF、SYNC、PSYNC、命令传播、心跳