乐观锁悲观锁

Posted afrafre

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乐观锁悲观锁相关的知识,希望对你有一定的参考价值。

乐观锁:

总认为不会产生并发问题,因此不会上锁,更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作来实现

version: 数据上有数据版本号version字段,每次更新version值加一

CAS操作方式:compare and set, 三个参数,数据所在的内存值,预期值,新值,当需要更新时,判断内存值与之前取到的值是否相等,若相等,用新值更新,否则不断尝试

 

悲观锁: 总是假设最坏的情况,每次取数据都认为其他线程会修改,所以都会加锁(读锁,写锁,行锁),当其他线程要访问数据时, 阻塞挂起。

# --------------------------------------------------------------------------------------------------------------------------------

集群: 同一个任务部署在多台机器上,提高系统可用性

分布式: 将不同的业务分部在不同的地方

    分布式的每一个节点,都完成不同的任务,一个节点跨了,该任务就无法访问

举例: 计算1到100加法

集群: 每台集群都要完成1 加到 100, 耗时1秒,但可以多台机器同时进行计算,即1秒可以完成多次1 加到 100 这个请求

分布式: 将 1 到100 拆成 例如10组部署10台机器,每台机器完成一组计算,耗时0.1 秒, 总用时 0.1秒

总结: 分布式中的每一个节点都可以做集群,而集群不一定是分布式的

# --------------------------------------------------------------------------------------------------------------------------------

微服务:
单体应用: 项目是一个整体,一旦出错,程序奔溃
微服务: 项目拆成不同的服务,服务和服务之间交互,restful 接口


幂等性:

多次请求和一次请求的效果一样,put和patch 是幂等性,post不是
post 是新增, put and patch 是修改,所以是幂等性

 

以上是关于乐观锁悲观锁的主要内容,如果未能解决你的问题,请参考以下文章

乐观锁与悲观锁

什么是乐观锁?

乐观锁--悲观锁

Java 乐观锁 悲观锁

悲观锁乐观锁

乐观锁和悲观锁