原创 布隆過濾器

這玩意用來幹嘛呢?我說個場景:我給你推送新聞,理論上來講每條新聞只能推送一次,那麼該如何確保每條新聞只對你推送一次呢? 布隆過濾器就是用來解決此類問題的,雖然稍微有那麼點不精確,但人家在空間上能節省90%以上。Redis4.0之後才提供該

原创 管道

我對管理的理解,就是管道有點像HTTP長連接。 以某條指令爲例: 1、客戶端進程調用write將消息寫到操作系統內核爲套接字分配的發送緩衝send-buffer。 2、客戶端操作系統內核將發送緩衝的內容發送到網卡,網卡硬件將數據通過「網際

原创 事務

Redis事務分爲3個指令: multi表示事務開始 exec表示事務執行。指令在exec之前不執行,統一緩存在服務器的一個事務隊列中,當執行exec指令後,纔開執行整個事務隊列,執行完畢後一次性返回所有指令的運行結果。 discard表

原创 HyperLogLog

HyperLogLog就是用來解決統計問題的。算是一種不精確的去重統計方案,誤差是 0.81%,基本滿足絕大部分統計需求。 點贊 收藏 分享 文章舉報 弱即罪 發佈了167 篇

原创 管道

我對管理的理解,就是管道有點像HTTP長連接。 以某條指令爲例: 1、客戶端進程調用write將消息寫到操作系統內核爲套接字分配的發送緩衝send-buffer。 2、客戶端操作系統內核將發送緩衝的內容發送到網卡,網卡硬件將數據通過「網際

原创 異步消息隊列list

Redis的list也可以作爲異步消息隊列來使用,當然,你可以用來處理非重要數據,如果是重要數據的話,建議還是使用專業的MQ消息隊列。 list使用rpush/lpush入隊列、lpop和rpop出隊列。 說白了,就是建立一個循環來不停的

原创 scan與keys

如何從大量的key中年找到自己想要的特定key列表呢?常用的keys指令有幾個缺點: 缺點1:沒有offset、limit參數,因此會一次性吐出所有滿足條件的key。 缺點2:keys算法是遍歷算法,複雜度是O(n),該指令就會導致Red

原创 管道

我對管理的理解,就是管道有點像HTTP長連接。 以某條指令爲例: 1、客戶端進程調用write將消息寫到操作系統內核爲套接字分配的發送緩衝send-buffer。 2、客戶端操作系統內核將發送緩衝的內容發送到網卡,網卡硬件將數據通過「網際

原创 主從同步

Redis只保證最終一致性,網絡正常情況下,從節點努力追趕主節點,從而實現主從狀態一致;如果網絡斷開又恢復後,從節點會採用多種策略去努力趕上主節點,盡力跟主節點保持一致性。 同步策略1:主從同步 支持主從同步、從從同步,只不過從從同步功能

原创 Redis通信協議

Redis用的是文本協議,簡單,易於理解,一目明瞭。 協議規範: ①協議將傳輸的結構數據分爲5種最小單元類型,單元結束時統一加上回車換行符號\r\n。 ②單行字符串以+符號開頭:+hello\r\n ③多行字符串以$符號開頭,後跟字符串長

原创 集羣:Cluster

Codis算是第三方的解決方案,而Cluster是Redis官方的解決方案。 問題1:Cluster大致工作流程是什麼? 答:Cluster一共有16384個槽位,這些槽位被分配給不同的Redis實例,且Redis實例自己保存16384個

原创 ECMAScript6-不定參數

不定參數,這讓我想起2件事情: ①java的可變參數。感覺ECMAScript6的不定參數跟java的可變參數真像。 ②js的arguments對象。其實arguments對象也能實現不定參數的效果,只不過其可讀性不高,進而導致後期維護比

原创 消息隊列:Stream

問題1:Stream工作過程如何? 答:Stream有一個消息鏈表,將所有加入的消息都串起來,每個消息都有一個唯一的ID和對應的內容。消息是持久化的,Redis重啓後內容還在。 每個Stream都有唯一的名稱,名稱就是Redis的key,

原创 ECMAScript6-模板字符串

模板字符串啊,模板字符串,整體給我的印象,有點像我之前用過的FreeMarker,一種佔位符的感覺。 模板字符串使用反撇號`來取代普通字符串的單引號’或雙引號”,除此之外,至少看起來與普通字符串沒什麼大區別。 模板字符串最基本的用途就是模

原创 集羣:Codis

Codis就是一個Redis代理中間件,其對外協議與Redis協議保持一致,當客戶端向Codis發送指令時,Codis負責將指令轉發到後面的Redis實例來執行並將返回結果再轉回給客戶端。 Codis掛接的所有Redis實例構成一個Red