天天看点

通过Flink实现Cassandra数据同步到redis缓存实战之四:幂等性!幂等性!幂等性!Redis缓存数据幂等性设计摘要幂等性的实现

摘要

将数据保存到Redis的过程中,可能会发生各种异常,包括redis集群挂掉、redis连接错误、redis写入错误等。面向失败设计思想的一个重要的最佳实践,就是保证数据幂等性。允许失败的时候进行重试。所以在设计redis key的时候,需要重点考虑这个问题。从cassandra中提取到的同一条数据,在写入到redis的时候,必须拥有一个唯一的键,保证无论这个数据被重复写入多少次,redis中永远只有一个记录。本文将介绍几种幂等键的设计思路。

幂等性的实现

实际实现的方法很多,例如:

1、最简单的办法,直接把幂等j键作为redis key 直接执行set操作就可以了。

2、如果希望把多条数据聚集在一个key下,方便消费者一次性提取多条数据,有以下两种方式:

  • 如果数据本身可以作为幂等j键,那么可以直接用set来存储
  • 如果数据本身不可以作为幂等j键,那么可以用hash类数据,把幂等j键作为field,这样也能保证幂等性。

关于幂等键的设置,可以有以下方法:

  • 记录id:比较简单和安全的方法就是直接用数据记录的id。
  • 数据摘要:更推荐的方法是从数据中选择几个有意义的字段拼起来。这样做的好处是,这些幂等键一般包含关键信息,有一些场景可以不用获取值而直接用key来获取数据,而且具有可读性,易于维护。
  • 整个数据:对于一些简单数据可以直接用整个数据作为幂等键。并不推荐这样做。原因是,
    • 首先,如果数据实体发生变化,这些键也会发生变化;
    • 其次,数据量大,占用空间,解析时间长,网络传输时间长,对于数据量大的场景,这个区别还是很大的。
    • 再次,有些数据不适合作为幂等键,比如数据中包含更新时间、或者状态字段。这些字段就不是和被包含到幂等键中,否则这些字段的变化就会导致幂等键发生变化。

通过Flink实现Cassandra数据同步到redis缓存实战系列文章电梯:

一:数据同步任务的实现

二:Flink任务的定时提交

三:异常处理

四:幂等性!幂等性!幂等性!Redis缓存数据幂等性设计