Q:用户如果更换了昵称,如何快速更换 token 中保存的用户昵称呢?
A:在更换用户昵称,同时更换修改端的 token。如果我们的用户有多个客户端,那么可以利用缓存更新提及的 Version 版本号,让客户端定期检测判断 token 是否需要更换。
对于这个问题,置顶留言里 @徐曙辉同学的回答也很有趣:
如果我来做快速更换昵称的功能,有两种方式:
a. 在用户修改昵称后,内存中加入一个用户标识,解析 token 后读取该标识,有则返回特定 code,让客户端重新拿 token。甚至可以不用客户端参与,返回 301 重定向到获取新 token 的路由。
b. token 里面不存用户信息,只存用户 ID,需要用户信息的时候从缓存读。
徐同学的第一个解法很暴力,但是很有趣。
第二个方式也很有意思,这里我也补一个应用技巧:我们可以通过设定固定网址 user/ 用户 uid/heaer.jpg 方式,直接获取用户头像,这样也不用考虑更新问题了。
围绕着我的补充,这个话题还有后续讨论,我也一并展示出来,仍然是徐同学的回答:
按这样做,头像可以 http://xx.com/user/ 用户 ID/header.jpg,静态文件可以,因为反正都是远程 http 渲染。但是昵称和其他信息都这样处理,每一项都放到远程地址性能不是很好,是不是可以 http://xxx.com/user/ 用户 ID/info.json,再反序列化呢?
这样确定是占了额外的存储空间,优点是不用查 DB 和缓存,减少它们的压力,在 Web 应用中,用户信息读取挺频繁。
我认为这个思路很优秀,建议尽量使用对象存储做。关于对象存储的话题,你还可以参考第二十一节课的内容,我在里面详细分享了对象存储如何管理小文件和大文本。
HTAP = OLAP + OLTP
- OLTP (Online Transaction Processing,在线事务处理)
- OLAP (Online Analytical Processing,在线分析处理)
- HTAP (Hybrid Transaction/Analytical Processing,混合事务/分析处理)