j360-redis-async-db icon indicating copy to clipboard operation
j360-redis-async-db copied to clipboard

j360系列 - 缓存异步写数据库的框架

j360-redis-async-db

j360系列 - 缓存异步写数据库的框架

===v1.0功能实现===

  • 针对统计类的接口缓存(pv、uv等)信息后,需要异步将数据同步到持久层,先想几天再码代码

##相关前置说明##

  • 依赖Spring配置
  • 依赖redis读写接口
  • 需要另外存储redis对象(key、value)
  • 写数据库默认mysql(未来支持mongodb、es等)

##异步写策略##

  • 1.达到方法调用次数增量(可配置,默认100),触发同步数据库事件
  • 2.超过方法调用的时间增量(可配置,默认30s),触发同步数据库事件
  • 3.方法调用后会补一条异步触发消息(可配置,默认30s),满足条件(1.2未执行)触发同步数据库事件

##同步数据库##

  • 1.单条数据同步:立即执行
  • 2.批量执行同步:按照以下策略

##批量同步数据库策略##

  • 1.时间增量(可配置,默认3s)
  • 2.内容增量(可配置,默认1000条,请根据数据库性能配置)

##分布式支持##

  • 1.批量更新:单个jvm使用原子类锁进行队列执行
  • 2.分布式环境默认使用单条数据同步,批量同步需要依赖分布式队列框架(activemq、rabbitmq、kafka等)进行id分片策略同步(v2.0支持)
  • 3.id分片下的无状态集群需要抢分布式锁执行同步功能(redis、zk)

##简单版本定时策略##

  • 使用异步写3,通过队列定时30S后消费,消费时判断上一次同步时间是否超出30S,否则消费丢弃