redis是一種常用來做快取的產品,今天,我們來簡單認識一下redis。
redis是乙個key-value型的資料庫,也就是說,乙個key對應乙個value,這是保證高效的手段之一。另外,redis的所有資料在使用時都存放在記憶體中。
1.快取穿透。
指在查詢乙個一定不存在的資料。由於快取是不命中的,將去查詢資料庫,但是資料庫也沒有此記錄,並且處於容錯考慮,沒有將查詢的null值寫入緩衝,這將導致不存在的資料每次請求都要到儲存層去查詢,失去緩衝的意思。在流量大時,可能db就要掛掉。
解決辦法:空結果進行快取,但它的過期時間會很短,最多不超過5分鐘。
2.快取雪崩
指我們設定緩衝是採用相同的過期時間,導致緩衝在某乙個時刻同時失效。
解決辦法:在原有的實效時間基礎上加乙個隨機值,這樣每個緩衝的過期時間重複率就會降低。
3.快取擊穿
對於一些設定了過期時間的key,如果這些key可能會在某些時間點被高併發訪問,是一種非常熱點的資料,這時候,需要考慮的乙個問題,如果這個key在大量請求的同時進來前正好失效,那麼所有對這個key的資料查詢都落到db。
解決辦法:使用redis資料庫的分布式鎖,解決db的訪問壓力問題。
第一種分布式鎖:redis自帶乙個分布式鎖,set ex nx
第二種分布式鎖:redisson框架,乙個redis的帶有juc的lock功能的客戶端實現
redis鎖的兩種意外
a.如果redis中的鎖已經過期了,然後鎖過期的那個請求又執行完畢,回來刪鎖,刪除的是其他執行緒的鎖,怎麼辦?
答案:用key獲取value值,判斷value值與set時是否一致
b.如果碰巧在查詢redis鎖還沒有刪除的時候,正在網路傳輸時,鎖過期了,怎麼辦?
jedis.eval(「lua」);可與用lua指令碼,在查詢到key的同時刪除該key,防止高併發下的意外的發生
存在重複(三種解法) leetcode
題目描述 給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列 現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。示例 1 輸入 1,2,3,1 輸出 true 示例 2 輸入 1,2,3,4 輸出 false 示例 3 輸入 1,1,1,3,3,4,3,2,4,2...
Redis的三種啟動方式
tar zxvf redis 2.8.9.tar.gz cd redis 2.8.9 直接make 編譯 make 可使用root使用者執行 make install 將可執行檔案拷貝到 usr local bin目錄下。這樣就可以直接敲名字執行程式了。make install 加上 號使redis...
Redis的三種啟動方式
出處 shell tar zxvf redis 2.8.9.tar.gz cd redis 2.8.9 直接make 編譯 make 可使用root使用者執行 make install 將可執行檔案拷貝到 usr local bin目錄下。這樣就可以直接敲名字執行程式了。make install s...