Redis数据类型之string

简介

  • 要把string类型当做byte来看待。
  • 包含字符串操作。
  • 包含数值操作。
  • 包含位图(bitmap)操作。

字符串操作

  1. help @string 命令可以查看所有对字符串操作。
  2. set key value:保存一个键值对。
  3. set key value nx:当key不存在时才去设置值,如果存在key返回nil。
    • 分布式锁可以用到。很多线程带着同一个key来设置,设置成功的线程获得锁。
  4. set key value xx:只有key存在时才可以设置,只能更新值。
  5. mset key1 value1 key2 value2:同时设置多个键值对。
    • 相应的取数据操作mget key 1 key2:同时取出多个值。
  6. append key value:在key对应的值后面拼接value。
  7. getrange key start end:取出key对应value的start位置到end位置的字符串(string有正反向索引)。
    • 正向索引:hello -> 0 1 2 3 4
    • 反向索引:hello -> -5 -4 -3 -2 -1
  8. setrange key offset value:将key对应的值从offset开始替换为value。
  9. strlen key:查看value的长度。
  10. getset key value:取出原来的值,并把存的值设为value(这个命令是为了性能的考虑)。
  11. msetnx key1 value1 key2 value2:批量保存多个key,原子操作,如果有一个失败,所有的都失败。

数值操作

  1. incr key:对数值+1。规避并发下对数据库的事务操作,完全由redis内存操作代替。
  2. incrby key increment:对数值+increment。
  3. decr key:对数值-1.
  4. decrby key decrement:对数值-decrement。
  5. incrbyfloat key increment:对数值加一个浮点型数。
  6. strlen key:作用一样,但是要注意的是,虽然是数值类型,这里也是一个字符为一个字节。

bitmap

  1. redis中有二进制位索引
  2. bitmap相关操作
    1. setbit key offset value:命令中的offset是二进制位的偏移量。(设置长度不足1字节的,strlen长度为1字节,最小开辟字节是1字节)。
    2. bitpos key bit [start] [end]:start和end代表的是字节的索引,也就是说查看start到end之间的字节第一个'bit'的位置(二进制位索引的位置)。
    3. bitcount key [start] [end]:start到end之间1出现了几次。
    4. bitop operation destkey key [key ...]
      • operation:位操作[and, or, xor, not]
      • destkey:目标key(进行位操作之后的结果)
  3. 使用场景
    1. 统计用户的登录天数,且日期随机。
      • 使用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)。
    2. 统计活跃用户。
      • 以日期为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)  评论(0)    收藏  举报