openRin / Rin

⚡Dynamic blog based on Cloudflare Pages + Workers + D1 + R2
https://rin-docs.xeu.life
MIT License
1.55k stars 678 forks source link

[Bug] 缓存问题 #253

Open PSGO opened 2 months ago

PSGO commented 2 months ago

编辑文章后,D1数据库中feed数据是正确的,但是文章展示是旧的,在设置中多次清除缓存依然是旧的,Ctrl f5依然是旧的,多次刷新会出现新旧交替的情况,没有固定规律

OXeu commented 1 month ago

看起来应该是 Cloudflare worker 复用的问题,通常半个小时后应该就会恢复正常

PSGO commented 1 month ago

看起来应该是 Cloudflare worker 复用的问题,通常半个小时后应该就会恢复正常

好的,我重新部署再观察一下,谢谢回复

panghaibin commented 1 week ago

感觉把这里 https://github.com/openRin/Rin/blob/d0eeaf0f1047ddcf4dc20b6ff36080b76a8d7c13/server/src/utils/cache.ts#L34

改成

const response = await fetch(new Request(`${this.cacheUrl}?_t=${new Date().getTime()}`))

也许能缓解。不过缓存脏读没找到稳定复现的方法,没法验证是否能修复。 改了以后还是没修复,不是这个问题

panghaibin commented 5 days ago

你的文章是不是设置了别名?在设置了别名且通过别名访问文章的情况下,能复现缓存错乱

https://github.com/openRin/Rin/blob/d0eeaf0f1047ddcf4dc20b6ff36080b76a8d7c13/server/src/services/feed.ts#L477-L487

@OXeu 这里的逻辑有点没看懂,仅当别名更改时才清除别名的缓存吗?

OXeu commented 5 days ago

你的文章是不是设置了别名?在设置了别名且通过别名访问文章的情况下,能复现缓存错乱

https://github.com/openRin/Rin/blob/d0eeaf0f1047ddcf4dc20b6ff36080b76a8d7c13/server/src/services/feed.ts#L477-L487

@OXeu 这里的逻辑有点没看懂,仅当别名更改时才清除别名的缓存吗?

看起来确实是个判断的 bug

panghaibin commented 4 days ago

有点疑惑typedi在CloudFlare Workers的生命周期是多少?按理说每次请求都应该会重新实例化CacheImpl才对,但从打的日志上看,有时这个请求只打了Cache hit的日志,没打Cache load的,应该每次请求都要触发load()才对吧?

OXeu commented 3 days ago

有点疑惑typedi在CloudFlare Workers的生命周期是多少?按理说每次请求都应该会重新实例化CacheImpl才对,但从打的日志上看,有时这个请求只打了Cache hit的日志,没打Cache load的,应该每次请求都要触发load()才对吧?

单个 worker 短期内是会处理多个请求的,并不是每个请求都创建一个新的