1. 在有主从数据库读写分离的情况下,写主库,有主从同步延迟,如何保证查到最新的数据?
一个很简单的办法,你确认写入成功后不再次读库,直接将你写入的数据返回给用户,这就是一种很常见的操作
2.做任务赚积分。前端发出增加积分请求,如果收不到响应会重试。后端在数据库增加积分的时候如何保证不重复增加?
前端传入原有积分和要增加的积分,
update XXX set score=XX where score=X
这是一种乐观锁的思想,
这也就是所谓的大名鼎鼎的 CAS算法
- 什么是CAS?
CAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换。CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。
CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。
这是一种很常用的解决高并发的使用乐观锁思想的机制。
CAS也不是完美的,有自己的问题。具体可以参考这篇文章:面试必问的CAS,你懂了吗?
网友评论