简介
要把string类型当做byte来看待。
包含字符串操作。
包含数值操作。
包含位图(bitmap)操作。
字符串操作
help @string 命令可以查看所有对字符串操作。
set key value:保存一个键值对。
set key value nx:当key不存在时才去设置值,如果存在key返回nil。
分布式锁可以用到。很多线程带着同一个key来设置,设置成功的线程获得锁。
set key value xx:只有key存在时才可以设置,只能更新值。
mset key1 value1 key2 value2:同时设置多个键值对。
相应的取数据操作mget key 1 key2:同时取出多个值。
append key value:在key对应的值后面拼接value。
getrange key start end:取出key对应value的start位置到end位置的字符串(string有正反向索引)。
正向索引:hello -> 0 1 2 3 4
反向索引:hello -> -5 -4 -3 -2 -1
setrange key offset value:将key对应的值从offset开始替换为value。
strlen key:查看value的长度。
getset key value:取出原来的值,并把存的值设为value(这个命令是为了性能的考虑)。
msetnx key1 value1 key2 value2:批量保存多个key,原子操作,如果有一个失败,所有的都失败。
数值操作
incr key:对数值+1。规避并发下对数据库的事务操作,完全由redis内存操作代替。
incrby key increment:对数值+increment。
decr key:对数值-1.
decrby key decrement:对数值-decrement。
incrbyfloat key increment:对数值加一个浮点型数。
strlen key:作用一样,但是要注意的是,虽然是数值类型,这里也是一个字符为一个字节。
bitmap
redis中有二进制位索引
bitmap相关操作
setbit key offset value:命令中的offset是二进制位的偏移量。(设置长度不足1字节的,strlen长度为1字节,最小开辟字节是1字节)。
bitpos key bit [start] [end]:start和end代表的是字节的索引,也就是说查看start到end之间的字节第一个'bit'的位置(二进制位索引的位置)。
bitcount key [start] [end]:start到end之间1出现了几次。
bitop operation destkey key [key ...]
operation:位操作[and, or, xor, not]
destkey:目标key(进行位操作之后的结果)
使用场景
统计用户的登录天数,且日期随机。
使用MySQL创建用户登录表,记录用户的每次登录。缺点:需要存用户id(4字节),日期(4字节),如果用户量很大,一年内数据量会很大。
使用bitmap进行记录:setbit liu 1 1,setbit liu 7 1,setbit liu 364 1,用消耗46字节(代表用户liu当年的第二天、第八天以及第365天进行过登录)。bitcount liu -2 -1,统计用户当年最后16天登录了几次。内存消耗:每用户46B * 1000000=460000000(460M)。
统计活跃用户。
以日期为key,用户id为offset,如果登陆过,就设置为1。
setbit 20210101 1 1;setbit 20210102 1 1;setbit 20210102 7 1;bitop or(and) destkey 20210101 20210102;bitcount deskey。
1号用户在20210101,20210102登录,7号用户在20210102登录,使用or操作是得出活跃用户个数(去重),使用and操作是活跃用户总数。
posted @
2021-02-26 07:54
January01
阅读(
42 )
评论()
收藏
举报