1. Redis 介绍
Redis(Remote Dictionary Server)是一个 基于内存的高性能 Key-Value 存储数据库,它的特点包括:
-
高性能:所有数据存储在内存中,读写速度极快(百万级 QPS)。
-
支持多种数据结构:字符串、哈希、列表、集合、有序集合等。
-
持久化:支持 RDB(快照)、AOF(日志)持久化方案。
-
支持分布式:可用作 缓存、消息队列、分布式锁、Session 共享 等。
2. Redis 安装与启动
(1)Windows 安装(WSL2 环境)
sudo apt update
sudo apt install redis
启动 Redis:
redis-server
验证 Redis 是否运行:
redis-cli ping # 返回 "PONG" 说明运行正常
(2)Linux/Mac 安装
# 下载并编译 Redis(适用于 Linux)
wget http://download.redis.io/redis-stable.tar.gz
tar xzf redis-stable.tar.gz
cd redis-stable
make
启动 Redis:
src/redis-server
连接 Redis:
src/redis-cli
3. Redis 基本命令
Redis 是 Key-Value 数据库,所有数据都存储为键值对。
(1)键(Key)操作
SET name "Alice" # 设置键值
GET name # 获取键值
DEL name # 删除键
EXISTS name # 检查键是否存在
EXPIRE name 60 # 设置 60 秒过期时间
TTL name # 查看剩余存活时间(Time To Live)
4. Redis 数据结构
Redis 提供多种数据结构,分别适用于不同业务场景。
(1)字符串(String)
适用于 缓存、计数器。
SET counter 100 # 设置初始值
INCR counter # 自增(+1)
DECR counter # 自减(-1)
INCRBY counter 5 # 增加 5
应用场景:
-
计数(网站访问量)
-
用户会话(Session)
-
短链生成(短网址)
(2)哈希(Hash)
适用于存储 对象(用户信息、订单)。
HSET user:1001 name "Tom"
HGET user:1001 name
HGETALL user:1001 # 获取所有字段
HDEL user:1001 name # 删除字段
应用场景:
-
存储用户信息
-
存储商品信息
(3)列表(List)
适用于 队列、消息队列、社交动态。
LPUSH queue "task1"
RPUSH queue "task2"
LPOP queue # 从左侧取出
RPOP queue # 从右侧取出
LRANGE queue 0 -1 # 获取全部元素
应用场景:
-
任务队列(异步任务)
-
消息队列(MQ)
-
评论列表(社交)
(4)集合(Set)
适用于 去重、好友推荐。
SADD fruits "apple" "banana" "orange"
SMEMBERS fruits # 获取所有元素
SISMEMBER fruits "apple" # 检查是否存在
SREM fruits "apple" # 删除元素
应用场景:
-
交集、并集、差集
-
黑名单(不重复)
-
标签系统
(5)有序集合(Sorted Set)
适用于 排行榜、积分。
ZADD scores 100 "Alice"
ZADD scores 200 "Bob"
ZRANGE scores 0 -1 WITHSCORES # 获取所有元素及分数
ZRANK scores "Alice" # 获取排名
应用场景:
-
排行榜(游戏、热点新闻)
-
计分系统(点赞、评论)
5. Redis 进阶功能
(1)事务
MULTI
SET key1 "value1"
SET key2 "value2"
EXEC # 执行事务
注意:
-
Redis 事务 不支持回滚,如果某条命令失败,其余仍然会执行。
(2)分布式锁
分布式系统需要防止 超卖、重复提交,Redis 可实现分布式锁:
SET lock "1" EX 10 NX # 设置锁,10秒自动释放(EX = 过期时间,NX = 只在不存在时设置)
应用场景:
-
防止超卖
-
分布式任务调度
(3)消息队列(Pub/Sub)
Redis 支持 发布/订阅 模式:
SUBSCRIBE mychannel # 订阅频道
PUBLISH mychannel "hello world" # 发布消息
应用场景:
-
消息通知
-
即时聊天
6. Redis Java 代码示例(Spring Boot)
(1)引入 Redis 依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
(2)Spring Boot 配置 Redis
spring:redis:host: localhostport: 6379timeout: 5000ms
(3)Redis 工具类
@Component
public class RedisUtil {@Autowiredprivate StringRedisTemplate redisTemplate;public void set(String key, String value) {redisTemplate.opsForValue().set(key, value);}public String get(String key) {return redisTemplate.opsForValue().get(key);}public void delete(String key) {redisTemplate.delete(key);}
}
(4)使用 Redis
@Autowired
private RedisUtil redisUtil;public void testRedis() {redisUtil.set("username", "Alice");String name = redisUtil.get("username");System.out.println(name); // 输出 "Alice"
}
7. Redis 适用场景
场景 | 适用 Redis 数据结构 | 说明 |
---|---|---|
缓存 | String / Hash | 低延迟缓存,减少数据库查询 |
排行榜 | Sorted Set | 游戏积分排行榜 |
分布式锁 | String (SET NX) | 防止超卖,秒杀系统 |
消息队列 | List / PubSub | 异步任务 |
社交推荐 | Set / Sorted Set | 关注、好友推荐 |
8. 总结
-
Redis 是 高性能 NoSQL 数据库,支持 五种核心数据结构。
-
适用于 缓存、排行榜、消息队列、分布式锁 等场景。
-
Spring Boot 集成 Redis 方便快捷,适用于 高并发分布式系统。