原创 《Redis設計與實現》[第一部分]數據結構與對象-C源碼閱讀(一)

一、簡單動態字符串SDS 關鍵字:空間預分配,惰性空間釋放,二進制安全 C字符串不易更改,所以Redis中把C字符串用在一些無須對字符串值進行修改的地方,作爲字符串字面量(String literal),比如打印日誌: redi

原创 《Redis設計與實現》[第二部分]單機數據庫的實現-C源碼閱讀(一)

1、數據庫 關鍵字:鍵空間,過期,刪除策略 數據結構源碼 //redisServer中屬性太多,篇幅限制,故只列本章描述相關的屬性 struct redisServer { //... // 數據庫

原创 《Redis設計與實現》[第二部分]單機數據庫的實現-C源碼閱讀(二)

2、RDB持久化 關鍵字:RDB文件解析,自動間隔性保存 Redis提供RDB持久化功能,可以將Redis在內存中的數據庫狀態保存到磁盤裏,避免數據意外丟失。 RDB持久化可以手動執行,也可以根據服務器配置選項定期執行,該功能可以將某

原创 Lucene學習筆記(一)-------Lucene基礎

Lucene簡介 獲取內容 Lucene作爲一個核心搜索庫,並不提供任何功能來實現內容獲取 建立文檔 文檔主要包括幾個帶值的域,比如標題(title),正文(body),摘要(abstract),作者(author)和鏈接(URL

原创 《Redis設計與實現》[第二部分]單機數據庫的實現-C源碼閱讀(三)

3、AOF持久化 關鍵字:AOF持久化:文件寫入與同步,AOF文件重寫,數據一致性 與RDB持久化通過保存數據庫中的鍵值對來記錄數據庫狀態不同,AOF持久化是通過保存redis服務器所執行的寫命令來記錄數據庫狀態的 被寫入AOF文件的

原创 《Redis設計與實現》[第一部分]數據結構與對象-C源碼閱讀(二)

四、跳躍表 關鍵字:層高隨機 跳躍表支持平均O(logN)、最壞O(N)複雜度的結點查找,還可以通過順序性操作來批量處理結點。 在大部分情況下,跳躍表的效率可以和平衡樹相媲美,因爲跳躍表的實現比平衡樹來得更爲簡單,所以不少程序都使用跳

原创 JDK1.8源碼中的設計模式

1. 迭代器與組合模式(Iterator) 1.1 Collection.iterator() 集合(Collection)指的是一羣對象,其存儲方式可以是各式各樣的數據結構。 如何能讓客戶遍歷你的對象而又無法窺視你存儲對象的方式——利

原创 redis中執行大量數據插入操作

Redis管道 請求/響應協議和RTT Redis是一種基於客戶端-服務端模型以及請求/響應協議的TCP服務。 通常情況下一個請求會遵循以下步驟: - 客戶端向服務端發送一個查詢請求,並監聽Socket返回,通常是以阻塞模式,等待服務

原创 NiFi源碼整理

NiFi是一個易於使用、功能強大、操作便利的數據處理data flow系統。 使用戶可以不用寫很多代碼即可操作各種數據流。 目前關於NiFi的文檔較少,只能一點點看源碼,先把源碼做一個大概的整理,之後再深入研究。 nifi源碼 nif

原创 Lucene學習筆記(二)--------構建索引

構建索引 對搜索內容建模 文檔和域 文檔是索引和搜索的原子單位,包含一個或多個域的容器,域則依次包含“真正的”被搜索內容。每個域都有一個標識名稱(即一個文本值或二進制值)。將文檔加入到索引中時,可以通過一系列選項控制Lucene的行爲。在

原创 《Redis設計與實現》[第二部分]單機數據庫的實現-C源碼閱讀(四)

4、事件 關鍵字:I/O併發模式,文件事件處理器,時間事件處理器 Redis服務器是一個事件驅動程序,服務器需要處理兩類事件: 文件事件(file event):Redis服務器通過套接字與客戶端(或其他Redis服務器)進行連接,

原创 PostgreSQL在哪些方面勝過了其他開源SQL數據庫(Part I)

這篇文章翻譯自:https://www.compose.io/articles/what-postgresql-has-over-other-open-source-sql-databases/ Post

原创 Trie樹與位操作

使用Trie樹解決數字位操作問題。 Trie樹 Trie樹可以將keys/numbers/strings等信息保存在樹中。 Trie樹由一系列結點組成,每個結點存儲一個字符/位。從而我們可以插入新的strings/numbers。 以

原创 Java多線程編程(一):創建並運行Java線程

Java線程類也是一個Object類,它的實例都繼承自java.lang.Thread或其子類。可以用如下方式在Java中創建一個線程: Thread thread = new Thread(); 執行該線程可以調用該線程的star

原创 Java線程池理解

線程池原理理解 作用: 線程池的作用就是限制系統中執行線程的數量。 根據系統的環境情況,可以自動或手動設置線程數量,達到運行的最佳效果; 少了浪費系統資源,多了造成系統擁擠效率不高。 用線程池控制線程數量,其他線程排隊等