原创 Future 解析與使用

Java 1.5開始, 提供了 Callable 和 Future, 通過它們可以在任務執行完畢之後得到任務執行結果. 當需要調用幾個執行很慢的方法時, 可以使用多線程一起執行這幾個方法, 等所有方法執行完畢後得到執行結果, 在進行別的處理

原创 java 併發編程之共享變量

可見性 如果一個線程對共享變量值的修改, 能夠及時的被其他線程看到, 叫做共享變量的可見性. Java 虛擬機規範試圖定義一種 Java 內存模型 (JMM), 來屏蔽掉各種硬件和操作系統的內存訪問差異, 讓 Java 程序在各種平臺上都能

原创 java 流 I/O 與 塊 I/O 比較

操作系統要移動的是大塊數據(緩衝區), 這往往是在硬件直接存儲器存取 (DMA) 的協助下完成的. 例如硬盤操作, 磁盤控制器通過 DMA 直接將數據寫入內核的內存緩衝區. 一旦磁盤控制器完成了緩存的填寫, 內核從內核空間的臨時緩存拷貝數據

原创 Redis 持久化

Redis 有兩種持久化的方式: 快照 (RDB文件) 和追加式文件 (AOF文件): RDB 持久化方式會在一個特定的間隔保存那個時間點的一個數據快照. AOF 持久化方式則會記錄每一個服務器收到的寫操作. 在服務啓動時, 這些記錄的操

原创 Redis Lua 腳本

Redis 使用 Lua 的好處 Lua 簡介就不復制了. Redis 提供了非常富的命令集, 但是用戶依然不滿足, 希望可以自定義擴充若干指令來完成一些特定領域的問題. Redis 爲這樣的用戶場景提供了 lua 腳本支持, 用戶可以向服

原创 redis 鏈表和鏈表節點的實現

列表對象的編碼可以是 ziplist(壓縮列表) 或者 linkedlist(雙端列表). 每個鏈表節點使用一個 listNode 結構來表示: typedef struct listNode { // 前置節點 stru

原创 Redis 字符串對象

Redis 字符串對象 字符串對象的編碼可以是 int 、 raw 或者 embstr. 如果一個字符串對象保存的是整數值, 並且這個整數值可以用 long 類型來表示, 那麼字符串對象會將整數值保存在字符串對象結構的 ptr 屬性裏面 (

原创 redis redisObject 數據結構

在 Redis 的命令中, 用於對鍵 (key) 進行處理的命令佔了很大一部分, 而對於鍵所保存的值的類型, 鍵能執行的命令又各不相同. 比如說, LPUSH 和 LLEN 只能用於列表鍵, 而 SADD 和 SRANDMEMBER 只能用

原创 Redis 事務

基本的 Redis 事務 Redis 有 5 個命令可以讓用戶在不被打斷的情況下對多個鍵執行操作, 它們分別是 WATCH, MULTI, EXEC, UNWATCH 和 DISCARD. Redis 的基本事務需要用到 MULTI, EX

原创 Redis 發佈與訂閱 和 鍵的過期時間

發佈和訂閱 每當有消息被髮送至給定頻道時, 頻道的所有訂閱者都會收到消息. 訂閱 SUBSCRIBE channel [channel …] 訂閱給定的一個或多個頻道的信息. 返回接收到的信息(請參見下面的代碼說明). # 訂閱 msg 和

原创 Redis 5種數據類型命令

在 Redis 數據類型 中我寫了 Redis 的 5 種數據類型和一些簡單的基礎命令. 這一章再寫一些更加深入的命令. 字符串 字符串可以存儲以下三種類型的值: 字符串 整數 浮點數 整數的取值範圍和系統的長整數 (long inte

原创 Redis 數據類型

Redis 簡介 Redis 是一個速度非常快的非關係數據庫, 它可以存儲鍵與 5 種不同兩類型的值之間的映射. 可以將存儲在內存中的鍵值對持久到硬盤, 可以使用複製特性來擴展讀性能, 還可以使用客戶端分片來擴展寫性能. 分片分片是一種將

原创 解碼器 與 編碼器

解碼器 ByteToMessageDecoder 抽象類 將字節解碼爲消息(或者另一個字節序列), Netty 爲它提供了一個抽象的基類: ByteToMessageDecoder. 由於你不可能知道遠程節點是否會一次性地發送一個完整的消

原创 EventLoop 和 線程模型

關於 Reactor 的線程模型 首先我們來看一下 Reactor 的線程模型.Reactor 的線程模型有三種: 單線程模型 多線程模型 主從多線程模型 首先來看一下 單線程模型: 所謂單線程, 即 acceptor 處理和 han

原创 ChannelPipeline 和 ChannelHandler

ChannelHandler Channel Channel 概念與 java.nio.channel 概念一致, 用以連接IO設備 (socket, 文件等) 的紐帶. 例如將網絡的讀、寫, 客戶端發起連接, 主動關閉連接, 鏈路關閉,