原创 兩階段提交協議

兩階段提交協議是最簡單最流行的ACP。在沒有故障發生的情況下,它的執行過程如下: 1. 協調者發送一個VOTE-REQ消息給所有的參與者 2.當參與者接收到VOTE-REQ消息後,它會發送一個包含參與者投票結果的消息(YES或NO)給協調

原创 秒殺系統的一點思考

秒殺系統難點往往是短時間內對數據進行讀寫,然後造成讀寫上的一些衝突,甚至鎖非常嚴重.當然知道難點在哪裏,我們自然就有辦法解決,人類智慧無限,辦法總比困難多. 簡單說來也就兩點,限流和提升關鍵點的性能. (1)限流,將請求儘量攔截在系統上游

原创 常見全局唯一Id生成策略分析

一,利用數據庫的auto_increment,生成全局唯一Id      這種方式操作簡單,核心功能由數據庫提供,唯一性能夠得到保證,因爲是自增,所以能保證有序,步長固定還能借此來對錶進行水平拆分(這樣破壞了有序性).最大的缺點是將壓力全

原创 Redis--protocol(通信協議)

Redis協議在以下三個目標之間進行折中:易於實現 可以高效地被計算機分析(parse) 可以很容易地被人類讀懂網絡層客戶端和服務器通過 TCP連接來進行數據交互, 服務器默認的端口號爲 6379 。客戶端和服務器發送的命令或數據一律以 

原创 Redis--persistence(持久化)

Redis提供了多種不同級別的持久化方式:RDB 持久化可以在指定的時間間隔內生成數據集的時間點快照(point-in-time snapshot)。 AOF 持久化記錄服務器執行的所有寫操作命令,並在服務器啓動時,通過重

原创 Redis--keyspace notification(鍵空間)

重要: Keyspace notifications 從2.8.0版本開始啓用 功能概覽 鍵空間通知使得客戶端可以通過發佈訂閱(Redis自帶)通道,來接收那些以某種方式改動了Redis 數據集的事件。 可以接受到通知的例子: 影響到鍵

原创 Redis--pub/sub(發佈與訂閱)

SUBSCRIBE 、 UNSUBSCRIBE 和 PUBLISH 三個命令實現了發佈與訂閱信息模型, 在這個實現中,發送者(發送信息的客戶端)不是將信息直接發送給特定的接收者(接收信息的客戶端), 而是將信息發送給某個通道,然後由通道將

原创 Redis複製-續

1. 主動複製避開Redis複製缺陷。   既然Redis的複製功能有缺陷,那麼我們不妨放棄Redis本身提供的複製功能,我們可以採用主動複製的方式來搭建我們的集羣環境。 所謂主動複製是指由業務端或者通過代理中間件對Redis存儲的數據

原创 Redis--Replication(複製)

Redis支持簡單且易用的主從複製(master-slave replication)功能, 該功能可以讓從服務器(slave server)成爲主服務器(masterserver)的精確複製品。以下是關於Redis 複製功能的幾個重要方

原创 Redis--transaction(事務)

MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事務的基礎。 事務可以一次執行一組命令,並且事物保證能做到如下兩點: 事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序地執行。事務在執行的過程中,

原创 Redis複製

   Redis的主從複製策略是通過其持久化的rdb文件來實現的,其過程是先dump出rdb文件,將rdb文件全量傳輸給slave,然後再將dump後的操作實時同步到slave中 Redis複製流程概述    Redis的複製功能是完

原创 列式數據庫

列式數據庫是以列相關存儲架構進行數據存儲的數據庫,主要適合與批量數據處理和即席查詢。相對應的是行式數據庫,數據以行相關的存儲體系架構進行空間分配,主要適合與小批量的數據處理,常用於聯機事務型數據處理。 列式數據庫以行、列的二維表的形式存儲

原创 Mysql優化小結

1. 要確保有足夠的內存 數據庫能夠高效的運行,最關建的因素需要內存足更大了,能緩存住數據,更新也可以在內存先完成。但不同的業務對內存需要強度不一樣,一推薦內存要佔到數據的15-25%的比例,特別的熱的數據,內存基本要達到數據庫的80%

原创 超神~java內存模型~基本概念

什麼是內存模型: 內存模型是一個規範,規定了多個線程之間對共享內存訪問的策略. 什麼是線程: cpu調度的最小單位,線程本身不擁有系統資源,同一個進程間的線程共享資源 線程通信: 指的是線程之間的信息交換,線程之間通信通過共享內存和

原创 Docker 簡介

Docker是什麼?就是老師常說的容器,就是提供了一套機制,然後將軟件和軟件運動環境一同打包,達到輕鬆遷移的目的.和java宣稱的一次編譯到處運行有類似的地方,只是java的到處運行需要虛擬機配合,而虛擬機需要自己安裝,而Docker則是