《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

Tip

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