技术分享

Redis-Bitmap

2019-08-08  本文已影响0人  summer_coen

基础概念

优点

缺点

举例文章重复点赞

SETBIT key offset value

对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit),位的设置或清除取决于 value 参数,可以是 0 也可以是 1,当 key 不存在时,自动生成一个新的字符串值;offset 参数必须大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之内),时间复杂度O(1),返回原偏移量的位

BITCOUNT key [start] [end]

计算给定字符串中,被设置为 1 的比特位的数量,指定额外的 start 或 end 参数,可以让计数只在特定的位上进行,可以使用负数值:比如 -1 表示最后一个位,而 -2 表示倒数第二个位,以此类推,时间复杂度O(N),返回被设置为 1 的位的数量

可用于大数据签到、重复点赞、订单重复评论等
实现一

# 假设某用户id=1,文章id=1,相互拼接为11,则偏移量11设置成1(前提用户id和文章id是唯一的)
127.0.0.1:6379>  setbit artcle 11 1
(integer) 0
# 统计全部点赞人数
127.0.0.1:6379> bitcount artcle
(integer) 1
# 模拟重复点赞同一篇文章,返回了1,就可以根据返回值避免重复点赞
127.0.0.1:6379>  setbit artcle 11 1
(integer) 1

实现二

# 假设某用户id=10,有篇文章叫artcleA,则设置artcleA上的位10成1
127.0.0.1:6379>  setbit artcleA 10 1
(integer) 0
# 统计文章artcleA的点赞人数
127.0.0.1:6379> bitcount artcle
(integer) 1
# 模拟重复点赞同一篇文章,返回了1,就可以根据返回值避免重复点赞
127.0.0.1:6379>  setbit artcleA 10 1
(integer) 1

总结:
俩种方法,角度不同实现不同,都可以实现目标,第一种方法,优点存储内存低,缺点扩展性低,不能查看某篇文章点赞数,第二种方法,扩展性高,可以通过BITOP方法操作多个key,实现一些统计功能,缺点比第一种花费更多存储空间

上一篇 下一篇

猜你喜欢

热点阅读