上篇文章簡單的介紹了redis的使用場景和優缺點,本文接着解答如下幾個問題:redis
這些問題實際上歸結起來都和redis 提供的數據結構有關,接下來重點帶着這些問題重點解讀redis的數據結構和使用場景。(·我以爲技術自己不能創造價值,只有找到對應的適用場景,解決業務中的問題,才能產生價值
)。數據庫
` redis 是基於key-value的數據庫,全部的key都是字符串類型,針對value值的不一樣,又劃分爲字符串,列表,集合,有序集合,散列表,(位圖,hyperLoglog,GEO) 等等`。
複製代碼
本文主要介紹字符串有表明性的一些命令以及對應的適用場景。json
將字符串值 value 關聯到 key,若是 key 已經持有其餘值, SET 就覆寫舊值,無視類型,對於某個本來帶有生存時(TTL)的鍵來講, 當 SET 命令成功在這個鍵上執行時, 這個鍵原有的 TTL 將被清除.
參數介紹:
EX second :設置鍵的過時時間爲 second 秒。
PX millisecond :設置鍵的過時時間爲 millisecond 毫秒
NX :只在鍵不存在時,纔對鍵進行設置操做。
XX :只在鍵已經存在時,纔對鍵進行設置操做。
複製代碼
常見使用場景:緩存
緩存:能夠將要緩存的數據序列化成json串,存儲在key對應的value裏,同時能夠爲其指定過時時間;數據結構
分佈式鎖: 分佈式鎖設計時要考慮如下問題:異步
互斥性
可重入性
死鎖
鎖的性能
複製代碼
採用redis實現分佈式鎖,網上不少同窗都給了實現方案,此處就不囉嗦了。redis 實現分佈式鎖的優勢是加鎖釋放鎖很快。不過採用redis 實現分佈式鎖是有一些缺陷的,好比由於依賴鍵的過時機制,會致使若是加鎖時正常的業務代碼執行時間超出了鍵的過時時間,業務代碼尚未執行完時,鎖已經釋放掉了,這樣其餘線程就有可能獲取鎖,進而致使多個線程同時得到鎖,不能嚴格意義上保證鎖的排他性。因此在業務選擇時要考慮到這些方面。分佈式
將 key 中儲存的數字值增一。
若是 key 不存在,那麼 key 的值會先被初始化爲 0 ,而後再執行 INCR 操做。
若是值包含錯誤的類型,或字符串類型的值不能表示爲數字,那麼返回一個錯誤`
複製代碼
常見使用場景:性能
對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。
位的設置或清除取決於 value 參數,能夠是 0 也能夠是 1 。
當 key 不存在時,自動生成一個新的字符串值。
字符串會進行伸展(grown)以確保它能夠將 value 保存在指定的偏移量上。當字符串值進行伸展時,空白位置以 0 填充。
offset 參數必須大於或等於 0 ,小於 2^32 (bit 映射被限制在 512 MB 以內)。
複製代碼
統計和查找: 結合bitcount指令,好比從10億個無序的整數(範圍在0-40億)統計出前10個數,這種場景下使用bitmap 存儲時會極大的縮小佔用內存空間.spa
本文僅僅是簡單的介紹了一下redis 字符串類型的部分操做命令以及其相應的使用場景,關於redis的其餘數據類型以及相應的使用場景,再後續的文章中進一步進行介紹。線程