原创 Redis 中的事件驅動模型

Redis 是一個事件驅動的內存數據庫,服務器需要處理兩種類型的事件。文件事件時間事件下面就會介紹這兩種事件的實現原理。文件事件Redis 服務器通過 socket 實現與客戶端(或其他redis服務器)的交互,文件事件就是服務器對 soc

原创 Redis RedLock 完美的分佈式鎖麼?

上週花了點時間研究了 Redis 的作者提的 RedLock 的算法來實現一個分佈式鎖,在官方的文檔最下面發現了這樣一句話。Analysis of RedLock Martin Kleppmann analyzed Redlock here

原创 Redis 分佈式鎖的正確實現方式

之前我們使用的定時任務都是隻部署在了單臺機器上,爲了解決單點的問題,爲了保證一個任務,只被一臺機器執行,就需要考慮鎖的問題,於是就花時間研究了這個問題。到底怎樣實現一個分佈式鎖呢?閱讀這篇文章你可以瞭解到: 單機版的實現分佈式環境下RedL

原创 Raft 協議學習筆記

好久沒有更新博客了,最近研究了Raft 協議,談談自己對 Raft 協議的理解。希望這篇文章能夠幫助大家理解 Raft 論文。Raft 是什麼?Raft 是一種分佈式系統的一致性算法。在分佈式系統中,我們需要讓一組機器作爲一個整體向外界提供

原创 Redis 命令的執行過程

之前寫了一系列文章,已經很深入的探討了 Redis 的數據結構,數據庫的實現,key的過期策略以及 Redis 是怎麼處理事件的。所以距離 Redis 的單機實現只差最後一步了,就是 Redis 是怎麼處理 client 發來的命令並返回結

原创 擼碼的福音--變量名生成器的實現

最近換工作以後,結結實實的寫了幾個月的業務。需求完結以後,就找找自己喜歡的東西寫寫,換個口味。擼碼最難的就是給變量取名字了。所以就寫一個變量生成器吧。演示如下:視頻內容實現思路:使用了 Mac 上最出名的效率工具 Alfred。利用 Alf

原创 Java 渲染 docx 文件,並生成 pdf 加水印

最近做了一個比較有意思的需求,實現的比較有意思。需求:用戶上傳一個 docx 文件,文檔中有佔位符若干,識別爲文檔模板。用戶在前端可以將標籤拖拽到模板上,替代佔位符。後端根據標籤,獲取標籤內容,生成 pdf 文檔並打上水印。需求實現的難點:

原创 我的寫作工具鏈

寫作是技術輸出的重要手段。自己也寫了一年多的文章,累計也超過五萬多字。今天就想談談自己對於寫作的一些看法以及寫作時使用到的工具。工慾善其事必先利其器。輸入能做到持續的輸出文字,首先需要自己有所積累的同時不斷的輸入新的內容。要構建自己的知識系

原创 線程池 execute() 的工作邏輯

最近在看《Java併發編程的藝術》回顧線程池的原理和參數的時候發現一個問題,如果 corePoolSize = 0 且 阻塞隊列是無界的。線程池將如何工作?我們先回顧一下書裏面描述線程池execute()工作的邏輯:如果當前運行的線程,少於

原创 Redis 數據庫、鍵過期的實現

之前的文章講解了 Redis 的數據結構,這回就可以看看作爲內存數據庫,Redis 是怎麼存儲數據的以及鍵是怎麼過期的。閱讀這篇文章你將會瞭解到:Redis 的數據庫實現Redis 鍵過期的策略數據庫的實現我們先看代碼 server.h/r

原创 Redis 的基礎數據結構(二) 整數集合、跳躍表、壓縮列表

上篇文章寫了 Redis 基礎數據結構的可變字符串、鏈表、字典。大家可以點擊鏈接查看。今天我們繼續研究 Redis 的基礎數據結構。整數集合跳躍表壓縮列表整數集合當一個集合只包含整數,且這個集合的元素不多的時候,Redis 就會使用整數集合

原创 Redis 的基礎數據結構(三)對象

前兩篇文章介紹了 Redis 的基本數據結構動態字符串,鏈表,字典,跳躍表,壓縮鏈表,整數集合,但是使用過 Redis 的同學會發現,平時根本沒有使用過這些數據結構。 平時使用的數據結構,包括字符串,列表,哈希,集合,還有有序集合。 其實