《Redis应用实例》书摘(8):自动递增数字ID生成器(哈希实现)¶
跟字符串键实现的ID生成器相比,使用哈希键实现ID生成器的好处是可以将多个相关的ID生成器放到同一个键里面进行管理。
代码清单 CODE_HASH_ID_GENERATOR 展示了基于哈希键实现的自增数字ID序列生成器。
代码清单 CODE_HASH_ID_GENERATOR 使用哈希键实现的ID生成器hash_id_generator.py
class HashIdGenerator:
def __init__(self, client, key):
self.client = client
self.key = key
def produce(self, name):
"""
生成并返回下一个ID。
"""
return self.client.hincrby(self.key, name, 1)
def reserve(self, name, number):
"""
保留前N个ID,使得之后生成的ID都大于N。
这个方法只能在执行produce()之前执行,否则函数将返回False表示执行失败。
返回True则表示保留成功。
"""
return self.client.hsetnx(self.key, name, number) == 1
作为例子,以下这段代码展示了这个ID生成器程序的具体用法:
>>> from redis import Redis
>>> from hash_id_generator import HashIdGenerator
>>> client = Redis(decode_responses=True)
>>> gen = HashIdGenerator(client, "UserID_Coll")
>>> gen.reserve("PostID", 1000000)
True
>>> gen.produce("PostID")
1000001
>>> gen.produce("PostID")
1000002