全局命令
Redis 有 5 種數(shù)據(jù)結(jié)構(gòu),它們是鍵值對(duì)中的值逾一,對(duì)于鍵來說有一些通用的命令。
查看所有的鍵
keys *
鍵的總數(shù)
dbsize
使用dbsize
會(huì)獲取 Reids 內(nèi)置的鍵總數(shù)變量肮雨,而 keys
命令會(huì)遍歷所有鍵。所以,當(dāng) Redis 保存了大量鍵時(shí)怨规,線上環(huán)境禁止使用陌宿。
檢查鍵是否存在
exists key
刪除鍵
del key [key ...]
鍵過期
expire key seconds
該命令會(huì)返回 3 種可能的值:
- 大于 0 的整數(shù)波丰,表示鍵剩余的過期時(shí)間
- -1, 表示鍵沒有設(shè)置過期時(shí)間
- -2呀舔, 表示鍵不存在
也可以通過ttl
命令來查看鍵的剩余時(shí)間扩灯。
鍵的數(shù)據(jù)結(jié)構(gòu)類型
type key
數(shù)據(jù)結(jié)構(gòu)和內(nèi)部編碼
每種數(shù)據(jù)結(jié)構(gòu)都有自己底層的內(nèi)部編碼實(shí)現(xiàn)霜瘪,而且是多種實(shí)現(xiàn)珠插,在合適的場(chǎng)景下使用合適的內(nèi)部編碼。
查看內(nèi)部編碼
object encoding
這種設(shè)計(jì)的好處有兩個(gè):
- 可以改進(jìn)內(nèi)部編碼颖对,且不影響用戶的使用捻撑。
- 多種內(nèi)部編碼可以適用于多種場(chǎng)合缤底,充分利用不同編碼的不同特性顾患。
單線程架構(gòu)
Redis 使用了單線程架構(gòu)和 I/O 多路復(fù)用模型來實(shí)現(xiàn)高性能的內(nèi)存數(shù)據(jù)庫(kù)服務(wù)个唧。
每一條從客戶端到服務(wù)器的命令都會(huì)被加入隊(duì)列,之后輪詢執(zhí)行徙歼。也就說犁河,同一時(shí)刻魄梯,不會(huì)有兩條命令執(zhí)行桨螺。
同時(shí)酿秸,因?yàn)橐幌略蛎鹣瑁赃@樣單線程也能十分高效:
-
純內(nèi)存訪問
內(nèi)存的響應(yīng)時(shí)間大約為100納秒,這是 Redis 達(dá)到每秒萬級(jí)別訪問的重要基礎(chǔ)肝箱。
-
非阻塞 I/O
Redis 使用 epoll 作為 I/O 多路復(fù)用技術(shù)的實(shí)現(xiàn),再加上 Redis 自身的事件處理模型將 epoll 中的鏈接狭园、讀寫、關(guān)閉都轉(zhuǎn)換為事件唱矛,不在網(wǎng)絡(luò) I/O 上浪費(fèi)太多的時(shí)間。
單線程避免了線程切換和競(jìng)態(tài)產(chǎn)生的消耗
但是單線程會(huì)產(chǎn)生一個(gè)問題:對(duì)于每個(gè)命令的執(zhí)行時(shí)間是有要求的井辜。如果某個(gè)命令執(zhí)行過長(zhǎng),會(huì)造成其他命令的阻塞粥脚。