与Redis和MySQL有关的知识

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设置一个独特的值。为了防止申请锁的进程崩溃导致锁一直被占据,可以给锁加一个过期时间。

分布式锁保证高可用可以使用多节点,申请超过一半节点的成功才代表拿到锁。

相关推荐
小七在进步8 小时前
string的使用(1)
c++·visual studio
白杨尚青9 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
kloc12 小时前
聊天室项目入口网关子服务的实现
linux·c++
csdn_aspnet15 小时前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
小七在进步16 小时前
string的使用(2)
c++
青少儿编程课堂17 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛
wo_jack19 小时前
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
数据结构·c++·面试·stl·list
青少儿编程课堂20 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园连连看解析
c++·python·算法·bfs·信息学竞赛
草莓熊Lotso20 小时前
【C++ 基于微服务的即时通讯系统】文件存储子服务实战:UUID生成、文件IO封装与全接口单元测试
开发语言·网络·数据库·c++·微服务·架构·单元测试
David猪大卫2 天前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习