Redis 是一个常用的内存数据库,适合做缓存、计数器、会话存储、排行榜、消息队列等场景。这篇笔记以本机可运行的 redis-cli 示例为主,串起 Redis 最常见的几类用法。每个小节都给出最小示例,方便你边看边敲。
准备:启动并连接 Redis
如果你使用 Docker,可以先启动一个临时 Redis 服务:
docker run --name redis-tutorial -p 6379:6379 -d redis:7
redis-cli PING
如果本机已经安装了 Redis,也可以直接启动:
redis-server --daemonize yes
redis-cli PING
看到 PONG 说明已经连接成功。后面的示例默认连接 127.0.0.1:6379。
字符串:缓存值和计数器
字符串是 Redis 最基础的类型,可以用来缓存文本、JSON、序列化结果,也可以做原子计数。
redis-cli DEL page:home:title page:home:views
redis-cli SET page:home:title "Redis Tutorial" EX 60
redis-cli GET page:home:title
redis-cli INCR page:home:views
redis-cli GET page:home:views
EX 60 表示 60 秒后自动过期。INCR 是原子操作,适合做阅读量、点赞数、访问次数等计数场景。
哈希:保存对象字段
哈希适合保存一个对象的多个字段,避免把整个对象都序列化成字符串。
redis-cli DEL user:1
redis-cli HSET user:1 name alice age 30
redis-cli HGET user:1 name
redis-cli HGETALL user:1
HSET 可以一次写入多个字段,HGETALL 会返回字段名和字段值。
列表:最新消息队列
列表可以按插入顺序保存一组元素,适合做最新消息、最近浏览、简单队列等场景。
redis-cli DEL news
redis-cli LPUSH news "first"
redis-cli LPUSH news "second"
redis-cli LRANGE news 0 1
redis-cli LPOP news
LPUSH 从左侧插入,LPOP 从左侧弹出。配合 RPUSH 和 LPOP,可以实现简单的任务队列。
集合:标签去重和共同标签
集合中的元素不重复,适合做标签、点赞用户、共同关注、共同好友等场景。
redis-cli DEL tags:php tags:go
redis-cli SADD tags:php redis cache
redis-cli SADD tags:go redis http
redis-cli SINTER tags:php tags:go
SINTER 会返回两个集合的交集。这里会得到共同标签 redis。
有序集合:排行榜
有序集合每个成员都带一个分数,适合做排行榜、延迟任务、权重队列等场景。
redis-cli DEL rank
redis-cli ZADD rank 90 alice 85 bob
redis-cli ZINCRBY rank 10 bob
redis-cli ZREVRANGE rank 0 -1 WITHSCORES
ZADD 写入成员和分数,ZINCRBY 给成员增加分数,ZREVRANGE 按分数从高到低返回成员。
过期时间与键管理
Redis 的过期时间非常适合做缓存和临时会话。查看键时建议优先使用 SCAN,不要在生产环境频繁使用 KEYS。
redis-cli DEL session:token
redis-cli SET session:token abc123 EX 5
redis-cli TTL session:token
redis-cli SCAN 0 MATCH 'session:*' COUNT 100
redis-cli DEL session:token
TTL 返回剩余秒数。键过期后会自动删除,不需要业务代码手动清理。
PHP 示例:用扩展读写 Redis
在已安装 redis 扩展的 PHP 环境中,可以这样连接并操作 Redis:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->del('app:name', 'app:visits');
$redis->setex('app:name', 60, 'blog');
echo $redis->get('app:name'), PHP_EOL;
$redis->incr('app:visits');
echo $redis->get('app:visits'), PHP_EOL;
这个示例演示了连接、删除、写入带过期时间的缓存、读取缓存和原子计数。实际项目中,通常会把 Redis 连接封装成单例或服务,避免每次请求都重新连接。
小结
Redis 的入门重点是先掌握常用数据结构和过期机制:字符串适合缓存和计数,哈希适合对象字段,列表适合队列,集合适合去重和交集,有序集合适合排行榜。实际使用时,建议键名加上业务前缀,例如 user:1、page:home:views,避免不同模块互相覆盖。最后可以用一条命令检查服务是否正常:
redis-cli PING