拼命工作好好玩 2019-06-27
因为热爱,所以拼搏。 --RuiDer
高并发简单理解就是在服务器中,成千上完个客户端在同一时间内发 起对服务器端的请求,包括数据的请求,这时服务器后端需要在极短时内处 理客户端的请求并且响应,在互联网平台,追求的是速度和时间,所以, 这就对服务器端有非常大的考验。 一般客户端发起请求,服务器端接到请求,首先去处理相应的数据, 这就涉及到数据库中的数据操作,或者是缓存中的数据处理,总之要与数据库打交道。 操作数据库数据包括数据的查询,编辑,更新等。
不同的线程在同一时间对同一数据的读取和更新产生冲突。可能会出现线程A读取 的数据不是最新值,线程B更新的数据覆盖其他线程对该数据的更新。这些问题 都是高并发带来的,即高并发产生的问题。 高并发冲突分类: - 数据丢失 - 脏读
Java提供锁的支持,通俗的理解就是锁对某些数据具有保护作用,防止某一数据在同一时间 被多个线程操作。 锁的分类: - 悲观锁:持保守态度,只能由某一个线程持有,其他线程等待持有锁的线程释放锁。性能差 - 乐观锁:下面讲 - 其他锁:像自旋锁,轻量级锁等
对于每一个数据或者数据集合,设有一个标识version(字段), 当线程读取数据时,同时会读取出标识版本version的值,进行更 新时,首先比较当前数据库字段version的值是否与读取出的 version值相等,如果相等,则更新值,否则,作为过期值丢弃。
实现一: 比如一个数据库表的结构是 id value version三个字段 当进行数据的更新时,首先读取: select value version from table where id=x; 其次更新: update table set value=newValue, version=oldVersion+1 where id=x and version=oldVersion; 实现二: cas算法:Compare And Swap算法,即有三个值,内存值,预期旧值,新值, 比较内存值是否与当前预期值相等,如果相等,则替换新值,否则,不做任何处理。
我的博客