当前位置:首页 > 问答 > 正文

Redis怎么一步步弄计数,添加计数那些操作其实也没那么复杂

要理解Redis怎么一步步弄计数,我们可以把它想象成一个超级简单的“计数本”,这个本子特别厉害,能瞬间记住和修改无数个数字,而且几乎不会出错,我们平时在网站上看到的文章阅读量“10万+”、视频的播放次数、用户的点赞数,背后很可能就是Redis这个“计数本”在干活。

第一步:把Redis启动起来,准备好“计数本”

你得有Redis这个“计数本”,你可以把它安装在你自己的电脑(本地环境)或者一台专门的服务器上,安装好之后,你打开一个命令行窗口,输入启动命令,就像你打开一个笔记本准备写字一样,这时候,Redis服务就开始运行了,在后台等着你发号施令,为了跟这个“计数本”对话,你需要一个“传话员”,也就是Redis的客户端,最常见的就是用命令行工具,输入redis-cli,你就进入了和Redis对话的模式,光标会变成0.0.1:6379>,表示你已经连接成功了,可以开始往“计数本”上写东西了。

第二步:设定一个键,给计数对象起个名字

“计数本”不能乱写,得有条理,我们需要为每一个需要计数的东西起一个独一无二的名字,在Redis里这叫“键”(Key),我们要给一篇ID为123的文章统计阅读量,那这个键就可以叫article:123:views,这个名字起得越清晰越好,比如用冒号分隔,article表示类型是文章,123是文章ID,views表示是浏览量,这样你以后一看就知道这个键是干嘛的,这个名字就是我们以后找到这个计数值的“地址”。

第三步:最基本的操作——添加计数(加一)

每当有一个用户点击了这篇文章,我们就需要把阅读数加1,这是最常用的操作,在Redis里,命令非常简单,就是INCR,你只需要在客户端输入:

INCR article:123:views

然后按回车,神奇的事情发生了,Redis会立刻告诉你结果,如果这是第一次为这篇文章计数,Redis会自动创建这个article:123:views键,并把它的值设置为1,如果你再执行一次,它就会变成2,以此类推,这个操作是“原子性”的(这是个专业术语,但你可以简单理解为“绝对不会出错的操作”),即使成千上万人同时点击,Redis也能保证每个点击都准确地加上,不会漏掉也不会重复。

第四步:其他常用的计数操作

除了简单的加一,Redis还提供了其他几个非常顺手的小工具:

  1. 增加指定的数量INCRBY 如果你的文章被一次性推荐了10次,你想直接加10,而不是执行10次INCR,就可以用:

    Redis怎么一步步弄计数,添加计数那些操作其实也没那么复杂

    INCRBY article:123:views 10

    这样浏览量就会一次性增加10。

  2. 减少计数DECRDECRBY 有加就有减,比如用户取消了一个赞,你就可以用DECR

    DECR user:456:likes

    或者用DECRBY来减少指定数量。

  3. 获取当前的值GET 当你要在网页上显示阅读量时,你需要把数字取出来,命令很简单:

    GET article:123:views

    Redis就会把当前的值返回给你。

第五步:处理更复杂一点的场景——设置初始值和检查是否存在

Redis怎么一步步弄计数,添加计数那些操作其实也没那么复杂

我们可能希望只有在键不存在的时候才设置一个初始值,一个新商品上架,库存设为1000,如果这个库存键已经存在(可能之前误操作过),我们就不想覆盖它,这时候可以用SETNX命令(SET if Not eXists):

SETNX product:789:stock 1000

这个命令的意思是:如果product:789:stock这个键不存在,我就把它创建出来,值设为1000;如果它已经存在,那我什么也不做。

另一个常见场景是,我们想先获取当前的值,然后立即把它设置为一个新值,比如在秒杀活动中,检查库存是否大于0,如果大于0就立刻减掉一个库存,这可以用GETSET命令,但更常见的做法是使用Redis的“事务”或者“Lua脚本”来保证多个操作的原子性,不过这已经是稍微进阶一点的用法了。

第六步:实际应用中怎么配合

在你的程序(比如用Python、Java、Go写的网站后台)里,你不会一直手动在命令行里输入命令,你会使用对应语言的Redis客户端库,这些库就像是帮你自动化和Redis“计数本”沟通的秘书,你的程序逻辑会是这样的:

  1. 用户打开了文章页面。
  2. 你的程序代码(比如一个Python函数)会通过Redis客户端库,向Redis服务器发送一条INCR article:123:views命令。
  3. Redis服务器执行命令,将数字加1,并返回新的值。
  4. 你的程序可能把这个新的值拿出来,随着文章内容一起显示给用户。

整个过程非常快,通常在一毫秒内就能完成,所以用户根本感觉不到。

总结一下

用Redis弄计数,其实一点也不复杂,核心步骤就是:启动Redis -> 想好键的名字 -> 用INCRDECRINCRBYGET这几个简单的命令来操作,它之所以强大,就是因为这些命令简单直接,速度快,并且能安全地处理并发情况,你先从这几个基础命令玩起,就能实现大部分常见的计数功能了,等到需要处理更复杂的逻辑,比如计数过期、批量操作时,再去了解Redis的其他高级功能也不迟。