redis原理篇-深入浅出

分布式数据库CAP原理

传统数据库事务具备原子性,一致性,隔离性和持久性
分布式数据库是CAP
C(Consistency):强一致性,也就是同一时间所有节点的数据一直保持一致
A(Availiability):高可用性,服务一直可用
P(Partition tolerance):分区容错性,某节点或网络分区故障时,仍然能够对外提供一致性或可用性的服务
在分布式系统中,数据分区容错性是必然存在的。而C和A只能选择其一。
在分布式系统中,为了保证系统的可用性,通常都采用了复制的方式,避免一个节点损坏,导致整个系统不可用。就出现了每个节点的数据出现了很多个副本的情况,而数据从一个节点复制到另一个节点时需要时间和要求网络畅通,所以当p发生时,也就是无法向某个节点复制数据时,这时候有两个选择,
选择A时,那个失去联系的节点还可以向外提供服务,不过不能保证数据是一致性的。
选择C时,为了保证数据库的一致性,必须等待那个失去联系的节点恢复过来,此时那个节点不能对外提供服务,也就是系统属于不可用状态。

持久化

  1. RDB
    在指定时间间隔内,将内存中的数据集的快照写入磁盘。
    自动备份
    关闭redis服务时,会自动将内存中的数据存入磁盘中的dump.rdb文件中。
    也可以配置文件,设置在一定条件下就将数据存储到磁盘文件中
    缺点:如果服务意外down掉时,就会导致最后一次快照没持久化。
    优点:适合大规模备份,对数据完整性和一致性要求不高。
    也可以手动备份,每次执行完语句就备份,但这对性能消耗很大
  2. AOF
    已日志的形式记录redis的所有写操作,只许追加文件,不能改写文件。在redis启动之初,去执行一遍所有的写操作,来构建数据。
    追写策略:每次一执行完写操作就追加文件,性能较差。每秒追加文件,可能会导致最后一秒数据丢失。还有就是不追加

主从复制

  1. 复制原理
    1.从服务器链接主服务器,并发送同步请求。2. 主服务器搜集完所有的写命令集,3. 发送快照,4. 从服务器载入快照。5. 主服务器发送缓存快照,6. 从服务器执行命令。完成数据的构建。

    全量复制是刚链接上时,从服务器会从主服务器获取所有的数据。
    增量复制是开始工作时,主服务器的数据复制到从服务器中。

分布式锁实现原理

  1. 因为redis是单线程的,所以他的命令具备原子性,用setnx保存k-v实现分布式锁
    1. 当key不存在时,证明没加锁,可以保存
    2. 当key存在时,证明被加锁了,需要等待
  2. 如果加锁成功,但又遇到系统执行异常,导致key没有被释放,这会造成死锁
    加过期时间,比如过期10秒
    此时如果来A,B两个线程,A线程执行13秒,B线程执行7秒,当A线程执行到第10秒时,被自动释放锁,此时B线程加锁,执行3秒就被释放锁,因为A线程执行结束了会执行finnaly释放锁。锁就会一直失效
    所以需要加UUID,线程唯一标识。
  3. 针对上面问题还需要加一个定时器线程,设置一个总过期时间和一个过期时间,当过期时间到总过期时间的1/3,所还没被释放,就延长总过期时间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值