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

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

相关推荐
朔北之忘 Clancy1 天前
2025 CSP-J 第二轮真题解析
c++·青少年编程·题解·noip·csp·信奥赛·noi
longlongzihan1 天前
LeetCode 17电话号码的字母组合:回溯算法(DFS)详解
c++·算法·leetcode·深度优先
yolo_guo1 天前
调试mysql延迟与libevent回调实际发送回复时机问题
c++·mysql·libevent
今晚打老虎1 天前
c++之提高A(前缀和)(第三课)
数据结构·c++·算法
by209991 天前
从结构体到对象:正式学习C++类的骨架、封装与this指针
c++·经验分享·学习
2601_962218611 天前
C语言中三种库的编译和使用方法
开发语言·c++
jimy11 天前
派生类重写基类虚函数(二):override的作用
开发语言·c++
ebiobiz1 天前
基于 GD32 Embedded Builder (GEB) 与 Nimmake 的 MCU 工程搭建指南
c++·python·单片机·嵌入式硬件·mcu
hetao17338371 天前
2026-09-29 hetao1733837 的刷题记录
c++·算法
:mnong1 天前
几何内核“四大金刚“:ACIS、Parasolid、CGM、Open CASCADE 核心特征深度解析
c++·cad·cax