(1)使用redis 实现存储验证码、存储用户信息,并使用两个拦截器对用户信息的有效期进行刷新。
(1)更新缓存保证数据一致性最好采用先更新数据库,再删除缓存。这样可以使发生数据不一致的情况降到最低。
(2)添加事物注解使二者同步更新。
(3)缓存穿透两种解决办法:缓存空对象、布隆过滤。
(4)缓存穿透、雪崩、击穿相关知识点:https://zhuanlan.zhihu.com/p/323249499
(1)使用redis 实现全局唯一ID生成器。
(2)实现秒杀的下单功能。
(3)使用乐观锁解决秒杀超卖问题。
(4)使用悲观锁解决单体项目的一人一单问题。
(5)使用redis 实现分布式锁——版本1。
(6)解决不同线程的锁误删除问题。
(7)使用lua 脚本解决原子性问题。
(8)使用Redisson 便捷实现锁功能。
(9)使用阻塞队列将秒杀下单同步执行过程优化成异步执行。
此部分有待改进。因为:1.阻塞队列容易满,内存溢出了。2.数据存在JVM 上,如果突然宕机,数据就全都丢失了。
(10)改进:使用RabbitMQ 实现消息队列代替阻塞队列。
(1)查看探店笔记。
(2)点赞功能。
(3)为了实现按照点赞时间顺序排序功能,使用SortedSet 替代set 。并且使用order by field(id, .. ) 字段解决数据库查询默认按照id 递增顺序的不足。
(1)关注和取关。
(2)使用set 查交集的方法实现查看共同关注。
(3)推送到粉丝收件箱(注意list 与sortedset 的区别,要实现分页中数据索引可能变化的分页查询,应该使用sortedset 来避免查重复数据)。
(4)使用SortedSet 实现滚动分页查询,结合order by field(id, .. ) 字段解决数据库查询默认按照id 递增顺序的不足。
(1)使用BitMap (位图)实现签到功能。
(2)查询连续签到天数。
(1)使用HyperLogLog 实现UV 统计。