Redis 入门笔记:redis-cli 常见用法与 PHP 示例

· Redis笔记 Redis redis-cli 缓存 数据结构 过期时间 PHP Docker 入门笔记 · 3 阅读 · 约 6 分钟

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