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

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

相关推荐
欧特克_Glodon1 小时前
OpenCV计算机视觉开发入门与实践<四十>:自动识别物体数量
c++·人工智能·opencv·计算机视觉
wuminyu1 小时前
Kafka利用sendfile与Page Cache实现高性能传输剖析
java·linux·c语言·jvm·c++
hansang_IR1 小时前
【题解】P4456 [CQOI2018] 交错序列(数学递推)
c++·算法
流浪0011 小时前
大厂 C/C++ 2023–2025 面试答案题汇总
开发语言·c++
青少儿编程课堂1 小时前
贪心算法进阶:区间调度与最少资源整合解析
c++·python·算法·贪心·信息学竞赛·区间调度
(Charon)1 小时前
【C++】 定时器入门:从定时任务到 epoll 驱动
开发语言·c++
励志不掉头发的内向程序员2 小时前
【LibreCAD 2D架构】鼠标点下的坐标为什么会被“吸”走?LibreCAD 对象捕捉系统解析
开发语言·c++·qt·学习·系统架构
Sunsets_Red2 小时前
浅谈扫描线
c++·算法·编程·题解·洛谷·扫描线·信息学竞赛
朝朝辞暮i2 小时前
C++第一课
开发语言·c++·算法