上周我差点被用户投诉淹没了!网站更新后,用户上传的头像总是显示不出来,要么是默认头像,要么干脆变成破图。折腾了一整天才发现,原来是Redis缓存和头像系统闹别扭了。
想象一下,用户兴冲冲上传了新头像,结果刷新页面看到的还是那个呆板的默认头像。更气人的是,有时候头像会闪现一下,然后又变回去了,就像在逗你玩似的。我们后台明明收到了用户上传的头像文件,但前端就是显示不出来。
其实原因很简单:WordPress自带的缓存系统和Redis插件各自为政。用户更新头像时,主题只清除了WordPress的缓存,但Redis那边还存着旧的头像数据。下次用户访问时,系统从Redis里拿到了过期的缓存,自然就显示不出新头像了。
经过反复测试,我发现最有效的办法是双管齐下:既要修改头像获取逻辑,又要完善缓存清理机制。
具体来说,我在主题的zib-theme.php文件里做了两处关键修改:
// 在头像更新时同步清理缓存
add_action('user_save_custom_avatar', function ($user_id, $img_id, $url) {
wp_cache_delete($user_id, 'user_avatar');
if (function_exists('wp_cache_flush_group')) {
wp_cache_flush_group('user_avatar');
}
}, 10, 3);
修改之后,用户上传头像的体验简直丝滑!点击保存后立即就能看到新头像,再也没有了烦人的闪烁问题。最重要的是,我们保留了Redis带来的性能优势,只是让它不再干扰头像系统。
如果你也遇到了类似问题,不妨试试这个方案。记住要先备份文件,修改后记得在多个浏览器测试效果。毕竟,谁都不想因为一个头像显示问题失去用户,对吧?
文章版权归作者所有,未经允许请勿转载。
参与讨论
感觉还行。
这缓存真是个闹心的老毛病。
我之前也手动删过Redis,挺麻烦的。
别忘了清理对象缓存,否则还是旧图。
Redis缓存到底怎么清?有步骤吗?
哈哈,之前也被头像坑过 😂
这招真的管用,头像立刻对上。