《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