kevinzhwl
V2EX  ›  编程

请教连续签到的问题

  •  
  •   kevinzhwl · Nov 2, 2017 · 3075 views
    This topic created in 3176 days ago, the information mentioned may be changed or developed.

    正在做一个连续签到接口,遇到如何正确的显示签到进度问题

    情况如下

    数据库: 记录需要总签到天数 dayMax,已经连续签到天数 dayCount,和最近一次签到时间 lastTime

    一个 GET 接口,读取用户的签到进度,得到类似 dayCount/dayMax 一个 UPADTE 接口,用户签到,如果连续,则 dayCount 增加;如果不连续,则 dayCount=1,并更新 lastTime

    现在的问题是如果用户中断签到后,再次打开页面,签到进度是 dayCount/dayMax,这个不符合业务逻辑;应该是 0/dayMax。

    现在纠结三个不同解决方案,

    方案 1,在 GET 接口中,对上述情况判断并处理,返回 0/dayMax,但不更新数据库(一般读取都在从库)。这样导致前端得到的数据和后台的看起来不一致。

    方案 2,在 GET 接口中,对上述情况判断并处理,返回 0/dayMax,同时更新数据(只能在主库上做)。这样做消耗资源少,但违背了 GET 幂等性,带有副作用。

    方案 3,增加定时任务,在某一时刻将所有不符合的条件的用户的 dayCount 都改为 0。这个方案符合规范,但开发量多,而且会造成短时对资源消耗大。

    求哪位经验 dalao 给指点一下。

    3 replies    2017-11-02 10:46:58 +08:00
    rzti483NAJ66l669
        1
    rzti483NAJ66l669  
       Nov 2, 2017 via iPhone   ❤️ 1
    datetime 是可以计算时间差的。
    hxsf
        2
    hxsf  
       Nov 2, 2017 via iPhone
    幂等的意思不是 执行不改变状态
    而是执行一遍和多遍结果一致
    kevinzhwl
        3
    kevinzhwl  
    OP
       Nov 2, 2017
    @hxsf 这个解释比我理解的更准确,让我少了些纠结。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   936 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:51 · PVG 05:51 · LAX 14:51 · JFK 17:51
    ♥ Do have faith in what you're doing.