1、二进制安全
- redis只存储字节流,与外界交互,存取都是字节流,只要双方客户端有统一的编解码,数据就不会被破坏。
- redis拿的是字节流,编码是一个字符一个字节
- redis-cli --raw 连接redis服务,并触发编码器的格式化。如果不格式化,redis只会识别ASCII码的,超出ASCII码,则显示为16进制
2、位图的使用场景
2.1、场景一:统计一段时间内用户的登录天数
? 电商用户划分为僵尸用户、冷热用户、忠诚用户,每个用户还可能有多个账号。我们怎么去统计呢?其实我们很多用户都没有经常登录,我们统计活跃用户数即可。那么统计活跃用户数时,需要去重,比如1号到3号这期间,不管这个用户登录了1次还是2次,只要登录了就算,这得去重。
? 用redis的位图来做,用日期当做key,value呢?我们把每个用户的ID映射到一个二进制位上,每一个二进制位都表示一个用户
? setbit 20210101 0 1 # 用户Bob登录了,用0号位表示Bob
? setbit 20210102 0 1 # 用户Bob还是登录了
? setbit 20210102 7 1 # 用户张三登录了,用第8号位表示张三
? bitop or orkey 20210101 20210102
? bitcount orkey 0 -1 # 结果为2,即表示有2个用户登录了
?
|