实战案例 - 图1


集群session 共享问题

Tomcat 也提交了一个数据共享机制,但是因为多台 Tomcat 之间数据有时效性,所以没采用这种方式;

session共享问题:多台Tomcat并不共享session存储空间,当请求切换到不同tomcat服务时导致数据丢失的问题。
session的替代方案应该满足:

  1. 数据共享
  2. 内存存储
  3. key、value 结构

image.png


Redis 存对象的数据结构选择

  1. 保存登录的用户信息,可以使用String结构,以JSON字符串来保存,比较直观,但修改数据时,需要维护整条数据记录;

image.png

  1. Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD,并且内存占用更少;

image.png


缓存

缓存击穿

解决方案互斥锁与逻辑过期

image.png

生成全局唯一ID

全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性:

  • 唯一性
  • 高可用
  • 高性能
  • 递增型
  • 安全性

为了增加ID的安全性,我们可以不直接使用Redis自增的数值,而是拼接一些其它信息
image.png

ID的组成部分:

  • 符号位:1bit,永远为 0
  • 时间戳:31bit,以秒为单位,可以使用69年
  • 序列号:32bit,秒内的计数器,支持每秒产生2^32个不同ID

    业务

    Feed 流的实现

    image.png

传统分页和滚动分页

Redis 中要用 sort set 数据结构,基于 score 排序而不是角标;

地理位置数据结构

Redis 中 GEO 数据结构

用户签到

每个用户每天签到情况,使用 BitMap 数据结构;

连续签到时,要充分利用二进制的位移运算;

UV 和 PV

Redis 数据结构:HyperLogLog