《Redis应用实例》书摘(14):二元操作记录器

二元操作记录器用于记录用户是否执行了指定的操作,这种需求的一个典型例子就是实现很多应用中的签到功能:每一天,对于应用中的每个用户来说,他们要么签到了,要么没签到。

代码清单 CODE_BINARY_RECORDER 展示了基于位图实现的二元操作记录器。


代码清单 CODE_BINARY_RECORDER 二元操作记录器 binary_recorder.py

class BinaryRecorder:

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

    def setbit(self, index):
        """
        将指定索引上的二进制位设置为1。
        """
        self.client.setbit(self.key, index, 1)

    def clearbit(self, index):
        """
        将指定索引上的二进制位设置为0。
        """
        self.client.setbit(self.key, index, 0)

    def getbit(self, index):
        """
        获取指定索引上的二进制位的值。
        """
        return self.client.getbit(self.key, index)

    def countbits(self, start, end):
        """
        统计指定索引区间内,值为1的二进制位数量。
        """
        return self.client.bitcount(self.key, start, end, "BIT")

作为例子,以下代码模拟了如何使用二元操作记录器记录指定用户的签到情况:

>>> from redis import Redis
>>> from binary_recorder import BinaryRecorder
>>> client = Redis(decode_responses=True)
>>> recorder = BinaryRecorder(client, "User:256512:sign_in")
>>> recorder.setbit(0)  # 签到
>>> recorder.setbit(3)
>>> recorder.countbits(0, 6)  # 统计签到次数
2

Tip

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