保留Redis时如何清理头像缓存

7 人参与

上周我差点被用户投诉淹没了!网站更新后,用户上传的头像总是显示不出来,要么是默认头像,要么干脆变成破图。折腾了一整天才发现,原来是Redis缓存和头像系统闹别扭了。

这个缓存问题有多烦人?

想象一下,用户兴冲冲上传了新头像,结果刷新页面看到的还是那个呆板的默认头像。更气人的是,有时候头像会闪现一下,然后又变回去了,就像在逗你玩似的。我们后台明明收到了用户上传的头像文件,但前端就是显示不出来。

为什么Redis会让头像缓存出问题?

其实原因很简单:WordPress自带的缓存系统和Redis插件各自为政。用户更新头像时,主题只清除了WordPress的缓存,但Redis那边还存着旧的头像数据。下次用户访问时,系统从Redis里拿到了过期的缓存,自然就显示不出新头像了。

我找到的解决方案

经过反复测试,我发现最有效的办法是双管齐下:既要修改头像获取逻辑,又要完善缓存清理机制。

  • 在头像获取函数里,我直接绕过了缓存系统,避免Redis和WordPress缓存打架
  • 在用户更新头像时,同时清理WordPress和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带来的性能优势,只是让它不再干扰头像系统。

如果你也遇到了类似问题,不妨试试这个方案。记住要先备份文件,修改后记得在多个浏览器测试效果。毕竟,谁都不想因为一个头像显示问题失去用户,对吧?

文章版权归作者所有,未经允许请勿转载。

参与讨论

7 条评论
通知图标

正在阅读:保留Redis时如何清理头像缓存