php消息撤回,“撤回”功能的技术方案设计尝试

很多IM都提供撤回的功能,即:

1、消息发送方消息发出后2分钟之内可以选择撤回,则接收方的客户端会将对应消息变为 “***撤回一条消息”;

2、撤回的消息1天之后不展示在对话框中;

消息主表 Message 的 status 字段扩展一个状态:撤回。如果用户选择撤回,则将这条消息的状态变为撤回即可;

尝试撤回的时候,先判断 created_at 是不是2分钟以前的,如果是则提示撤回失败;如果不是,则更改 status  字段。

如果用户当前正打开着对话框,由前端将具体消息替换为:”***撤回一条消息“;如果用户重新打开对话框的时候,读取到撤回状态的消息,则替换为:”***撤回一条消息“;

起一个定时任务,每分钟跑一次,将24小时之前的撤回状态的消息标记为已删除;

但是大流量的系统肯定都有缓存,那消息撤回之后缓存里面的数据如何更新呢?

首先,缓存key的设计上以对话框为单位,无论两人对话还是群消息,都是一个key;缓存的内容上,包括 sender+content+create_time;缓存的介质采用 Redis 的 list;缓存的长度上,只保存最近100条的数据即可;缓存的更新策略采用主动更新+被动失效,如果消息有变更,主动触发更新缓存的策略,如果长期没有消息变更,则1天后缓存失效。

这样的话,如果消息被撤回,触发异步流程,从数据库里读取最新的消息到缓存中即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值