0

我想做一个在 TTL 快完成时更新 Redis 缓存的任务......比如如果缓存中的数据将在 30 秒内被删除然后更新缓存并重置 TTL,但如果缓存中的数据将在 5 分钟内被删除,然后什么都不做

我也想用 调用这个函数Go routine,因为我希望它只是一个后台进程

现在我想在 golang gin 服务器中实现这个设置,我不确定并发请求将如何影响这个设置......

我担心的是 ,假设我的服务器同时收到 50 个请求,并且缓存也将在 30 秒内过期,所有这 50 个请求都会尝试更新我的缓存吗?

如果是,那么我该如何防止它..如何确保不会发生我的缓存的并发更新..

下面给出的是我想要做的一个小代码表示


func APIController() {
    data = GetData(id)

    c.JSON(200,data)
}

func GetData(id int) {
    value , err := redis.Get(cacheKey);

    if err == nil {
        
        if(redis.TTL(cacheKey) < 30) {
            go updateCacheFunc()
        }

        return value;
    }

    //key not in redis , fetch from DB and return   

}
4

0 回答 0