红色之美带你轻松玩转Redis,分享那些简单又实用的小技巧和使用心得
- 问答
- 2026-01-11 20:01:35
- 2
前段时间我在网上闲逛,看到一个叫“Redis实验室”的博客,里面有一篇文章讲了不少Redis的日常用法,挺有意思的,我就结合我自己平时用Redis的一些小经验,一起分享给你,咱们今天不谈那些深奥的架构原理,就聊聊怎么用Redis这个“红色小精灵”让我们的程序和生活更简单。
不只是缓存,它是个“万能工具箱”
很多人一提到Redis,第一反应就是“缓存”,没错,用它做缓存速度快得像闪电,这确实是它的看家本领,但你要是只把它当缓存用,那可真是大材小用了,我记得“Redis实验室”那篇文章里打了个比方,说Redis更像是一个功能丰富的“数据结构服务器”,这个说法很贴切,它肚子里装着字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash)等多种数据结构,每种结构都能解决特定场景下的问题。
点赞收藏?用集合(Set)轻松搞定
咱们做个文章点赞功能,你可能会想,这还不简单,在数据库里给文章加个likes_count字段,有人点赞就+1不就行了?但这样有个问题,你没法防止同一个用户重复点赞,这时候,Redis的Set结构就派上用场了,Set的最大特点就是里面的元素都是唯一的,不允许重复。

我的做法是,为每篇文章创建一个Redis Set,key就叫article:123:likers(123是文章ID),每当一个用户点赞,我就执行sadd article:123:likers userId命令,这个命令很聪明,如果用户已经点过赞(即userId已经存在于集合中),它会自动忽略,不会重复添加,要取消点赞,就用srem命令移除,想知道一篇文章有多少人点赞?scard article:123:likers一下,数字立马就出来了,想判断当前用户是否点过赞?sismember article:123:likers currentUserId,返回1就是点过,0就是没点,你看,一个简单的数据结构,就把计数、防重复、查询状态全搞定了,而且速度极快,根本不用去麻烦数据库。
排行榜?有序集合(Sorted Set)是天选之子
另一个我特别爱用的功能就是有序集合(Sorted Set),它简直是做排行榜的“天选之子”,比如要给用户按游戏积分排个名。
做法是,创建一个有序集合,key比如叫user:ranking,每个用户的ID作为成员(member),他的积分作为分数(score),用户积分更新时,直接用zadd user:ranking score userId命令,ZADD命令很强大,如果用户不存在,它会添加;如果已存在,它会更新分数(除非指定某些参数),查某个用户的排名用zrevrank(逆序排名,第一名返回0),查他的积分用zscore,查排行榜前10名用zrevrange user:ranking 0 9 withscores,这一切操作的时间复杂度都很低,即使有百万用户,排名更新和查询也是瞬间完成,很多直播平台的礼物榜、电商的销量榜,背后都是这个原理。

存储对象?试试哈希(Hash)
如果我们想在Redis里存一个用户的信息,比如姓名、年龄、城市等,一种办法是用多个独立的key,比如user:100:name, user:100:age,但这样管理起来很散乱,另一种办法是把用户对象序列化成JSON字符串存成一个String,但这样如果想修改其中一个字段,就得把整个JSON读出来,改完再整个写回去,不高效。
这时候,哈希(Hash)结构就非常合适,它就像一个微型的键值对仓库,我们可以用一个key,比如user:100,来存储这个用户的所有字段,用hset user:100 name "张三" age 25 city "北京"来设置,之后,可以hget user:100 name获取单个字段,可以hgetall user:100获取所有字段,也可以hincrby user:100 age 1给年龄字段增加1(这个操作是原子性的,很安全),存储和读取都非常直观和高效。
过期时间:不只是让缓存自动失效

Redis给key设置过期时间的功能(TTL)大家都知道,主要用来做缓存失效,但其实它还能玩出些小花样。
我见过有人用它来做限时优惠券,发放优惠券时,将券码存入Redis,并设置一个15分钟的过期时间,用户必须在15分钟内使用,否则券码自动消失,省去了后台定时任务去扫描清理的麻烦。
再比如,可以做简单的分布式锁(虽然生产环境更推荐用Redlock等复杂算法,但简单场景下可以这么用),某个任务同一时间只能一个服务器实例执行,可以先尝试用setnx lock:task_name true命令抢锁,抢到后,立刻给这个锁key设置一个较短的过期时间(比如30秒),这样即使抢到锁的服务器崩溃了,锁也会在30秒后自动释放,避免出现死锁,这个方法在“Redis实验室”的文章里也被提及过,需要注意的细节是设置值和设置过期时间要尽可能保证原子性(可以用set key value ex seconds nx命令一步到位)。
一点使用心得
用了这么久Redis,我最大的感受就是“简单直接”,它的命令设计得很人性化,大部分时候你都能找到一个命令直接解决你的问题,而不是需要你在代码里绕来绕去,但也要注意,Redis的数据都在内存里,虽然快,但成本也高,不能把什么都往里扔,通常只放那些真正需要高速访问、或者需要利用其数据结构特性的热数据。
下次当你遇到需要高速计数、去重、排名、或者临时存储的场景时,不妨先想想:“我的红色工具箱——Redis,能不能帮上忙?”很多时候,它都能给你一个惊喜,希望这些简单实用的小技巧能帮你更好地玩转Redis。
本文由帖慧艳于2026-01-11发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/78881.html
