一、Redis 是什么?
Redis (Re mote Di ctionary S erver)是一个开源的、基于内存的键值存储系统 。它通常被用作数据库 、缓存 、消息中间件 和流引擎。
核心特点:
-
基于内存 :数据主要存储在内存中,读写速度极快(可达 10万+次/秒)。同时也支持持久化,可以将内存数据异步保存到磁盘,防止数据丢失。
-
键值存储:使用简单的 key-value 形式存储数据,但 Value 不仅仅是字符串,还支持丰富的数据结构。
-
单线程:核心网络模型是单线程的(新版本引入了多线程处理网络 I/O 等,但核心命令执行仍是单线程),避免了多线程的上下文切换和竞争条件,保证了原子性操作,非常简单高效。
-
持久化:提供 RDB(快照)和 AOF(追加日志)两种方式将数据持久化到硬盘。
-
高可用与分布式:通过 Redis Sentinel(哨兵)实现高可用,通过 Redis Cluster(集群)实现数据分片和分布式存储。
二、Redis 的常用数据结构
这是 Redis 最强大的地方。它不仅仅是简单的 String
缓存,其多样的数据结构解决了各种特定场景下的问题。
数据结构 | 存储的值 | 特性 | 常用命令 | 典型应用场景 |
---|---|---|---|---|
String(字符串) | 可以是字符串、整数、浮点数、二进制数据 | 最基本的数据类型,一个 key 对应一个 value | SET , GET , INCR , DECR , MSET , MGET |
缓存 、计数器 (文章阅读量、点赞)、分布式锁 |
Hash(哈希) | field-value 对的集合,适合存储对象 | 类似于 Java 中的 Map<String, String> |
HSET , HGET , HGETALL , HMSET , HINCRBY |
存储对象信息(用户信息、商品信息),可单独修改某个字段 |
List(列表) | 一个有序的字符串列表,按插入顺序排序 | 双向链表,两端操作性能高,中间操作性能低 | LPUSH , RPUSH , LPOP , RPOP , LRANGE |
消息队列 、最新列表 (最新文章、朋友圈时间线)、排行榜 |
Set(集合) | 无序的、不重复的字符串集合 | 提供交集、并集、差集等操作 |
三、为什么选择 Redis?
-
性能极高:内存访问速度远超磁盘。
-
数据结构丰富:如上所述,一招鲜吃遍天,各种场景都能找到合适的数据结构。
-
原子性:所有操作都是原子性的,无需担心并发问题。
-
多功能性:不仅是缓存,还能做消息队列、分布式锁、排行榜等。