原创 分佈式系統--封裝Redis消息隊列--消息隊列下的異步場景

一、什麼是消息隊列?1、消息就是數據。2、隊列有隊尾和隊頭,隊列有入隊和出隊,隊列先進先出。3、生產者存數據入口4、消費者取數據入口 二、推模型--發佈訂閱模型--阻塞 主動把消息推給訂閱者。數據實時要求高,用推。 三、拉模型--生產者消

原创 分佈式系統--封裝Redis分佈式鎖解決跨進程併發秒殺引起的超賣問題

一、單進程多線程的鎖--線程鎖 鎖住線程的鎖叫線程鎖,像C#中的lock,Monitor,讓線程排隊,同一時刻只能有一個線程進來,讓線程同步排隊。  二、多進程的鎖--分佈式鎖 鎖住進程的鎖就叫分佈式鎖,是鎖住進程的一種機制,讓進程排隊

原创 微服務--Ocelot+Consul整合使用,網關+服務註冊發現

一、爲什麼要有網關Gateway? 1、做服務的管理,屏蔽外界對服務的訪問,保護服務。2、微服務那麼多服務,而且每一個服務都是集羣式的,調用方不想記住每一個服務的IP+端口號。3、像授權每一個微服務都要授權,那麼加到網關就可以了。 二、網關

原创 ASP.NET Core 2.2--第三方依賴注入容器Autofact替換內置IServiceCollection容器

一、定製第三方依賴注入容器Autofac 1、nuget引入autofac和 Autofac.Extensions.DependencyInjection 2、註釋掉原來的IServiceCollection,ConfigureServi

原创 Lamda演變歷史

.NetFramework 1.0  1.1時代 以前學習委託,大部分流程都是在這裏聲明委託,實例化的時候不得不聲明一個方法,在寫一個方法不得不傳進入,這個方法與聲明的委託參數返回值吻合,然後把這個方法傳遞進去。 namespace

原创 手寫Linq To Object

1、數據準備 public class Student { public string Name { get; set; } public int Age { get; set; } } var studentList

原创 軟件架構師之路--觀察者模式

爲了便於理解,加深記憶。得舉一個最難讓人忘記的應用場景,因爲之前我也是學了忘,忘了學,當你想不起來觀察者模式的時候,通過回憶這個例子,就能很快想起觀察者模式的應用 環境 當我們去上課的時候,需要記錄老師的電話號碼,那麼當這位老師變更了他

原创 EF--主外鍵關係導航屬性

數據準備公司表Company和員工表Employee兩張表創建主外鍵強關係,員工表Employee的Company_ID是公司表Company的外鍵,如下圖所 解讀主外鍵生成的實體特殊性 Company實體--主外鍵關係的話,EF

原创 EF--EntityState相互轉換

EF對數據做什麼樣的操作,是根據EF的上下文實體狀態決定,實體狀態有以下5種狀態,下面我們就分別看下這5種狀態   數據準備,我們看到學生表裏有20000名學生記錄,最後1位學生的學生編號爲0000020000 1、Detached--

原创 證明task線程是來源於線程池的,線程重用

1、線程池是單例的,全局唯一的,設置線程池最大活躍線程數是5,設置後,允許同時併發的Task只有5個,我們開啓100個task去做任務,從最後的輸出結果看到,雖然開啓了100個task,但是線程id始終是那5個如圖所示 2、結論:證明tas

原创 3、手寫Unity容器--第N層依賴注入

這個場景跟《手寫Unity容器--第一層依賴注入》又不同,這裏構造AndroidPhone的時候,AndroidPhone依賴於1個IPad,且依賴於1個IHeadPhone,而HeadPhone又依賴於1個IRootPhone   1、

原创 1、微服務--爲什麼有consul,consul註冊,心跳檢測,服務發現

一、爲什麼有consul? 在微服務,每1個服務都是集羣式的,訂單服務在10臺服務器上都有,那麼用戶的請求到達,獲取哪臺服務器的訂單服務呢?如果10臺中的有的訂單服務掛了怎麼辦?10臺服務器扛不住了,水平擴展又新增加了1臺服務器提供訂單服務

原创 2、手寫Unity容器--第一層依賴注入

這個場景跟《手寫Unity容器--極致簡陋版Unity容器》不同,這裏構造AndroidPhone的時候,AndroidPhone依賴於1個IPad 1、IPhone接口 namespace SimplestUnity_OneLayer

原创 1、手寫Unity容器--極致簡陋版Unity容器

模擬Unity容器實例化AndroidPhone 思路: 1、註冊類型:把類型完整名稱作爲key添加到數據字典中,類型添加到數據字典的value中 2、獲取實例:根據完整類型名稱也就是key取出value,用反射創建類型的實例 1、IPho

原创 事務和鎖--查看數據庫中的鎖

數據庫加鎖是修改哪一條加鎖,還是在頁上加鎖,還是在表上加鎖,數據庫來決定 如果你更改的是兩條記錄,就在兩條記錄上加鎖,如果你更改的是很多條,這個時候數據庫一看一條一條加鎖太麻煩,給整個頁加鎖更省事,或者給整個表加鎖更加省事 加鎖的級別越大,