一、BitMap
1. SETBIT对key存储的字符串值,设置或清除指定偏移量的位,位的设置和清除取决于value参数,可以是0或者1,如果key不存在,自动创建一个新的字符串值,offset参数必须大于或等于0,小于2^32SETBIT key offset value返回值:指定的偏移量原来存在的位
2. GETBIT显示key所存储的字符串值中偏移量上的位,当offset比字符串值长度大时,或者key不存在返回0GETBIT key offset返回值:字符串值上指定的偏移量上的位
3. BIOP 在redis中对二进制位进行操作运算的命令,允许在多个键之间执行位级别的布尔运算,并将值结果存储到一个目标键中,支持四种基本的布尔运算:AND、OR、NOT、XORBITOP [布尔运算类型] [结果将存储的键] [key]ADD:与运算,全1出1,全0出0OR:或运算,全0出0,有一个1就出1NOT:非运算,有0出1,有1出0,全0出1XOR:异或运算,相同出0,相反出1
4.BICOUNT计算给定的字符串中,被设置为1的位的数量,可以通过设置额外的start和end,查找指定位置的字符串中的1,而且start和end的值可以设置为负数,-1就是代表最后一位。不存在的key会被当做空字符串处理,返回结果就为0BITCOUNT key [start] [end]返回值:被设置为1的数量
二、BIT中不同命令使用的场景
Sring
- Seesion会话
- 业务缓存
- 分布式锁:为了防止用户同时登录多个设备进行操作
Int
- 计数器
- 限流
- 全局唯一ID
Hash
- 电商购物车
BitMap
- 用户签到
List
- 消息队列
ZSet
- 排行榜
三、什么是缓存击穿,缓存穿透,缓存雪崩?
缓存击穿:是指当当某一个key的缓存过期时大并发量的请求同时访问key,瞬间击穿服务器直接访问到数据库,使得数据库处于负载情况
缓存穿透:是指缓存服务器中没有缓存数据,数据库中也没用符合条件的数据,导致业务系统每次都绕过缓存服务器查询下游的数据库,缓存服务器完全失去作用
缓存击穿是只击穿服务器端访问数据库,而缓存穿透是服务器端和数据库都没有的情况
缓存雪崩:是指当大量缓存同时过期或者缓存服务宕机,所有请求都直接访问数据库,造成数据高负载,影响性能,甚至数据库宕机
对于缓存穿透的防止常用的是布隆过滤器
布隆过滤器是一种比较巧妙的概率性数据结构,它可以告诉你数据一定不存在或可能存在,相比Map、Set、List等传统的数据结构,它占用的内存少、结构更高效