session
问题:session存在tomcat服务器,多个服务器之间session不共享,nginx会将请求打到不同的服务器
tomcat处理:session拷贝
缺点:
- 存储多份,内存浪费
- 拷贝有延迟
redis处理优点:
- 数据共享
- 内存存储——速度快
- key-value存储 便于查找
key要求唯一、方便携带查找
应当设置ttl,避免存储过长时间,占据内存
value可用json转为string存储,也可适用hash,便于单字段的修改
value中可将一些敏感数据去除
备注:
- cookie中包含sessionId,前端携带cookie到服务器,服务器取出sessionId,查找到session。tomcat自动维护session。
- 每个浏览器不同的session
- 可在redis中存储token-user的键值对,每次操作根据token查询,如果查到,则说明token有效,刷新其ttl。若长期不操作,token过期,redis删除该token,下次使用时无法查到
缓存
优点:
- 降低后端负载
- 效率高,响应快
问题:
- 数据一致性
- 保持数据一致性,代码维护
- 保持缓存高可用,运维
缓存更新方式
- 编码,更新数据库时更新缓存。使用较多
- 服务,服务中维护缓存和数据库一致性,其他方只调用即可。没有现成的服务,自己编写,麻烦。
- 直接操作缓存,另起任务异步更新到数据库。缓存如果挂掉,数据丢失。
删除缓存vs更新缓存
- 更新缓存:多次更新,但可能数据没有使用,多次更新无用
- 删除缓存:删除缓存,查询时,未命中,到数据库查
缓存和数据库操作原子性
- 单体系统:事务
- 分布式:ttc等分布式事务系统
缓存和数据库操作顺序
右边查询速度比左边更新速度快,所以出现上述情况概率高
左边查询速度比右边更新速度快,所以出现上述情况概率低