在日常生活中,从行为角度看一致性意味着以同样的方式做某件事;
从名词角度看一致性还指事务的结构或内容及逻辑定理。
在IT领域,我们常在以下方面使用
- 1、用户界面
- 2、架构和代码风格
- 3、ACID数据库的一致性
- 4、CAP定理中的一致性
- 5、名词术语
用户界面
用户界面中的一致性指用户操作和用户期望是一致的,例如保存文件,我们使用的快捷键是ctrl-s,如果一个软件保存的时候要求用户ctrl-alt-del组合键盘操作,会让用户产生意外。
架构和代码风格
概念上的一致性是系统设计中最重要的考虑因素,让一个系统反映出一套设计理念,比让一个系统包含许多优秀但独立不协调的理念要更容易维护。
ACID数据库的一致性
在遵循ACID原则的数据库中,一致性指的是ACID中的C,一致性和数据的完整性有关,任何ACID数据库都会阻止破坏约束,从而保证数据的一致性。
从这种含以上讲,有以下一致性的规则
- 列上只存储定义类型的值,char类型的列,不能存储int
- 唯一键在数据操作后保持唯一
- 在操作之前和之后要满足约束条件的检查
- 外键约束在操作之前和之后都要满足
如果任何数据库操作违反了这些或其他一致性规则,相应的数据库操作或事务将被回滚。
CAP定理中的一致性
CAP定理中的一致性和ACID数据库中的一致性不同,这里指的是任何读操作都能保证返回用户最近写的操作。
强一致性
用户先进行写操作,下次一定能读取到写入的值。
弱一致性
用户先进行写操作,下次不一定能读取到写入的值,也不确定什么时候能读取到。
最终一致性
用户先进行写操作,如果后续没有写操作,系统最终能读取到写入的值。
名词术语
在项目中,偶然发现产品开发都在使用同一个术语,但词含义不同,有时在同一个项目使用不同的术语但又是同一个含义。
数据库和redis一致性
- 没有完美的强一致性解决方案,除非在更新缓存之前,停止所有的读缓存操作,但是这样就失去了缓存的意义。能做的就是在缓存的不一致程度和缓存有效期之间做个权衡,尽可能减少不一致,建议先更新数据库,再删除缓存,为了保证两步都完成,需要加消息队列或订阅更新日志辅助。
- 主库同步缓存的问题,为了等主库数据更新到从库,采用延迟删除缓存,根据业务情况,将缓存失效时间设置短些,或者强制读主库。