我想做一个在 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
}