Redis查询那些基本操作怎么用,实战里边一步步带你上手掌握
- 问答
- 2026-01-03 11:51:40
- 3
想学会用Redis,光看理论不行,得动手,咱们就假设你是个电商网站的开发者,我来一步步带你用Redis解决几个实际问题,操作自然就记住了,你得在电脑上安装好Redis,并启动它,启动后,在命令行输入 redis-cli,就进入了Redis的“对话模式”,后面所有的命令都是在这里面敲的。
第一战:缓存用户信息(Set 和 Get 的应用)
来源:《Redis实战》中经常以缓存作为入门案例。
你的网站每次显示用户主页,都要从MySQL数据库里查一次用户信息,比如名字、邮箱,如果访问量很大,数据库就撑不住了,这时就用Redis做缓存。
-
操作1:存数据(SET) 想象用户“张三”的ID是1001,他的信息可以存成一个JSON字符串,命令很简单:
SET user:1001 '{"name":"张三", "email":"zhangsan@example.com"}'敲回车,如果返回
OK,就说明存成功了,这里user:1001就是你给这把“钥匙”起的名字,叫键(Key),后面的一长串JSON是值(Value),Key的名字最好有规律,比如用冒号分隔,这样好管理。 -
操作2:取数据(GET) 前端需要显示用户1001的信息,你不用查数据库了,直接问Redis要:
GET user:1001回车后,刚才存的那串JSON就显示出来了,这个过程比查数据库快几十上百倍。
-
操作3:给数据加个“保质期”(EXPIRE) 缓存不能永远有效,万一用户在数据库里改了名字,你缓存里的还是旧的就不对了,所以我们要设置一个过期时间,比如10分钟。
EXPIRE user:1001 600这里的600就是600秒,10分钟后,这个键会自动被Redis删除,你也可以在存数据的时候直接设置过期,用
SETEX user:1001 600 '...JSON...'命令一步到位。
第二战:统计每日活跃用户(SADD 和 SCARD 的应用)
来源:Redis官方文档中Set类型的典型使用场景。
老板想知道今天有多少不同的用户登录了网站,用数据库去重计数很麻烦,用Redis的集合(Set)就特别简单,集合的特点是里面的元素都是唯一的,自动去重。
-
操作1:用户登录时“报个到”(SADD) 假设今天是2024年5月21日,用户1001登录了:
SADD active_users:20240521 1001用户1002也登录了:
SADD active_users:20240521 1002如果用户1001一天内多次登录,你再执行一次
SADD active_users:20240521 1001,集合里也只会有一个1001,不会重复。
-
操作2:下班前统计总数(SCARD) 到了晚上,你想看看今天到底有多少独立用户登录了:
SCARD active_users:20240521这个命令会返回一个数字,比如25800,意思是今天有25800个活跃用户,非常简单直接。
第三战:商品排行榜(ZADD 和 ZRANGE 的应用)
来源:常见于电商和游戏排行榜设计文章。
你的网站卖商品,需要做一个“热度排行榜”,根据销量排序,Redis的有序集合(Sorted Set)完美适合这个场景,它能为每个元素(比如商品ID)设置一个分数(score),并根据分数排序。
-
操作1:商品卖出,增加分数(ZADD) 商品5001卖出了一件,给它加1分:
ZADD hot_rank 1 5001商品5002卖出了三件,一次性加3分:
ZADD hot_rank 3 5002如果商品5001又卖出了5件,你可以再次执行
ZADD hot_rank 5 5001,但这样会覆盖原来的分数为5,我们是想增加,所以用更聪明的命令:
ZINCRBY hot_rank 5 5001这个命令会给商品5001的分数增加5,现在它的分数就是1+5=6了。
-
操作2:展示前十名(ZRANGE) 要获取销量前十的商品:
ZRANGE hot_rank 0 9 WITHSCORES0 9表示从第0名到第9名(也就是前十)。WITHSCORES选项会把商品的分数也显示出来,返回的结果会按照分数从低到高排列,如果你想要从高到低排列,用ZREVRANGE命令。
第四战:限制短信验证码发送频率(INCR 和 EXPIRE 的组合拳)
来源:网络开发中常见的防刷机制。
为了防止恶意用户频繁获取短信验证码,你需要限制一个手机号1分钟内只能发一次。
- 操作1:请求发送时检查(INCR 和 TTL)
用户手机号13800138000请求发送验证码,你先检查一下:
INCR sms_limit:13800138000INCR命令会将这个键的值增加1,如果这个键不存在,它会先创建并设置为0,然后再加1,所以第一次执行会返回1。 紧接着,查看这个键的剩余生存时间:TTL sms_limit:13800138000如果返回
-2,说明键不存在(这是第一次发送),你需要设置过期时间:EXPIRE sms_limit:13800138000 60TTL返回一个大于0的数(比如45),说明60秒还没过,此时你再看一下INCR返回的数字,如果大于1,就说明这个号码在短时间内已经请求过了,就拒绝发送。
通过上面这四个实战小例子,你已经用到了Redis最核心的字符串(String)、集合(Set)、有序集合(Sorted Set)这几种数据类型,以及SET、GET、EXPIRE、SADD、SCARD、ZADD、ZINCRBY、ZRANGE、INCR、TTL这些最常用的命令,最好的学习方法就是打开你的Redis-cli,把这些命令都敲一遍,感受一下,印象就深刻了。
本文由寇乐童于2026-01-03发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/73683.html
