Redis 应用场景

Redis 数据类型应用场景

Try Redis

String 应用场景

1. 单值存储

SET key value

GET key

2. 对象缓存

SET user:1 value(json 个数数据)

MSET user:1:name zhangsan user:1:balance 123 ;

MGET user:1:name user:1:balance;

3. 分布式锁

SETNX product:100 true // 返回1 代表获取锁成功

SETNX product:100 true // 返回0 代表获取锁失败

DEL product:100 // 执行万业务释放锁

SET product:100 true ex 10 nx // 防止程序意外终止导致死锁

4. 计数器

INCR article:readcount:{文章id}

GET article:readcount:{文章id}

5. 分布式系统全局序列号

INCRBY orderId 100 // Redis 批量生成序列号 提升性能

Hash

HSET key field value // 存储一个哈希表key的键值

HSETNX key field value // 存储一个不存在的哈希表key的键值对

HMSET key field value [field value …] // 在一个哈希表key 中存储多个键值对

HGET key field // 获取哈希表 key 对应的field 键值

HMGET key field [field …] // 批量获取哈希表 key中多个field键值

HDEL key field [field …] // 删除哈希表key中的field 键值

HLEN key // 返回哈希表key中的field的数量

HGETALL key // 返回哈希表 key 中所有的键值

HINCRBY key field increment // 为哈希表 key 中field 键的值加上增量increment

1.对象缓存

HMSET user {userId}:name zhangsan {userId}:balace 1688

HMSET user 1:name zhangsan 1:balance 1688

HMGET user 1:name 1:balance

 HMGET user 1:name 1:balance
1) "zhangsan"
2) "1688"
  1. 电商购物车

    以用户id为key , 商品id 为 field , 商品数量 为 value

    购物车操作:

    1. 添加商品: hset cart:100 1688 1

    2. 增加数量: hincrby cart:100 1688 1

    3. 商品总数: hlen cart:100

    4. 删除商品: hdel cart:100 1688

    5. 获取购物车所有商品 : hgetall cart:100

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GVSapf54-1681284837386)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230331215232436.png)]

      List

      1. list 差用操作

      LPUSH key value [value …] // 将一个或多个值value 插入到key 列表的标头 (最左边)

      RPUSH key value [value …] // 将一个或多个值value 插入到key 列表的标头 (最右边)

      LPOP key // 移除并返回 key 列表的头元素

      RPOP key // 移除并返回 key列表的尾元素

      LRANGE key start stop // 返回列表key 中指定区间的元素,区间以偏移量start 和 stop 指定

      BLPOP key [key …] timeout // 从 key 列表表头弹出一个元素,若列表中没有元素,阻塞等待 timeout 秒,如果timeout=0, 一直阻塞等待

      BRPOP key [key …] timeout // 从 key 列表表尾弹出一个元素,若列表中没有元素,阻塞等待 timeout 秒,如果timeout=0, 一直阻塞等待

      1. 常用数据结构

        Stack(栈) = LPUSH + LPOP = FILO

        Queue(队列) = LPUSH + RPOP

        Blocking MQ(阻塞队列) = LPUSH + BRPOP

      2. 应用 : 微博 微信公众号消息流

      张三关注了 嘟嘟 哈哈 等大V

      1. 嘟嘟发布公众号 ,消息ID 为 110

        LPUSH msg:{张三-ID} 110

      2. 哈哈发布公众号,消息ID 为 120

        LPUSH msg:{张三-ID} 120

      3. 查看最新公众号消息

        LRANGE msg:{张三-ID} 0 4

      > LPUSH msg:1 110
      (integer) 1
      > LPUSH msg:1 120
      (integer) 2
      > LRANGE msg:1 0 4
      1) "120"
      2) "110"
      

      SET 结构

      1. SET 常用操作

      SADD key member [member …] // 往集合key中存入元素,元素存在则忽略,若key 不存在则新建

      SREM key member [member …] // 从集合key中删除元素

      SMEMBERS key // 获取集合key 中的所有元素

      SCARD key // 获取集合key中所有元素个数

      SISMEMBER key member // 判断member 元素是否存在于集合 key 中

      SRANDMEMBER key [count] // 从集合key中选出count个元素,元素不从key中删除

      STOP key [count] // 从集合key中选出count个元素,元素从key中删除

      1. SET 运算操作

        SINTER key [key …] // 交集运算

        SINTERSTORE destination key [key …] // 将交集结果存入新集合 destination中

        SUNION key [key …] // 并集运算

        SUNIONSTORE destination key [key…] // 将并集结果存入新集合 destination中

        SDIFF key [key…] // 差集运算

        SDIFFSTORE destination key [key…] // 将差集结果存入新集合 destination中

      3. 微信抽奖小程序

      1. 点击参与抽奖键入集合

      SADD key {userId}

      1. 插卡参与抽奖所有用户

        SMEMBERS key

      2. 抽取 count 命中中奖者

      SRANDMEMBER key [count] // 可重复抽奖

      SPOP key [count] // 只可以参与一次抽奖

      > sadd act:100 1
      (integer) 1
      > sadd act:100 2
      (integer) 1
      > sadd act:100 3
      (integer) 1
      > sadd act:100 4
      (integer) 1
      > sadd act:100 5
      

