Redis 原子操作原理

需求背景

技术实现分析

技术方案

实现过程

Redis 原子操作原理

需求背景

计算某移动端应用设备每日版本的新增设备数、活跃设备数、累计设备数,用户有启动操作时计算。

每日新增设备数:一天内应用设备列表中某一版本的新增的数量

每日活跃设备数:一天内某一版本应用设备第一次启动记为活跃数

每日启动设备数:一天内某一版本应用设备第一次启动记为活跃数

扫描二维码关注公众号,回复: 11248697 查看本文章

技术实现分析

看到这样的需求,其实大家很容易想到,就是一个 +1 的累计的操作。那么对于高并发的的场景下,我们需要考虑哪些问题呢?

首先说下,多实例部署,能否保证数据的一致性问题,MySQL 数据的一致性,如果每次 +1 就更新数据库,则对 MySQL 增加不少压力,其数据一致性问题,利用悲观锁性能差些,用乐观锁数据丢的概率就大了。

如何保证不丢,又减少 MySQL 的压力呢?另外对于 ElasticSearch,由于历史原因项目中对设备信息的存储,采用 ES,其实大家很容易发现这里有些问题,为什么不用 MySQL 存储呢?

其实小编也有这样的疑问,只是,历史留下来的设计,暂时还不想迁移。那么面对这样的存储方案,我们会遇到的问题是什么呢?就是 ES 擅长做检索,其次做新增,但对于更新操作,es 是需要将原来的数据状态改为删除状态,然后新增一条记录,所以修改操作相对比较耗时。

技术方案

编程语言 Java,技术栈:Spring Boot、Redis、Elasticsearch、MySQL。其中 ElasticSearch 用于应用设备的存储,MySQL 用于存储新增数、活跃数、累计数的计算结果,Redis 做过滤和队列,用以异步处理。

E

  隐藏内容

猜你喜欢

转载自www.cnblogs.com/jbshd/p/12938209.html