设计平面图,淄博seo定制,上海景观设计公司,建设部网站 光纤到户目录
基本介绍
基本命令
Setbit
Getbit
BITCOUNT
应用场景
统计当日活跃用户
用户签到
bitmap - Redis布隆过滤器 #xff08;应对缓存穿透问题#xff09; 基本介绍
Redis 的位图#xff08;bitmap#xff09;是由多个二进制位组成的数组#xff0c;只有两…目录
基本介绍
基本命令
Setbit
Getbit
BITCOUNT
应用场景
统计当日活跃用户
用户签到
bitmap - Redis布隆过滤器 应对缓存穿透问题 基本介绍
Redis 的位图bitmap是由多个二进制位组成的数组只有两种状态0和1, 数组中的每个二进制位都有与之对应的偏移量从 0 开始通过这些偏移量可以对位图中指定的一个或多个二进制位进行操作。 可以把 Bitmap 想象成一个以位为单位的数组数组的每个单元只能存储 0 和 1数组的下标在 Bitmap 中叫做偏移量 offsetbitmap默认值都为0. BitMap底层实际上使用字符串来存储,由于 Redis 中字符串的最大长度是 512 MB字节所以 BitMap 的偏移量 offset 值也是有上限的其最大值是8 * 1024 * 1024 * 512 2^32(4G)。
BitMap 的基本原理就是用一个 bit 来标记某个元素对应的 Value而 Key 即是该元素。由于采用一 个bit 来存储一个数据因此可以大大的节省空间。 计算机分配给内存的最小单元是bit,1Byte8bit, 1个整数类型为4Byte32bit。 基本命令
常用命令作用1、getbit key offset用于获取Redis中指定key对应的值中对应offset的bit2、setbit key key offset value用于修改指定key对应的值中对应offset的bit3、 bitcount key [start end]用于统计字符串被设置为1的bit数4、bitop and/or/xor/not destkey key [key …]用于对多个key求逻辑与/逻辑或/逻辑异或/逻辑非
Setbit
Redis Setbit 命令用于对 key 所储存的字符串值设置或清除指定偏移量上的位(bit)。
redis SETBIT bit 10086 1
(integer) 0redis GETBIT bit 10086
(integer) 1redis GETBIT bit 100 # bit 默认被初始化为 0
(integer) 0 返回值指定偏移量原来储存的位。 Getbit
Redis Getbit 命令用于对 key 所储存的字符串值获取指定偏移量上的位(bit)。
# 对不存在的 key 或者不存在的 offset 进行 GETBIT 返回 0redis EXISTS bit
(integer) 0redis GETBIT bit 10086
(integer) 0# 对已存在的 offset 进行 GETBITredis SETBIT bit 10086 1
(integer) 0redis GETBIT bit 返回值字符串值指定偏移量上的位(bit)。当偏移量 OFFSET 比字符串值的长度大或者 key 不存在时返回 0 。 BITCOUNT 统计指定位区间上值为 1 的个数。语法格式如下 BITCOUNT key [start end] 127.0.0.1:6379 BITCOUNT user:1(integer) 8
只需指定 start 和 end 参数即可仅对特定字节进行计数。start 和 end 参数和 GETRANGE 命令的参数类似都可以使用负数比如 -1 表示倒数第一个位 -2 表示倒数第二个位。.
应用场景
统计当日活跃用户
每日活跃统计创建一个bitmap键当用户活跃了根据用户id的偏移量来设置对应的位为1
用户签到
每个用户创建一个位图的键以某一天为基础之后的天数距离这一天的天数为偏移量如果用户点击了签到则设置对用的偏移位为1。
bitmap - Redis布隆过滤器 应对缓存穿透问题
举例比如爬虫服务器在爬取电商网站的商品信息时首先经过缓存如果缓存查不到再去数据库获取信息因为爬虫的效率很高且sku很有可能是不存在或者已下架的就会造成缓存穿透大量请求被发送到数据库导致服务器受到影响。
此时可以在缓存层之前添加一个布隆过滤器布隆 过滤器看作是一个bitmapsku作为offset值如果商品真实存在bit值设为1。首先将商品数据初始化当有请求时通过getbit判断sku是否有效。如果布隆过滤器认为商品不存在就拒绝访问这样就可以保护存储层。