事件消息
开始
否
blocking事件写
互斥
移除缓存时间
释放X锁
结束
RMDB
缓存数据库
消息代理
事件
获取事件X锁
blocking写重置ttl
超时未更新
写入RMDB
setnx
event-a:blocking(with expiration)
是
查询超时未更新的数据
expire blockingkey
更新缓存数据set eventId data
ts2 -> eventId2
定时任务
ts1 -> eventId1
移除缓存数据
event-b:blocking(with expiration)
是否成功
get缓存数据
事件处理器
JAVA客户端(consumer)
pull事件
setnx blocking key with expiration
事件是否blocking写
更新录缓存时间zadd key ts eventId
eventId2 -> data
忽略结果,成功或失败都代表blockingkey刚刚被设置
是否已缓存
blocking写: 保证现成安全事件唯一:员工ID + 事件类型 + 对象ID
eventId1 -> data