1.介绍一下mvcc
MVCC是多版本并发控制,在数据修改的过程中删除的过程中增加和事务id的信息,这样对于大于当前事务id的修改,当前事务是不可见的,对于小于当前事务id的内容,如果还未提交还处于活跃状态也是不可见的。
多版本并发控制可以用来回滚数据,除此之外加上临键锁,实现可重复读。MySQL的可重复读没有完全解决幻读,单纯的快照级别读或者update读没有问题,如果混合读会出现幻读。
为什么update读没有问题呢,因为临键锁会对间隙加锁,不会出现之前没有的数据。
2.关于Redis作为缓冲的知识
缓存空间的大小是不可能和MySQL一致的只是一个子集,具体大小和数据的访问特性有关,通常是总数据的15%到30%,因为大量的访问集中在少量的数据上。
缓冲淘汰的方法有不淘汰、缓冲满随机淘汰,以及根据ttl,根据截止时间淘汰,和lru以及lfu的方式淘汰数据。lru和lfu可以使用链表实现,在具体实现也可以使用key,新的数据用更大的key,但是淘汰的时候不是全排序,而是随机抽取一部分,选择其中最小的进行淘汰。
3.Redis实现分布式锁
分布式锁可以使用一个Redis实现,只有一个程序可以获得锁,在Redis中的锁也有key和value,key用来标识锁,value用来判断是否锁上了。具体是通过set nx命令加锁,对于无锁的情况就创建对应的keyvalue对象加锁,如果已经存在,也就是已经被锁上了就不会成功。解锁使用delete。
分布式锁为了避免被其他进程误释放,可以给value设置一个独特的值。为了防止申请锁的进程崩溃导致锁一直被占据,可以给锁加一个过期时间。
分布式锁保证高可用可以使用多节点,申请超过一半节点的成功才代表拿到锁。