赞
踩
位存储
位图的最大优点之一是,在存储信息时,它们通常可以极大地节省空间。例如,在一个系统中,不同的用户由增量用户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):
- def __init__(self, cache_key, redis_instance=redis, expire_time=DAY_SECONDS, ):
- self._cache_key = cache_key
- self._redis_instance = redis_instance
- self.expire_time = expire_time
-
- def get_bitcount(self, key, start=None, end=None):
- return self._redis_instance.bitcount(self._cache_key, key)
-
- def get_bitcount(self, key, offset):
- return self._redis_instance.getbit(key, offset)
-
- def _expire(self):
- self._redis_instance.expire(self._cache_key, self.expire_time)
-
- def setbit(self, key, offset, value):
- return self._redis_instance.setbit(key, offset, value)

image
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。