续上一条 Redis刷新token保证用户无感: 1. 使用access_token和refresh_token 2. 在access_token即将过期前自动刷新 3. 用户活跃时延长token有效期 4. 客户端在后台异步刷新token 5. token过期后短时间内仍可使用,同时刷新 点赞排行实现及数据持久化: 1. 使用ZSET存储,score为点赞数 2. 定期将热门数据持久化到MySQL 3. 热数据保存在Redis,冷数据存入MySQL 4. 设置定时任务每天/周从MySQL加载基础数据到Redis 5. 只更新有变化的数据,而非全量刷新 乐观锁实现: 1. 表中增加version字段,更新时检查版本 2. 条件更新 UPDATE table SET data=?, version=version+1 WHERE id=? AND version=? SQL优化问题 多表连接优化: 1. 减少连接表数量 2. 索引优化 3. 小表驱动大表 4. 尽量使用内连接而非外连接 5. 将过滤条件尽量下推到基表 6. 避免笛卡尔积 多表连接分页查询优化: 1. 先获取分页ID,再关联查询详细数据 2. 先对主表分页,再与其他表连接 3. 尽量使用索引覆盖避免回表 4. 将WHERE条件提前执行 5. 使用临时表存储中间结果 多表连接索引创建及联合索引作用: 1. 在所有JOIN条件字段上创建索引 2. WHERE条件字段创建索引 3. ORDER BY字段创建索引 4. 联合索引作用最左前缀匹配 索引覆盖 减少回表次数 提高连接效率 SQL执行顺序: FROM > JOIN > WHERE > GROUP BY > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT MySQL提高扫描效率的方法: 1. B+树索引减少磁盘IO次数 2. 根据成本选择最优执行计划 3. InnoDB buffer pool缓存热数据 4. 提前读取可能需要的数据页