原创 Redis兩種持久化方式原理和單機多實例持久化腳本

注意:Linux系統使用redis需要更改系統的內存分配策略,執行sysctl vm.overcommit_memory=1命令,0-2分別代表不加載、加載、允許超額加載 一、RDB RDB持久化是把當前數據生成二進制快照保存到硬盤的過程

原创 通過原理理解爲什麼Redis的pipeline可以有效提升性能

Redis命令執行的過程 關於Redis服務如何處理每條指令已經有相關文章了,可以移步去看,這裏只討論命令發送之後的流程: 客戶端進程調用write操作將數據寫到本地操作系統內核的發送緩衝中 客戶端操作系統內核異步將數據發送到服務端機器

原创 通過存儲機制和隊列結構理解爲什麼RabbitMQ會隨着隊列堆積吞吐量降低

存儲機制 首先需要明確一點,不管是持久化消息還是非持久化消息都可以被寫入到磁盤。持久化消息在到達隊列時就被寫入到磁盤,並且如果內存允許,持久化到消息也會在內存中保存一份備份,這樣可以提高一定的性能,當內存不夠用時會從內存中刪除。非持久化的

原创 RabbiMQ的消息流向和備份交換機

在消息生產的 channel.basicPublish 方法中,有2個參數,用來控制消息如果無法成功到達目標隊列時返回給生產者。 mandatory和備份交換機 mandatory用來告知服務器至少將該消息發送到一個隊列中,否則將消息返回

原创 RabbitMQ的消息有效期(TTL)和隊列有效期(expires)

消息有效期 我們有2種方式設置消息的有效期: 一種是通過隊列屬性x-message-ttl設置,投遞到該隊列中的所有消息都有相同的過期時間 另一種是通過消息屬性expiration設置消息本身的有效期 如果兩種同時使用,會以兩者之間較小的

原创 RabbitMQ死信隊列和延遲隊列

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

原创 Redis客戶端通信協議

請求命令格式 每行用\r\n分割 第一行是參數數量 第二行開始,每行以此是每個參數的字節數和參數字符串,各佔一行 比如:set hello  redis *3 $3 SET $5 hello $5 redis 上面爲了方便看清,我們用換

原创 Redis慢查詢和slowlog

Redis命令執行步驟 發送命令 命令排隊 命令執行 返回結果 慢查詢只統計步驟3命令執行的時間,所以沒有慢查詢並不代表客戶端沒有超時問題。 配置項 slowlog-log-slower-than代表一條命令執行超過多少微秒就會記錄爲慢查

原创 Redis開發和運維相關shell命令總結

redis-cli 1、-r(repeat)選項代表將命令執行多次 $redis-cli -r 3 ping PONG PONG PONG 2、-i(interval)選項代表每隔幾秒執行一次命令,必須和-r選項同時使用 redis-

原创 Redis使用Lua腳本自定義原子操作

使用Lua的好處 命令原子執行,執行過程中不會插入其他命令 定製命令,並存在redis中複用 一次網絡IO發送多個命令,減少網絡開銷 執行Lua的兩個方法 1、eval: eval 腳本內容 key個數 key列表 參數列表 127.0

原创 Redis命令時間複雜度查詢表

String類型 命令 時間複雜度 set 0(1) get 0(1) del 0(k),k是鍵的個數 mset 0(k),k是鍵的個數 mget 0(k),k是鍵的個數 incr 0(1) decr 0(1) incryby 0(1)

原创 算法:生日吹蠟燭

題目:一個人從某歲生日開始,每年都會吹蠟燭,給定他吹的蠟燭總數,求出他所有連續吹蠟燭的年齡組合。 思路:轉換成給定一個數,求出連續整數相加之和等於目標數的所有組合 當前連續年齡個數 + 1,再除以2,然後乘以當前年齡個數,如果大於蠟燭數,

原创 Golang中的context包詳解

控制併發有兩種經典的方式,一種是 WaitGroup,另外一種就是 Context,今天我就談談 Context。 什麼是 WaitGroup WaitGroup 以前我們在併發的時候介紹過,它是一種控制併發的方式,它的這種方式是控制多個

原创 mysql的InooDB存儲引擎是如何實現事務的四個特性ACID的

原子性 undolog記錄反向操作 對於每一個insert,undolog記錄一個delete 對於每一個delete,undolog記錄一個insert 對於每一個update,undolog記錄一個相反的update 隔離性 四種隔離

原创 一個日誌系統需要具備哪些功能

在項目開發和線上運行不同場景下,日誌系統都是不可或缺的,一般日誌有以下幾個作用:記錄錯誤、性能分析、查看服務間的調用關係、記錄時間等。所以我們的日誌系統,就需要圍繞這些需求出發來設計,一般要有如下功能點: 日誌配置讀取:方便不同項目部署,