认识 NoSQL
NoSQL(Not Only SQL)是相对于传统关系型数据库而言的一种特殊数据库,常被称为非关系型数据库。它打破了传统 SQL 的限制,提供了更灵活的数据存储方案。
Redis 简介
Redis 自 2009 年问世以来,全称 Remote Dictionary Server(远程词典服务器),是一个基于内存的键值型 NoSQL 数据库,以高性能著称。
核心特性
- 键值结构:支持多种不同的 Value 数据结构,功能丰富。
- 单线程模型:每个命令具备原子性,避免了多线程竞争开销。
- 低延迟高速度:基于内存操作,配合 IO 多路复用机制,性能极佳。
- 数据持久化:支持将内存数据保存到磁盘,防止数据丢失。
- 集群支持:支持主从复制及分片集群,便于水平扩展。
- 多语言客户端:提供丰富的语言绑定,方便集成。
Redis 数据结构详解
Redis 本质上是 Key-Value 数据库,Key 通常是字符串,但 Value 的类型多种多样,每种结构都有其特定的应用场景。
通用命令
部分指令适用于多种数据类型,常用的包括:
KEYS pattern:查看符合模板的所有 Key。DEL key:删除指定的 Key。EXISTS key:判断 Key 是否存在。EXPIRE key seconds:为 Key 设置有效期,过期自动删除。TTL key:查看 Key 的剩余生存时间。
可以通过 help [command] 查看具体命令用法,例如在终端输入 help keys 即可获取帮助信息。
String(字符串)
这是 Redis 最基础的存储类型。虽然 Value 表现为字符串,但根据格式不同可分为三类:普通字符串、整数(支持自增自减)、浮点数(支持自增自减)。底层均采用字节数组存储,只是编码方式不同。单个字符串最大空间限制为 512MB。
Hash(散列)
Hash 类型的 Value 是一个无序字典,类似 Java 中的 HashMap。相比将对象序列化为 JSON 存储,Hash 允许直接操作对象的某个字段,无需反序列化整个对象,非常适合存储对象属性。
List(列表)
Redis 的 List 类似于 Java 的 LinkedList,底层是双向链表。
- 有序:元素有顺序之分。
- 可重复:允许相同元素存在。
- 高效插入删除:两端操作非常快。
- 查询一般:中间位置查询效率不如随机访问。 常用于存储评论列表、朋友圈点赞记录等有序数据。
Set(集合)
Set 结构与 Java 的 HashSet 类似,底层是 Hash 表。
- 无序:不保证元素顺序。
- 不可重复:自动去重。
- 查找快:基于 Hash 索引。
- 集合运算:支持交集、并集、差集等操作。
SortedSet(有序集合)
SortedSet 是可排序的集合,类似 Java 的 TreeSet,但底层实现更为复杂,采用跳表(SkipList)加 Hash 表。每个元素关联一个 score 属性,系统根据 score 对元素进行排序。
- 可排序:核心优势。


