Redis登录校验
登录拦截器
第一个拦截器只是确保一切请求都要进行token刷新的大动作
第二个拦截器从ThreadLocal中获取user用户
缓存一致性如何解决
并发情况下发生缓存不一致的问题,主要是因为写数据库和写缓存不是原子的
先写缓存,再写数据库
先写数据库,再写缓存
先删缓存,再写数据库
删缓存很快,写数据库很慢,所以图二不一致情况很容易发生
先写数据库,再删缓存
图二发生的概率不高,因为写入缓存速度比较快,不太可能缓存写入的时候更新数据库
缓存双删机制
使用Canal监听BinLog
缓存问题
缓存穿透
StrUtil.isBlank()里面null、""、\t\n都会返回true,注意从Redis中查询结果后,先判断是否为null、""、\t\n,不是的话说明Redis里面有值,直接拿来用就行,是""的话说明缓存了一个空值,要返回“店面信息不存在!”
缓存雪崩
缓存击穿(热点key问题)
目的是解决缓存重建这段时间的并发问题。
三个问题中,只有缓存击穿是解决多线程并发造成的问题
优惠券秒杀
全局ID生成器
唯一性、高可用、高性能、递增性、安全性
一秒内增加id是要加锁吗
超卖问题
实现一人一单
将userId作为synchronized的锁,因为一个用户不能买抢多个券,但是多个用户并发的过程中不要让他串行执行
先获取锁,然后再提交事务,才能保证线程安全
集群操作
集群操作中,加了sync锁也会造成并发问题,失效
多个JVM如何使用同一把锁?