一、Redis是什么?为什么它这么快?
Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统。它常被用作数据库、缓存和消息中间件。
Redis核心特性与高性能原因:
-
基于内存:数据主要存储在内存中,读写速度远超磁盘数据库。
-
单线程架构:避免了多线程的上下文切换和竞争条件,简化了设计。
-
高效的数据结构:Redis提供了字符串、哈希、列表、集合、有序集合等丰富的数据结构,直接内置在底层实现中。
-
I/O多路复用:使用epoll、kqueue等机制处理大量并发连接。
二、Redis安装与基本使用
1. 安装(以Linux为例)
wget http://download.redis.io/releases/redis-7.0.0.tar.gz
tar xzf redis-7.0.0.tar.gz
cd redis-7.0.0
make
src/redis-server # 启动服务器
src/redis-cli # 启动命令行客户端
2. 五大基础数据类型与命令
2. AOF(Append Only File)
3. 如何选择?
四、Spring Boot集成Redis实战
1.添加依赖 (pom.xml):
作为下一步,你可以深入学习Redis的事务、发布订阅、主从复制和集群模式,以应对更复杂的业务场景。
-
String(字符串):最简单的键值对。
SET username "zhangsan" # 设置值 GET username # 获取值 -> "zhangsan" INCR counter # 自增 -> 常用于计数Hash(哈希):适合存储对象。
HSET user:1000 name "lisi" age 30 # 设置字段 HGET user:1000 name # 获取字段 -> "lisi" HGETALL user:1000 # 获取所有字段 -> 1) "name" 2) "lisi" 3) "age" 4) "30"List(列表):有序、可重复的字符串列表。
LPUSH mylist "world" # 从左边插入 LPUSH mylist "hello" LRANGE mylist 0 -1 # 获取列表所有元素 -> 1) "hello" 2) "world" RPOP mylist # 从右边弹出一个元素 -> "world"Set(集合):无序、不可重复的集合。
SADD tags "java" "python" "redis" # 添加元素 SMEMBERS tags # 获取所有成员 SISMEMBER tags "java" # 检查成员是否存在 -> (integer) 1Sorted Set(有序集合):带分数的有序集合。
ZADD leaderboard 100 "player1" 200 "player2" # 添加成员和分数 ZRANGE leaderboard 0 -1 WITHSCORES # 按分数升序排列 ZREVRANGE leaderboard 0 -1 WITHSCORES # 按分数降序排列(排行榜)三、持久化:内存数据如何持久到磁盘?
由于Redis数据存储在内存中,重启或宕机会导致数据丢失。因此,持久化至关重要。Redis提供了两种主要方式:
1. RDB(Redis Database)
-
机制:在指定的时间间隔内,生成内存中所有数据的一个快照(Snapshot)文件(
.rdb)。 -
配置 (
redis.conf):save 900 1 # 900秒内至少有1个key发生变化,则触发保存 save 300 10 # 300秒内至少有10个key发生变化 save 60 10000 # 60秒内至少有10000个key发生变化 -
优点:
-
文件紧凑,适合做备份和灾难恢复。
-
最大化Redis性能,父进程唯一的工作就是fork一个子进程来完成持久化。
-
恢复大数据集时速度比AOF快。
-
-
缺点:
-
可能会丢失最后一次快照之后的数据(数据不够安全)。
-
当数据集很大时,fork子进程的过程可能会非常耗时。
-
-
机制:记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据。
-
配置 (
redis.conf):appendonly yes # 开启AOF appendfsync everysec # 每秒同步一次(在性能和数据安全间取得平衡) # appendfsync always # 每次写命令都同步,最安全,性能最差 # appendfsync no # 由操作系统决定何时同步,性能最好,最不安全 -
优点:
-
数据安全性更高,最多丢失一秒的数据(
appendfsync everysec)。 -
AOF文件易于理解和解析。
-
-
缺点:
-
AOF文件通常比RDB文件大。
-
恢复速度通常比RDB慢。
-
-
追求极致性能,可以容忍分钟级数据丢失:仅使用RDB。
-
数据安全性要求很高:同时开启RDB和AOF。在这种情况下,Redis重启时会优先使用AOF文件来恢复数据,因为它通常更完整。
-
建议:在大多数生产环境中,同时开启RDB和AOF是一种稳妥的策略。RDB用于定期备份和快速恢复,AOF用于保证数据安全。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>2.配置连接 (
application.yml):spring: redis: host: localhost port: 6379 # password: your-password # 如果设置了密码 database: 03.使用RedisTemplate:
@RestController public class TestController { @Autowired private RedisTemplate<String, String> redisTemplate; @GetMapping("/set") public String setValue(String key, String value) { redisTemplate.opsForValue().set(key, value); return "Value set successfully!"; } @GetMapping("/get") public String getValue(String key) { return redisTemplate.opsForValue().get(key); } @GetMapping("/setUser") public String setUser() { // 使用Hash存储对象 redisTemplate.opsForHash().put("user:2000", "name", "wangwu"); redisTemplate.opsForHash().put("user:2000", "age", "25"); return "User set successfully!"; } }五、总结
Redis以其惊人的速度和丰富的数据结构,成为了现代应用架构中不可或缺的一环。本文带你从零开始,了解了:
-
Redis的核心概念与数据类型。
-
RDB和AOF两种持久化机制的原理与取舍。
-
如何在Spring Boot项目中集成和使用Redis。
-
527

被折叠的 条评论
为什么被折叠?



