《Redis应用实例》书摘(9):计数器(使用字符串实现)

计数器是应用程序最常见的功能之一,它在整个互联网中随处可见。

在Redis中实现计数器最常见的方法是使用字符串键:计数器核心的增加计数和减少计数操作可以分别通过INCRBY命令和DECRBY命令来完成。此外还需要用到GET命令和带有GET选项的SET命令,前者用于获取计数器的当前值,而后者则用于重置计数器的值并获取重置前的旧值。

代码清单 CODE_COUNTER 展示了基于上述原理实现的字符串键计数器程序。


代码清单 CODE_COUNTER 使用字符串键实现的计数器程序 counter.py

class Counter:

    def __init__(self, client, key):
        self.client = client
        self.key = key

    def increase(self, n=1):
        """
        将计数器的值加上指定的数字。
        """
        return self.client.incr(self.key, n)

    def decrease(self, n=1):
        """
        将计数器的值减去指定的数字。
        """
        return self.client.decr(self.key, n)

    def get(self):
        """
        返回计数器的当前值。
        """
        value = self.client.get(self.key)
        return 0 if value is None else int(value)

    def reset(self, n=0):
        """
        将计数器的值重置为参数n指定的数字,并返回计数器在重置之前的旧值。
        参数n是可选的,若省略则默认将计数器重置为0。
        """
        value = self.client.set(self.key, n, get=True)
        return 0 if value is None else int(value)

作为例子,以下代码展示了这个计数器实现的具体使用方法:

>>> from redis import Redis
>>> from counter import Counter
>>> client = Redis(decode_responses=True)
>>> counter = Counter(client, "GlobalCounter")
>>> counter.increase()    # 增加计数器的值
1
>>> counter.increase()
2
>>> counter.increase(100)
102
>>> counter.decrease(50)    # 减少计数器的值
52
>>> counter.reset()    # 重置计数器并获取旧值
52
>>> counter.get()    # 获取计数器的当前值
0

Tip

本文摘录自《Redis应用实例》一书。
欢迎访问书本主页以了解更多Redis使用案例:huangz.works/rediscookbook/
../_images/rediscookbook-banner.png