redis之数据类型实践案例

业务场景1:计数器(string类型)(限时结算)

人工智能领域的语义识别与自动对话将是未来服务业机器人应答呼叫体系中的重要技术,百度自研用户评价语义识别服务,免费开放给企业试用,同时训练自己的模型。现对试用用户的使用行为进行限速,限制每个用户每分钟最多发起10次调用

解决方案

  • 设计计数器,记录调用次数,用于控制业务执行次数。以用户id作为key,使用此时作为value
  • 在调用前获取次数,判断是否超过限定次数,不超过次数的情况下,每次调用计数+1,业务调用失败,计数-1
  • 设定10min为一个周期,一个周期结束后,自动清空周期内使用次数

redis计数器 incrby redis计数器的案例_数据库

改进解决方案

  • 取消最大值的判定,利用incr操作超过最大值抛出异常的形式替代每次判断是否大于最大值
  • 判断是否为nil,如果是,设置为Max-次数如果不是,计数+1业务调用失败,计数-1
  • 遇到异常即+操作超过上限,视为使用达到上限

业务场景二:微信消息显示顺序(list类型)

使用微信的过程中,当微信接收消息后,会默认将最近接收的消息置顶,当多个好友及关注的订阅号同时发送消息时,该排序会不停的进行交替,同时还可以将重要的会话设置为置顶。一旦用户离线后,再次打开微信时,消息该按照什么样的顺序显示?

解决方案

由于应该是新消息放在最前面显示,即晚到的消息先显示,需要利用list类型的栈特性。给置顶消息和普通消息分别创建一个list,按照消息类别存入相应的list,如果list里存在某用户的消息,该用户的消息再次到来时,需要删除list里对应的消息,然后再添加该用户(此处只针对顺序问题,消息内容本身也有相应的解决办法)

redis计数器 incrby redis计数器的案例_redis计数器 incrby_02


set存放置顶的朋友,用于区分消息类型,便于存放到对应的list解决方案

redis计数器 incrby redis计数器的案例_redis计数器 incrby_03