高併發知識

2021-08-20 13:43:21 字數 1014 閱讀 4840

高併發:

1、傳統專案:

1、資料庫方向:建立索引,儲存過程、觸發器、盡量少的使用子查詢

2、快取:session,

cookie

;3、非關聯式資料庫:redis,記憶體,快取在硬碟上

4、非同步

,弊端,共享資料

--加鎖(悲觀鎖)

程式中:服務層()物件鎖,方法鎖

資料庫:整個表加鎖,給行加鎖,

2、分布式專案:

每乙個塊服務就是系統

建立的分布式鎖:

例項**:

1:redis

的setnx

命令set命令【可重複改】;

set tom 1;

set tom 2;

setnx命令

:setnx tom 1;(加鎖)

setnx tom 2(無法執行);

解鎖:del tom

這種加鎖的思路是, 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

2:zookeeper

上鎖【鎖的是通訊】

高併發系統設計 其它知識(一)

如果系統有使用資料庫,最常想到的全域性唯一id是利用資料庫的自增字段來保證唯一性。這種方法生成的長度不同,並且與資料為互動,效能較差。其它兩個常用的兩個演算法是 uuid與snowflake 演算法1,2可以保證唯一性 演算法3 5除了利用的hash演算法不同外,其它都相同,可以保證區域性唯一,有極...

高併發 高可用

高併發 提高系統併發能力的方法主要有兩種 前者垂直擴充套件可以通過提公升單機硬體效能,或者提公升單機架構效能,來提高併發性,但單機效能總是有極限的,網際網路分布式架構設計高併發終極解決方案還是後者 水平擴充套件。網際網路分層架構中,各層次水平擴充套件的實踐又有所不同 1 反向 層可以通過 dns輪詢...

高併發 高併發測試筆記

問 高併發測試 一般你們用什麼工具來模擬 10萬級別的客戶端併發?在普通的電腦上可以模擬嗎 10萬併發需要至少10萬的套接字,套接字在核心中占用記憶體100000 6k 2 1g記憶體,系統需要能夠開啟10w個fd。一般的系統能夠能模擬 問 預設每個程序只能開1024個fd,修改後最大可以10w,那...