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

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

相关推荐
·present·1 天前
CSAPP(lecture 4_01)
c语言·c++
FPGA小迷弟1 天前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
程序员-King.1 天前
【ROS1】Noetic 开发工作流程与常用命令
c++·ubuntu·ros
云深麋鹿1 天前
C++ | 基于红黑树实现mymap与myset
开发语言·c++
傲世仙尊1 天前
string增删查改-insert-erase-replace与find加substr组合技
c++
AI产品测评官1 天前
2026企业AI招聘选型指南:四类技术路线与硬科技场景适配方案
大数据·人工智能·科技·求职招聘·ai-native
·present·1 天前
CSAPP(lecture 3)
c++
别动我齐刘海1 天前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人
basketball6161 天前
C++ 中字符串与常见类型的转换总结
开发语言·c++
等我调个Bug1 天前
C++智能指针通俗讲解
开发语言·c++