2.1.1 全域性命令
檢視所有鍵
key *
插入字串鍵值對
set hello world:hello是key,world是value
dbsize:鍵總數
插入列表型別的鍵值對:
rpush mylist a b c d e f g
dbsize直接獲取redis內建的鍵總數變數:o(1)
keys *則o(n)
檢查鍵是否存在
exists key
del key無論值是什麼資料結構型別
鍵過期expire key seconds
檢視鍵過期還剩多少時間
ttl> 0
-1 鍵沒設定過期時間
-2 鍵不存在
鍵的資料結構型別
type key
2.1.2 資料結構和內部編碼
string 、hash、list、set、zset,每種資料結構有自己的底層的內部編碼實現
例如list資料結構包含了linkedlist和ziplist兩種內部編碼
2.1.3 單執行緒架構
redis使用了單執行緒架構和i/o多路復用模型
每次客戶端呼叫都會經歷傳送命令、執行命令、返回結果三個過程,
第二步需要重點討論,因為redis是單執行緒來處理命令,所以一條命令
傳送後,所有命令會進入乙個佇列中。
為什麼單執行緒還能這麼快?
第一,純記憶體訪問,記憶體的響應時間長約為100納秒
第二,非阻塞i/o,redis使用epoll作為i/o多路復用技術,
第三,單執行緒避免了執行緒切換和競爭產生的消耗
set命令有幾個選項
ex seconds
px milliseconds
nx:鍵必須不存在,用於新增
xx:鍵必須存在,用於更新
setxx和setnx和帶引數的set對應的用法相同,那麼setnx
和setxx在有什麼實際應用場景嘛?例如setnx,如果多個客戶端
執行setnx key value,只有乙個客戶端能設定成功,setnx可以作為
分布式鎖的一種實現方案。
批量設定值
mset key value [key value ...]
批量獲取值
mget key [key...]
批量操作命令有效提高開發效率,例如mget,要執行n次
get命令,如果用get來,則需要耗時:n次網路時間+n次命令時間
mget則只需要一次網路時間+n次命令時間
2.2.2 內部編碼
int:8個位元組的長整型
embstr:小於等於39個位元組的字串
raw:大於39個位元組的字串
典型使用場景:
限速,如傳送簡訊驗證碼,限制簡訊介面不被頻繁訪問
集中管理session:乙個分布式web服務將使用者的session資訊儲存在
各自的伺服器中,這樣造成乙個問題,使用者重新整理一次,可能需要重新登陸。
主要是負載均衡,分布式服務會將使用者訪問均衡到不同伺服器。
可以使用redis對使用者session進行集中管理。
也叫雜湊、字典、關聯陣列。我們可以通過key直接訪問。
雜湊型別中的對映關係叫做field-value,不是key-value
2.3.1 命令
hset key filed value
hset user:1 name tom
此外也提供hsetnx命令
hget key field
批量設定或獲取field-value
hmget key field [field...]
hmset key filed value [field value...]
2.3.2 內部編碼
ziplist壓縮列表的使用條件?
hashtable雜湊表的使用條件?
哪幾種情況內部編碼會由ziplist轉為hashtable?
2.3.3 使用場景
有哪三種方法快取使用者資訊?
1)原生字串型別:每個屬性乙個鍵
set user:1:name tom
set user:1:age 23
set user:1:city beijing
占用過多鍵,記憶體佔用量大,使用者內聚性較差
2)序列化字串型別:將使用者資訊序列化後用乙個鍵儲存,取出後
反序列化即可
set user:1 serialize(userinfo)
序列化和反序列化有一定開銷,同時每次更新屬性需要把全部資料
取出來反序列化,更新後序列化到redis
3)雜湊型別:field-value
要控制雜湊在ziplist和hashtable兩種內部編碼轉換,hahstable會
消耗更多記憶體
可以對列表兩端插入和彈出,可以充當佇列和棧
2.4.1 命令
從左到右獲取列表所有元素
lrange listkey 0 -1
2.4.2 內部編碼
ziplist
linkedlist
和雜湊的限制一樣
2.4.3 使用場景
1.訊息佇列
lpush+brpop組合可實現阻塞佇列,生產者客戶端使用lpush從列表
左側插入元素,消費者客戶端使用brpop阻塞式搶列表尾部元素
2.文章列表
理解 API 使用
深入理解apiwindows api 包括上千個函式,主要分為以下幾部分 在我們編寫windows應用程式的利器 define win32 lean and mean include 順序 include include pragma comment lib,ws2 32.lib 鏈結庫window...
API的理解和使用 全域性命令
全域性命令 命令功能set 建立鍵值對 keys 遍歷檢視所有鍵 exists 判斷乙個鍵是否存在,1存在,0不存在 dbsize 當前資料庫中有多少個鍵 del刪除乙個或多個鍵 expire 設定過期時間 ttl檢視過期時間 type 判斷鍵的型別 redis有5種資料結構,它們是鍵值對中的值,對...
API的理解和使用 全域性命令
全域性命令 命令功能 set建立鍵值對 keys 遍歷檢視所有鍵 exists 判斷乙個鍵是否存在,1存在,0不存在 dbsize 當前資料庫中有多少個鍵 del刪除乙個或多個鍵 expire 設定過期時間 ttl檢視過期時間 type 判斷鍵的型別 redis有5種資料結構,它們是鍵值對中的值,對...