高并发知识

高并发:

1、传统项目:

1、数据库方向:创建索引,存储过程、触发器、尽量少的使用子查询

2、缓存:sessioncookie

3、非关系数据库:redis,内存,缓存在硬盘上

4、异步{开启了多个子线程},弊端,共享数据--加锁(悲观锁)

   程序中:服务层()对象锁,方法锁

   数据库:整个表加锁,给行加锁,

 

2、分布式项目:

每一个块服务就是系统

   

创建的分布式锁:

实例代码:https://www.cnblogs.com/candychen/p/5736128.html

1redissetnx命令

   Set命令【可重复改】;

   Set tom 1;

   Set tom 2;

   Setnx命令:

   Setnx tom 1;(加锁)

   Setnx tom 2(无法执行)

  解锁:del tom

 

  第一种锁命令INCR

这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作进行加一。 
然后其它用户在执行 INCR 操作进行加一时,如果返回的数大于 1 ,说明这个锁正在被使用当中。

 

    1 客户端A请求服务器获取key的值为1表示获取了锁

    2 客户端B也去请求服务器获取key的值为2表示获取锁失败

    3 客户端A执行代码完成,删除锁

    4 客户端B在等待一段时间后在去请求的时候获取key的值为1表示获取锁成功

    5 客户端B执行代码完成,删除锁

 

    $redis->incr($key);

    $redis->expire($key, $ttl); //设置生成时间为1秒

 

这种机制会造成大量的等待超时:

1:引入消息中间件activeMq

2Zookeeper上锁【锁的是通信】

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值