java操作redis将数据存入成功,返回失败,怎么保持数据一致性

java操作redis将数据存入成功,返回失败,比如说断网之类的,怎么保持数据一致性

阅读 4.6k
2 个回答

有一种操作称为幂等的,即重复N次和只做1次的结果是一样的,这种操作当返回暂时异常(Transient Exception)如网络中断时,可以通过重试来解决。

通常读操作都是幂等的,但写操作就不一定了,如sethset是幂等的,但lpushadd就不是了。
非幂等的操作通常不能用去重试,而是用补偿来处理,比较复杂(大多数非关键应用,发现错误(反正有日志的嘛)可以手动或用工具修正数据,只有金融、电商等领域的关键应用才需要考虑补偿),这里就不展开了。

关于幂等和补偿的原理,不光是对缓存适用,对数据库和远程服务也是适用的。

redis 有两种持久化方式,一种是快照的形式,一种是Append-only, 其实不说你能想到,断网丢失数据是因为第一种,数据存储在内存中,但是效率高,如果追求数据的“完整性”,可以用第二种,你可以去搜索下相关的设置两种持久化方法和原理

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题