原创 緩存雪崩的解決方案

1. 什麼是緩存雪崩? Redis裏面會有大量的key,通常會設置過期時間,在某個時間點全部都失效了,恰巧同時有大量的請求過來,那麼請求都直接湧向數據庫,數據庫支撐不住造成宕機,這種現象叫做緩存雪崩 2. 雪崩預防 永不過

原创 負載均衡之url_hash和least_conn

1. url_hash 如下圖所示,跟ip_hash原理類似,將url的hash值對Tomcat的數量求模,映射到特定的服務器 在nginx.conf的配置方法如下: 2. least_conn 如下圖所示,least_con

原创 Redis五大數據類型之hash

類似於Java的map,把一個結構化的數據存放到Redis裏面,比如: user { name: tiedan, age: 18, sex: man } user對應key,name對應property,tiedan對應v

原创 業界主流的分佈式消息隊列與技術選型

1. 分佈式消息隊列應用場景 服務解耦:系統之間、服務之間作出必要的隔離,這是業務層面的劃分,然後採用消息隊列進行通信 削峯填谷:比如說秒殺活動,如何對這個服務進行抗壓,把流量的高峯和低谷的速率進行一個均衡,這是消息隊列做的最核

原创 Redis五大數據類型之list

list可以當做一個數組。 可以通過lpush key [value…]來創建數組並從左向右放進去元素或者使用rpush key [value…]從右向左放入元素。 lpush listA a b c d的結果就是[d,c,b,a

原创 爲什麼會出現死鎖?

1. 認識死鎖 死鎖是指兩個或者多個事務在同一資源上相互佔用,並請求鎖定對方佔用的資源,從而導致惡性循環的現象。 2. 爲什麼會產生死鎖 不同線程(不同事務)併發訪問同一張表的多行數據,未按照順序訪問導致死鎖 不同線程(不同事務

原创 Redis五大數據類型之set

set類型用於存儲無序、不重複的數據。 往set中插入數據,並羅列出set中的元素 判斷set中元素個數,判斷某個元素是否存在於set中 移除set中某個元素 隨機彈出一個元素 隨機彈出兩個元素

原创 Redis持久化機制之AOF

因爲RDB的持久化機制是定期全量備份,有可能導致最後一次的需要備份的數據還沒來得及備份就丟失了,但其實也無所謂,畢竟是緩存如果追求數據的完整和安全性,就需要考慮AOF的機制了。 1. AOF特點 以日誌的形式來記錄用戶請求的寫操

原创 Redis持久化機制之RDB

1. 什麼是RDB? RDB:每隔一段時間,把內存中的數據寫入磁盤的臨時文件,作爲快照,恢復的時候把快照文件讀進內存。如果宕機重啓,那麼內存裏的數據肯定會沒有的,重啓Redis後,則會恢復。是一個全量的備份模式。 簡單說,就是Re

原创 elasticsearch文檔基本操作

添加文檔,並自動映射索引屬性 先創建一個沒有屬性的索引index_demo 然後,添加文檔,並指定屬性,地址欄的1表示文檔的id,如果不指定1,那麼es會自動生成一個id 刪除id爲1的文檔,刪除操作是邏輯刪除,沒刪除一次,

原创 緩存穿透的解決方案

1. 什麼是緩存穿透? 查詢的key在redis中不存在 對應的id在數據庫也不存在 此時被非法用戶進行攻擊,大量的請求直接打在db上,造成宕機,這種現象叫做緩存穿透 2. 解決方案:緩存空數據 把空的數據也緩存起來,比如:

原创 elasticsearch的dsl搜索(1)

1. 準備索引庫 2. 錄入數據 以此類推,錄入3條數據,本文舉一個例子: 3. match match: 先對詞條進行分詞,分詞後的任一詞語出現在當前字段中就可以查詢到 查詢desc屬性中含有天氣的文檔 結果如下,找

原创 聯合索引有哪些講究?

1. 認識聯合索引 聯合索引:是指對錶上的多個列進行索引。適合where條件中的多列組合,在某些場景可以避免回表。 如下圖所示: 在進行order by操作時,聯合索引的字段數量大於1,比如上圖就有a和b兩個字段,與單個字段的B

原创 爲什麼添加索引能提高查詢速度?

當使用條件查詢語句時,我們可以在條件查詢的字段上添加索引來提高查詢性能,爲了便於理解MySQL的索引,我們先了解一些與索引相關的算法。MySQL中使用最頻繁的就是B+樹索引,而B+樹是借鑑了二分查找法、二叉查找樹、平衡二叉樹、B樹

原创 使用Gzip壓縮提高請求效率

在nginx的核心配置文件裏面可以配置Gzip壓縮來減少html、css、js、圖片、音視頻等文件的大小,提供文件傳輸效率。 常用的配置如下: #開啓gzip壓縮功能,目的:提高傳輸效率,節約帶寬 gzip on; #限制最小