Redis场景设计

目录

Sting存储

实现分布式锁

Hash数据场景

List数据场景

Set集合数据场景

Set集合特殊指令应用场景


Sting存储

  1. Key设计注意事项
    1. 一般以业务功能模块、表名或者业务模块开头,尽量短小精悍
  2. 常见引用场景
    1. 计数功能:文章点击数
      1. 各类场景下的标识号 incrby serialNo 1000:订单号
      2. 每次生成订单会去redis请求生成订单号,但是redis上限是10W/s请求量,如果高并发下会耗尽redis资源无法进行其它操作,解决方案是一次请求预先分配多个订单号缓存到tomcat,下次请求会优先用缓存中的订单号
    2. 集群环境下的Session共享
      1. 两次请求到不同tomcat,只有第一次tomcat有session,解决方案是把session会话存储到redis,下次登录会验证redis中session是否过期

实现分布式锁

  1. redis分布式锁基础知识
    1. 利用SETNX key value,key不存在返回true,如果key存在返回false实现
    2. 给定key设置的生存时间,当key过期时,它会被自动删除
    3. 用lua脚本原子性操作redis主动删除加锁值
  2. redis加锁正确姿势
    1. 加锁:通过setnx向特定的key写入一个随机值,并同时设置失效时间,写值成功既加锁成功SET key value NX PX 15000
      1. 失效时间避免死锁
      2. 加锁时,每个节点产生一个随机字符串,避免锁误删除
      3. 写入随机值与设置失效时间必须同时,保证加锁时原子性
  3. 解锁:匹配随机值,删除redis上的特点key数据,要保证获取数据、判断一致以及删除数据三个操作是原子的

Hash数据场景

  1. 淘宝购物车
    1. 全选功能-获取所有该用户的所有购物车商品:hgetall gouwuche:001
    2. 商品数量-购物车图标上要显示购物车里商品的总数:hget gouwuche:001 prod:001
    3. 删除-要能移除购物车里某个商品:hdel gouwuche:001 prod:001
    4. 增加或减少某个商品的数量:hincrby gouwuche:001 prod:001 5

List数据场景

  1. 阻塞队列:比如brpop,只有当redis没数据时候才会阻塞,有数据时候不会阻塞
  2. 订阅号消息:多个订阅号在不同时间发布消息通过下图展示,key为用户ID

Set集合数据场景

  1. 抽奖系统:key为活动ID

  1. 朋友圈点赞:key为朋友圈消息ID
    1. 如果用Set设计无法排序
    2. 可以用zset集合来设计

Set集合特殊指令应用场景

  1. 交集并集差集
    1. setA={A,B,C}     setB={B, C}
      1. 集合与集合之间的交集:sinter setA setB-->得到集合{B,C}
      2. 集合与集合之间的并集:sunion setA setB -->得到集合{A,B,C}
      3. 集合与集合之间的差集:sdiff  setA setB-->得到集合{A}
  2. 设计微博维关系设计
    1. James老师关注的人:sadd jamesCares lison peter king av
    2. Lison老师关注的人:sadd lisonCares james av cjk king
    3. av老师关注的人:sadd avCares deer cjk king
    4. James和lison共同关注的人:sinter jamesCares lisonCares,计算结果为 {av, king}
    5. 我关注的人也关注他(king老师)
      •  sismember lisonCares king
      • sismember avCares king 
    6. 我可能认识的人:SDIFF lisonCares jamesCares-> {james.cjk}
    7. 新闻热搜:key为日期,会出现值越来越大,可以适当分小时等分段操作
      1. 点击话题:zincrby topic:20201111 1 文章名称
      2. 实现前8排行榜:zrevrange topic:20201111 0 8 withscores
      3. 统计近3日点击数据:zunionstore topic:3day 3 topic:20201113 topic:20201112 topic:20201111
      4. 展示近3日的排行前8名:zrevrange topic:20201113-20201111 0 8 withscores
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值