Redis数据类型

Redis数据类型

命令不区分大小写,key区分大小写

1、数据类型

  1. String (字符串)
  2. Hash (散列)
  3. List (列表类型)
  4. Set (集合类型)
  5. SortedSet (有序集合类型,简称 Zset)
  6. Bitmap (位图)
  7. HyperLoglog (统计)
  8. GEO (地理)
  9. Stream

2、String的使用

2.1 最常用

  • set key value
  • get key

2.2 同时设置/获取多个键值

  • mset key value [key, value, key ,value ……]
  • mget key [key ……]

2.3 数值的增减

  • 递增数值 incr key
  • 增加指定的整数 incrby key increment
  • 递减数值 decr key
  • 减少指定的整数 decrby key decrment

2.4 获取 字符串长度

  • strlen key

2.5 分布式锁

  • setnx key value
  • set key value [EX seconds] [PX milliseconds] [NX|XX]
    • EX 表示key 在多少秒之后过期
    • PX 表示在多少毫秒之后过期
    • NX 表示当key 不存在的时候,才创建key,效果等同于 setnx
    • XX 表示当key 存在的时候,覆盖key

2.6 应用场景

  • 抖音无限点赞某个视频或者商品,点一下加一次
  • 是否喜欢文章

3、Hash的使用

3.1 Map<String, Map<Object, Object>>

3.2 一次设置一个字段值

  • hset key feild value

3.3 一次获取一个字段值

  • hget key feild

3.4 一次设置多个字段值

  • hmset key feild value [feild value ……]
    • key 表示map的key
    • feild表示 map中value的key
    • value 表示 map 中value的value

3.5 一次获取多个字段值

  • hmget key feild [feild……]

3.6 获取所有字段值

  • hgetall key

3.7 获取某个key内的全部数量

  • hlen

3.8 删除一个 key

  • hdel

3.9 应用场景

  • JD某物车早期
  • 设计目前不再采用,当前中小厂可用

4、list的使用

4.1 说明

一个双端链表的结构,容量是2的32次方减一个元素,大概40多亿,主要功能有 push/pop等,一般用在栈、队列、消息队列等场景。

4.2 向列表左边添加元素

  • lpush key value [value ……]

4.3 向列表右边添加元素

  • rpush key value [value……]

4.4 查看列表

  • lrange key start stop

4.5 获取列表中元素的个数

  • llen key

4.6 应用场景

  • 微信公众号订阅的消息

  • 商品评论列表

    • 需求:用户针对某一商品发布评论时,一个商品会被不同的用户进行评论,保存商品评论时,要按照时间排序

    • 需求:用户在前段页面查询该商品时,需要按照时间顺序降序排序

    • 实现:

      • 使用list存储商品评论信息,key是该商品的id,value是商品评论信息商品编号为 1001的商品评论key 【items:comment:1001】

      • lpush items:comment:1001 {"id":1001, "name":"huawei", "date": 1634634833, "content":"ljhgka;fafagakg;ahafaf;ohiga"}
        

5、set的使用 (无重复)

无重复数据的容器

5.1 添加元素

  • sadd key member [member……]

5.2 删除元素

  • srem key member [member……]

5.3 遍历集合中的所有元素

  • smembers key

5.4 判断元素 是否在集合中

  • sismember key member

5.5 获取集合中的元素总数

  • scard key

5.6 从集合中随机弹出一个元素,元素不删除

  • srandmember key [数字]

5.7 从集合中随机弹出一个元素,出一个删一个

  • spop key [数字]

5.8 集合运算

  • A、B
    • A : abc12
    • B: 123ax
  • 集合的差集运算 A-B
    • 属于A但是不属于B的元素构成的集合
    • sdiff key [key……]
  • 集合的交集运算 A∩B
    • 属于A同时也属于B的共同拥有的元素构成的集合
    • sinter key [key……]
  • 集合的并集运算 A∪B
    • 属于A或者属于B的元素合并后的集合
    • sunion key [key……]

5.9 应用场景

  • 微信抽奖小程序
    • 用户ID,立即参与按钮 => sadd key 用户ID
    • 显示已经有多少人参与了=> scard key
    • 抽奖(从set中任意选取N个中奖人) => srandmember key 2 => 随机抽奖两个人,元素不删除
      • spop key 3 => 随机抽奖3个人,元素会删除
  • 微信朋友圈点赞
    • 新增点赞 => sadd pub:msgID 点赞用户ID1 点赞用户ID2
    • 取消点赞 => srem pub:msgID 点赞用户ID
    • 展示所有点赞过的用户 => smembers pub:msgID
    • 点赞用户数统计,就是常见的点赞红色数组 => scard pub:msgID
    • 判断某个朋友是否对楼主点赞过 => sismember pub:msgID 用户ID
  • 微博好友关注社交关系
    • 共同关注的人
    • 我关注的人也关注他(大家爱好相同)
  • QQ内推可能认识的人

6、Zset的使用

向有序集合中加入一个元素和该元素的分数

6.1 添加元素

  • zadd key score member [score member ……]

6.2 按照元素分数从小到打的顺序,返回索引从 start 到 stop 之间的所有元素

  • zrange key start stop [withscores]

6.3 获取元素的分数

  • Zscore key member

6.4 删除元素

  • zrem key member [member……]

6.5 获取指定分数范围的元素

  • zrangebyscore key min max [withscores] [limit offset count]

6.6 增加某个元素的分数

  • zincrby key increment member

6.7 获取集合中元素的数量

  • zcard key

6.8 获取元素的排名

  • 从小到大
    • zrank key member
  • 从大到小
    • zrevrank key member

6.9 应用场景

  • 根据商品销售队商品进行排序显示
    • 思路:定义商品销售排行榜 (sorted set集合),key为goods:sellsort,分数为商品销售数量
    • 商品编号1001的销量是9,商品编号1002的销量是15 => zadd goods:sellsort 9 1001 15 1002
    • 有一个客户又买了两件商品1001,商品编号1001销量加2 => zincrby goods:sellsort 2 1001
    • 求商品销量前10名 => zrange goods:sellsort 0 10 withscores
  • 抖音热搜
    • 点击视频 => zincrby hotvcr:20211019 1 八佰
      • zincrby hotvcr:20211019 15 八佰 2 花木兰
    • 展示当日排行前10条 => zrevrange hotvcr:20211019 0 9 withscores
上一篇:【ybtoj高效进阶 21281】矩阵逆转(模拟)


下一篇:【luogu P6113】【UOJ 79】【模板】一般图最大匹配(带花树)