原创 領域驅動設計之:領域建模

一、項目的終極目標        普通開發者在開發一個項目時,可能考慮到的都是如何實現業務邏輯,同時提高程序性能,好一點的開發者會同時考慮到代碼的複用性和擴展性,沒錯,上面提到的幾點都是一個優秀的技術開發需要必備的素質,但是如果想要真正的

原创 Go中閉包的隱含問題

問題 package main import ( "fmt" "sync" ) var wg sync.WaitGroup func main() { for i := 0; i < 10; i++ { wg.Add(1)

原创 Redis鍵過期策略源碼解析(惰性刪除+定期取樣刪除)

前言 從概念上講,我只知道redis採用惰性刪除加定期隨機刪除的策略去釋放過期鍵的內存,但是並沒有研究過其中的原理實現,今天追了一下源碼,剖析下惰性刪除和定期取樣刪除的實現過程。 惰性刪除 在server.c文件中查找對應的命令函數,對應

原创 php-redis源碼之長連接、短連接、命令自動檢活

源碼函數所在文件 爲了避免代碼影響閱讀,以及代碼順序不符合個人的讀碼習慣,就不貼代碼了,都可以通過函數名在下面幾個c文件中找到 redis.c library.c common.h 幾個核心函數 redis_connect:用於創建re

原创 後端開發精品網址集錦

Go相關 Go專家編程:https://rainbowmango.gitbook.io/go/ 飛雪無情:https://www.flysnow.org/archives/ Go擴展 github:https://godoc.org/ G

原创 Redis數據結構之——redisObject

定義在server.h文件中 redisObject結構體 #define LRU_BITS 24 #define LRU_CLOCK_MAX ((1<<LRU_BITS)-1) /* Max value of obj->lru */

原创 關於php-redis的pconnect長鏈接的思考

拋出問題 前段時間有個大佬說,php-redis的pconnect並不能實現長鏈接,在請求結束後連接就被釋放掉了,我心中存疑,如果是這樣的話,那php-reds爲什麼還要有connect和pconnect? 查找文檔 php-redis官

原创 linux內核概述

用戶態和內核態 在理解linux內核之前,首先要知道什麼是用戶態,什麼是內核態,什麼是用戶進程,什麼是內核進程 用戶進程:我們編寫的程序都屬於用戶進程 內核進程:以內核態運行在內核地址空間,不與用戶直接交互,不需要終端設備,在系統啓動後一

原创 Redis如何處理每條指令的

事件模型 epoll 響應隊列 redis爲每個客戶端socket關聯了一個響應隊列,redis服務通過響應隊列來將指令的返回結果回覆給客戶端。如果隊列爲空,那麼意味着連接暫時處於空閒狀態,不需要去獲取寫事件,也就是可以將當前的客戶端描述

原创 一篇文章搞懂Linux內存管理

一、兩種內存分配方式 固定分區分配:將內存分成不同大小的分區,按照大小保存在一張分區表中,分區表中包括每個分區的起始地址、大小、以及狀態(是否分配),當有程序要裝入時,由內存分配程序依據用戶程序的大小檢索該表,從中找出一個能滿足要求的尚未

原创 Redis數據結構之——SDS

概述: SDS(simple Dynamic String) Redis的字符串有2種存儲方式,通過 redisObject 對象裏的 encoding 字段決定,emstr對應常量爲OBJ_ENCODING_EMBSTR,raw對應常量

原创 關於select和epoll多路複用(事件輪詢API)

非阻塞IO        當我們調用套接字的讀寫方法時默認它們是阻塞的,比如read方法要產地進去一個參數n,代表最多讀取n個字節後再返回,否則線程就會阻塞在哪裏,直到新的數據到來或者連接關閉,read方法纔可以返回,線程才能繼續處理。w

原创 RabbitMQ死信隊列原理並實現延遲隊列

死信隊列 死信交換機(Dead-Letter-Exchange),當消息在一個隊列中變成死信之後,它能被髮送到另一個交換機中,這個交換機就是DLX,綁定DLX的隊列就稱之爲死信隊列 消息變成死信一般是由於下面三種情況: 消息被拒絕(Bas

原创 關於mysql的事務隔離模式、MVCC、next-key,這一篇就夠了

聲明 由於貼mysql截圖會佔太大篇幅,影響整體閱讀理解,所以沒有貼mysql截圖,但是下面步驟都是親自試驗過的 四種隔離級別(由低到高) Read Uncommitted讀未提交:可以看到其他事務未提交的內容 Read Committe

原创 一篇文章搞懂TCP協議

TCP概述 面向連接的運輸層協議:應用程序在使用TCP協議之前,必須先建立TCP連接,數據傳輸完畢後,必須釋放已建立的TCP連接 點對點:TCP連接只能有兩個端點,一對一 可靠:通過TCP連接傳輸的數據,無差錯、不丟失、不重複、按需到達