Redis学习笔记--string、bitmap

String字符串:

set k1 keyName nx:只有keyName不存在的时候才能设置成功,可实现分布式锁。

set k1 keyName xx :只有keyName存在的时候才能设置成功,即更新操作。

mset k1 a k2 b

mget k1 k2

批量set和get。

append k1 "hello":将"hello"追加到k1字符串的后面。

getrange k1 3 4:取k1的第4个到第五个字符。

getrange k1 3 -1:取k1的第4个到最后一个字符,利用正负向索引。

setrange k1 3 hahahaha:从第四个位置开始覆盖。

strlen k1:获取字符串的长度

incr k1:k1 加 1

decr k1: k1 减 1

incrby k1 66:k1 加 66

decrby k1 66:k1 减 66

bitmap:

setbit k1 1 1: 即 01000000    -> 对应ASCII码: @

setbit k1 7 1: 即 01000010    -> 对应ASCII码: A

setbit k1 9 1:即 01000010 01000000    get k1为: A@

-----

eg:当前k1为:01000010 01000000

                   (01234567 8910111213141516)

bitpos:查找0或1第一次出现的二进制位置

bitpos k1 1 0 0:1

bitpos k1 1 1 1:9

bitpos k1 0 1:1

bitcount:统计在字节范围内1出现的次数

bitcount k1 0 0:2

bitcount k1 1 1:1

bitcount k1 0 1:3

------

给定k1 : 01000001  (A)       k2:01000010 (B)

bitop and andkey k1 k2:k1与k2按位与运算

get andkey:@

bitop or orkey k1 k2:k1与k2按位或运算

get orkey:C

bitmap应用场景1:

假设一个电商平台要统计一个用户的登录天数,统计时间随机,怎么做最优?

如果用传统的MySQL关系型数据库当然可以实现,但是在数据量巨大的互联网巨头公司的用户量的需求下,显然太耗费空间与性能。

使用setbit实现:

setbit tom 0 1 : tom第1天登录

setbit tom 6 1 : tom第7天登录

setbit tom 364 1 : tom第365天登录

如果要统计tom最后两周的登录天数?

bitcount tom -2 -1 即可。

占用空间:

每个人365/8=46B

假设一千万用户,则需要46B*10000000=460M

bitmap应用场景2:

假设电商平台(2亿用户)过节大促,给每个当天登录的用户都发放一份礼物,求需要多少份礼物?(即:活跃用户统计)

将上面的k v 反转即可

即:日期作为key    登录的userId为value

setbit 20210101 1 1:2021年1月1日   id为1的登录了

setbit 20210102 1 1:2021年1月2日   id为1的登录了

setbit 20210102 7 1:2021年1月2日   id为7的也登录了

此时统计这两天的登录用户数:

bitop or destkey 20210101 20210102

bitcount destkey 0 -1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值