(integer) 1
> SMEMBERS key

  1. “1”

    SMEMBERS act:100

  2. “1”
    2) “2”
  3. “3”
    4) “4”
  4. “5”

    SRANDMEMBER act:100 2

  5. “2”
    2) “4”

SRANDMEMBER act:100 2
1) “5”

  1. “4”

    SPOP act:100 2

  2. “3”
    2) “1”

SPOP act:100 2
1) “4”

  1. “5”

    SPOP act:100 2

  2. “2”
    
    
    
    #### 4. 微信点赞 收藏 标签 
    
    1. 点赞
    
       SADD like:{消息ID} {用户ID}
    
    2. 取消点赞
    
       SREM like:{消息ID} {用户ID}
    
    3. 检查用户是否点过赞
    
       SISMEMBER like:{消息ID} {用户ID}
    
    4. 获取点赞的用户列表
    
       SMEMBERS  like:{消息ID} 
    
    5. 获取点赞用户数
    
       SCARD like:{消息ID}
    
    
    
    ~~~sql
    

SADD like:100 1
(integer) 1
SADD like:100 2
(integer) 1
SADD like:100 3
(integer) 1
SADD like:100 4
(integer) 1
SADD like:100 5
(integer) 1
SREM like:100 1
1
SISMEMBER like:100 1
(integer) 0
SISMEMBER like:100 2
(integer) 1
SMEMBERS like:100

  1. “2”
  2. “3”
  3. “4”
  4. “5”

SCARD like:100
4


#### 5. 集合操作实现微博微信关注模型

共同关注了 xxx



我关注的人也关注了 他 xxx



我可能认识的人:



~~~sql
# zhangsan 关注的人
> sadd zhangsanSet 1isi wangwu zhaoliu
(integer) 3
# lisi 关注的人
> sadd 1isiSet wangwu zhaoliu zhangsan
(integer) 3
# wangwu 关注的人
> sadd wangwuSet zhaoliu zhangsan dudu haha
(integer) 4
# zhangsan 和 lisi 共同关注
> SINTER zhangsanSet 1isiSet
1) "zhaoliu"
2) "wangwu"
# zhangsan 关注的人也关注他
> SISMEMBER zhangsanSet "1isi"
(integer) 1
> SISMEMBER wangwuSet "1isi"
(integer) 0
# 我可能认识的人
> SDIFF zhangsanSet wangwuSet
1) "1isi"
2) "wangwu"
> SDIFF zhangsanSet wangwuSet lisiSet
1) "1isi"
2) "wangwu"

ZSet 有序集合结构

  1. ZSet 常用操作

    ZADD key score member [[score member] …] // 往有序集合key中加入带分值元素

    ZREM key member [member …] // 从有序集合key中删除元素

    ZSCORE key member // 返回有序集合key中元素member的分值

    ZINCRBY key increment member // 为有序集合key中元素member的分值加上 increment

    ZCARD key // 返回有序集合key中元素个数

    ZRANGE key start stop [WITHSCORES] // 正序获取有序集合key从start下标到stop下标的元素

    ZREVRANGE key start start stop [WITHSCORES] // 倒序获取有序集合key从start下标到stop下标的元素

  2. Zset 集合操作

    ZUNIONSTORE destkey numkeys key [key …] // 并集计算

    ZINTERSTORE destkey numkeys key [key …] // 交集计算

  3. ZSet 集合操作实现排行榜

    1. 点击新闻

      ZINCRBY hotNews:20230401 1 总理记者会

    2. 展示当日排行前十

      ZREVRANGE hotNews:20230401 0 9 WITHSCORES

    3. 七日搜索排行榜单计算

      ZUNIONSTORE hotNews:20230325-20230401 7 hotNews:20230325 hotNews:20230326 … 20230401

    4. 展示七日排行前十

      ZREVRANGE hotNews:20230325-20230401 0 9 WITHSCORES

ZSet 集合操作实现排行榜

  1. 点击新闻

     ZINCRBY hotNews:20230401  1  总理记者会

  2. 展示当日排行前十

     ZREVRANGE   hotNews:20230401  0  9 WITHSCORES

  3. 七日搜索排行榜单计算

     ZUNIONSTORE  hotNews:20230325-20230401 7    hotNews:20230325   hotNews:20230326 ... 20230401

  4. 展示七日排行前十

     ZREVRANGE    hotNews:20230325-20230401 0  9 WITHSCORES

你可能感兴趣的:(redis,java)