有张任务表和任务表下的子任务表(一个任务下有多个子任务) 这两张都是后台运营去配置的 然后现在有张用户已领取的任务表和其下的子任务表 现在有一种情况就是 用户领取完任务后 可能运营修改了配置表 然后为了用户体验 已领取的任务不做改变 兄弟们这要怎么设计更好一点我跟技术经理说 可以在用户已领的任务表和子任务表做全量冗余做为备份 他说这样业务量大起来之后不行让我再想想
时间: 2024-03-11 15:45:25 浏览: 88
对于这种情况,我认为可以采用事件溯源的设计思路,即将每个任务和子任务的配置修改操作记录下来,形成一个事件流。当用户领取任务时,记录下此时的事件流快照,作为用户已领取的任务表和子任务表的备份。当运营修改配置表时,会生成新的事件流,此时可以通过比较新旧事件流的差异,计算出需要修改的用户已领取的任务和子任务,并将这些修改应用到备份表中。这样可以避免全量冗余造成的存储压力,同时也可以保证用户已领取的任务和子任务的数据始终是最新的。
相关问题
不过在后台同时启一个定时任务去定时地更新这个缓存
在后台设置定时任务自动更新缓存是一种常见的技术策略,用于保持数据的新鲜度,尤其是在分布式系统或高并发环境中。通常的做法是在服务器端编写一个定时脚本或使用专门的任务调度框架(如Spring Boot的Quartz、Java的ScheduledExecutorService,或者Node.js的cron等),该脚本会在设定的时间间隔执行,从数据库或其他数据源获取最新的数据,然后替换掉缓存中的旧数据。
例如,在Spring Boot应用中,可以这样配置:
```java
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class CacheUpdater {
@Autowired
private MyCacheRepository cacheRepository; // 假设这是你的缓存存储库
@Scheduled(cron = "0 0/5 * * * ?") // 每五分钟执行一次
public void updateCache() {
List<MyData> latestData = cacheRepository.fetchLatestData(); // 获取最新数据
cacheRepository.updateCache(latestData); // 更新缓存
}
}
```
在这个例子中,`@Scheduled`注解用于标记方法为定时任务,`cron`表达式定义了时间规则(这里每5分钟执行一次)。当定时到达时,`updateCache`方法会被调用,更新缓存中的数据。
active中会有多个任务吗
是的,通常情况下,在一个系统中,可能会同时存在多个任务处于active状态。这些任务可以是同一种类型的任务,也可以是不同类型的任务。
例如,在一个Web服务器上,可能有多个客户端同时发起请求,每个请求都需要处理成一个任务并进入active状态。此外,系统可能还会有一些后台任务,例如日志记录、数据备份等等,这些任务同样也会进入active状态。
在处理多个任务时,通常需要考虑任务的优先级、并发性、资源利用效率等问题,以保证系统的稳定性和高效性。