redis与数据库双写一致问题:
策略:
1:先更新数据库,再更新缓存 ------不推荐,并发访问情况下出现脏数据的可能性较大
2:先删缓存,再更新数据库 --------延时双删策略,休眠一秒再淘汰可能出现的脏数据(第二次删除可使用异步操作保证原有吞吐量,异步操作第二次删除失败,建立重试操作)
3:先更新数据库,再更新缓存 ------同样会出现脏数据的情况,一样的做延时删除策略和删除失败的重试策略
分布式事务:Oracle公司提出的XA分布式协议:xa协议的两种实现 1:二阶段提交,2:三阶段提交
XA协议包含两个角色:事务协调者,事务参与者
二阶段提交:
第一阶段:协调者像所有参与者发送prepare请求。参与者接受到请求后会做自己的数据更新操作,但不会提交事务,而是将更新数据写入log中,然后像协调者返回数据更新完毕的消息。
第二阶段:协调者接受到所有参与者的完成消息后才会进入第二阶段。此时协调者像所有参与者发出commit请求,参与者接受到请求后再各自执行自己的commit操作,并返回完成消息。
B+树:节点存储索引地址,叶子节点存储数据,一个节点可以存储大量索引,可降低树的高度,减少磁盘io,索引查询效率。叶子节点通过链表串联,并且有序排列,便于范围查找。所以,在查找效率,范围查找中有很好的性能。
B树:节点存储数据,一个几点不能存储大量数据,切叶子节点不通过链表连接,所以对应索引查找和,范围查找效率不如B+树。
红黑树:右倾严重,达到一定程度后类似于链表,不利于查找。
二叉查找树:…