当前位置:   article > 正文

Redis bitmaps

redis bitmaps

位存储

位图的最大优点之一是,在存储信息时,它们通常可以极大地节省空间。例如,在一个系统中,不同的用户由增量用户ID表示,仅使用512MB内存就可以记住40亿用户的一位信息(例如,知道用户是否想要接收新闻稿)。

统计用户信息,活跃、不活跃。登录、未登录。打卡、未打卡。两个状态的,都可以用bitmaps,bitmaps 位图,数据结构,操作二进制位来记录记录,只有0、1两个状态。

如:记录一周打卡

127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0

获取

127.0.0.1:6379> GETBIT sign 6
(integer) 0
127.0.0.1:6379> GETBIT sign 1
(integer) 0
127.0.0.1:6379> GETBIT sign 3
(integer) 1

统计

127.0.0.1:6379> BITCOUNT sign
(integer) 3
如项目封装:

class BitmapCacheManager(object):

  1. def __init__(self, cache_key, redis_instance=redis, expire_time=DAY_SECONDS, ):
  2. self._cache_key = cache_key
  3. self._redis_instance = redis_instance
  4. self.expire_time = expire_time
  5. def get_bitcount(self, key, start=None, end=None):
  6. return self._redis_instance.bitcount(self._cache_key, key)
  7. def get_bitcount(self, key, offset):
  8. return self._redis_instance.getbit(key, offset)
  9. def _expire(self):
  10. self._redis_instance.expire(self._cache_key, self.expire_time)
  11. def setbit(self, key, offset, value):
  12. return self._redis_instance.setbit(key, offset, value)

image

位图 — Redis 命令参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/940273
推荐阅读
相关标签
  

闽ICP备14008679号