Redis 是一个开源的内存数据结构存储系统,支持多种数据类型,被广泛应用于缓存、消息队列和实时统计。
核心数据类型
String
最基础的数据类型,可以存储字符串、整数或浮点数:
SET user:1:name "Snowman"
GET user:1:name
INCR view_count
Hash
适合存储对象:
HSET user:1 name "Snowman" email "snow@example.com"
HGETALL user:1
List
实现队列和栈:
LPUSH queue:emails "email1@example.com"
RPOP queue:emails
Set
无序唯一集合:
SADD tags:post:1 "php"
SADD tags:post:1 "laravel"
SMEMBERS tags:post:1
Sorted Set
带权重的有序集合:
ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2"
ZREVRANGE leaderboard 0 9 WITHSCORES
过期策略
Redis 提供了三种删除过期键的策略:
- 定时删除:设置过期时间时创建定时器,到期立即删除。对 CPU 不友好。
- 惰性删除:访问键时检查是否过期,过期则删除。对内存不友好。
- 定期删除:每隔一段时间随机检查一批键,删除过期的。平衡方案。
Redis 实际采用惰性删除 + 定期删除的组合策略。
持久化
RDB 快照
在指定时间间隔内将内存数据快照保存到磁盘:
save 900 1
save 300 10
save 60 10000
AOF 日志
记录每个写操作命令,重启时重新执行:
appendonly yes
appendfsync everysec
Laravel 中使用 Redis
use Illuminate\Support\Facades\Redis;
// 存储缓存
Redis::set('name', 'Snowman');
Redis::expire('name', 3600);
// 获取缓存
$name = Redis::get('name');
// 使用缓存门面
Cache::store('redis')->put('key', 'value', 3600);