• 基于Redis的分布式资源锁


    随着双11,春运抢票这种业务的存在,分布式高并发成为了技术人员必须要面对的问题,那么如果保证数据的准确性呢?一般主流的方式就是加锁,保证某个时刻只有一个客户端去调用。

    分布式锁一般有三种实现方式:

    1. 数据库乐观锁;

    (1)基于数据库表(普通的增删操作)

      (2) 基于数据库排他锁

    2. 基于Redis的分布式锁;

      redis的基础概念: setNX(set if Not exists)  [如果不存在则set] 

       

    3. 基于ZooKeeper的分布式锁。

    以上三种操作的基本原理是不变的:用一个状态值表示锁,对锁的占用和释放通过状态值来标识。 

    首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:

    1. 互斥性。在任意时刻,只有一个客户端能持有锁。
    2. 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。
    3. 具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。
    4. 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。

    具体的代码实现请看这篇详细的文章:

    http://www.cnblogs.com/0201zcr/p/5942748.html

    推荐一篇电商秒杀的架构思路,这位作者写的太好了:

    https://blog.csdn.net/bigtree_3721/article/details/72760538

    秒杀架构划重点:

    (1)将秒杀系统单独部署,甚至使用独立域名,防止秒杀系统崩溃影响正常业务

    (2)页面内容静态化,读多写少的接口做好缓存

    (3)将下单页面的Url作为随机数,在秒杀开始的时候才能得到

    (4)前端控制请求发送

    (5)采用最少连接的负载均衡算法

    (6)拍下减库存比付款减库存用户体验更好一些

    (7)数据库采用乐观锁(采用带版本号更新)

  • 相关阅读:
    解决Django和EasyUI搭配使用时出现的CSRF问题
    修改Django的默认打印时间
    解决多网卡SNMP获取不到数据的问题
    Django模板格式
    java操作excel
    数字1的个数
    leetcode:2. 两数相加(java)
    二叉树常用操作
    通配符匹配
    二叉树基本操作
  • 原文地址:https://www.cnblogs.com/pzyin/p/9228230.html
Copyright © 2020-2023  润新知