综合百科

unfinish什么意思啊

unfinish什么意思啊

当前无论是游戏、应用还是其他软件,任务签到系统都成为了不可或缺的一部分,它是一种有效的运营留存手段。在开发工作中,我常被朋友问及如何设计一个通用的任务系统,今天我将结合自己的经验,与大家分享这一思路。

我们的任务系统多以事件驱动。比如,当用户进入应用、完成几场游戏胜利、每日签到、结识新朋友或进行充值等操作时,这些都会触发相应的任务事件。

在系统设计中,这些事件有的通过应用上报得以实现,有的则是系统内部业务产生的附加消息。这些消息会在系统内部通过消息队列(mq)进行解耦,使消息系统能够其所关心的消息。大体设计思路如下所述:

任务中心架构设计概述

在任务系统内,任务对象的设计至关重要。通常这些任务是由运营人员进行配置的,因此我们需要对任务对象进行合理的设计。标准的任务包含以下几个关键字段:触发事件类型、触发阶段次数、触发类型(连续或累计)以及阶段奖励等。程序需要对这些触发事件和触发类型进行逻辑实现。而管理平台则通过选择的方式,基于上述参数组合不同的任务。

任务对象详细设计

完成任务对象的数据结构设计后,我们需要进一步设计用户任务数据。这包括用户是否完成了某个任务、完成到了哪个阶段、完成后的奖励发放以及阶段重置等,这些都基于用户的任务参与数据进行。接下来我们将进行用户任务数据存储设计的详细阐述。

任务数据存储设计重点

整个任务参与数据我们选择使用redis来实现,这主要有两个好处:一是处理速度快;二是可以很好地利用redis的有效期缓存,实现数据的自动清理。

以每日/周任务为例,来看看这类任务的缓存设计是如何进行的。每日任务指的是用户当日触发某个事件达到一定次数以表示是否完成任务,以及完成任务后是否领取奖励(也可能有自动发放奖励的需求)。昨天的数据不会在今日/周内生效(按天/周进行统计)。针对这样的需求,我们的缓存设计大致如下:

对于每日/周的缓存设计,可能会有人觉得使用K/V结构是否足够。事实上,我们确实没有利用redis的复杂数据对象,因为redis最高效的操作就是字符串的存取。这里的key和value的意义可以参考上述设计,程序中会进行相应的分割处理,具体代码实现如下:

以上就是整个事件触发的核心处理代码,是不是感觉非常简单易懂?

除了每日和每周的任务,还有其他的任务类型,如签到任务、每月任务和成长任务等,它们的大体设计思路是相同的。我将会给出具体的缓存实现设计如签到类任务的缓存设计和成长任务的缓存设计。

总结


unfinish什么意思啊

你可能也会喜欢...