什么是 Redis
Redis(Remote Dictionary Server)是一个开源的、基于内存的 key-value 数据库,属于 NoSQL 家族中的一员。它通常被用作缓存、消息队列或简单的数据存储,因为数据主要放在内存中,读写速度非常快,官方给出的性能数据可以达到每秒十万级别的读写操作。
与传统的关系型数据库(如 MySQL)不同,Redis 不使用表格和 SQL,而是用简单的 key-value 形式组织数据,同时也牺牲了一部分复杂查询能力,换取极致的性能。
NoSQL 是什么
NoSQL 泛指非关系型数据库,常见的分类有:
- 键值型(key-value):如 Redis、Memcached
- 文档型:如 MongoDB
- 列式存储:如 HBase
- 图形数据库:如 Neo4j
NoSQL 的特点是结构灵活、扩展方便、对海量数据和高并发场景友好,但一般不保证严格的 ACID 事务。Redis 是其中键值型数据库的代表。
Redis 的核心特征
1. 基于内存,性能极高
数据主要存储在内存中,读写速度远超磁盘型数据库,非常适合做缓存层,挡在 MySQL 前面承受高并发请求。
2. 丰富的数据结构
Redis 不是简单的字符串存储,它提供了多种原生数据类型:
String:字符串,最基础类型,可存文本、数字甚至序列化对象Hash:哈希表,适合存对象属性List:列表,可做消息队列、最新动态Set:无序集合,支持交并差集运算,可用于标签、共同好友SortedSet(ZSet):带分数的有序集合,适合排行榜
3. 支持持久化
虽然是内存数据库,但 Redis 支持把数据落盘,防止断电丢失:
RDB:定期生成内存快照,文件小、恢复快AOF:记录每条写命令,数据更完整但文件较大
两者可以搭配使用。
4. 支持过期时间
每个 key 都可以设置 TTL,到期自动删除,这是实现验证码、分布式锁、缓存自动失效的基础。这也是实际开发中高频使用的特性,对应标签里的过期时间。
5. 单线程处理命令(旧版本)
Redis 的命令执行采用单线程模型,避免了锁竞争,配合 IO 多路复用(epoll)实现了高并发。6.0 之后引入多线程处理网络 IO,但命令执行仍是单线程,保证了操作的原子性。
6. 其他特性
- 支持
publish/subscribe发布订阅模式 - 支持事务(MULTI/EXEC,但不支持回滚)
- 支持 Lua 脚本
- 支持 Redis Cluster 集群与主从、哨兵等高可用方案
Redis 的典型应用场景
- 缓存:最常见用法,减轻数据库压力
- 分布式锁:利用
SET NX EX命令 - 排行榜:用
SortedSet按分数排序 - 计数器:利用
String的自增INCR - 会话共享:集群环境下把 session 存到 Redis
小结
Redis 的关键词可以概括为:内存存储、key-value、数据结构丰富、高性能、支持持久化与过期时间。下一篇笔记会记录 Redis 在 Linux 上的安装与 redis-cli 的基本使用。