Redis官方文檔
redis官方文檔
核心命令
set
將key和value存儲到Redis中,key和value都是字符串
set key value
Redis中不區分大小寫,字符串類型也不需要添加單引號或者雙引號
get
根據key讀取value,如果當前key不存在,則返回nil(等同于NULL)
get key
全局命令
Redis中有多種數據結構——字符串,哈希表,列表,集合,有序集合,不同的命令操作不同的數據結構。而全局命令可以操作任意一個數據結構
keys
通過通配符描述key的模樣,匹配上的key就會查詢出來,時間復雜度為O(n)
keys pattern
其中的pattern就是包含特殊符號的字符串
通配符 | 作用 |
---|---|
? | 匹配任意一個字符 |
* | 匹配0個或多個任意字符 |
[a,b,c,d] | 匹配a,b,c,d中的字符,其他的不可以 |
[^a] | 只有a不能被匹配 |
[a-z] | 匹配a-z之間的任意字符,包含a和z |
?
*
[a,b,c]
[^a]
[a-z]
exists
判斷key是否存在,返回key存在的個數,時間復雜度為O(N),N是檢查key的個數
exists key [key ...]
之所以要同時判斷多個key是否存在,是因為Redis是一個客戶端,服務器結構的程序,其交流通過網絡通信。而網絡通信的效率是很慢的,需要經過層層封裝和分用。因此Redis中的很多命令都支持多個key同時操作
del
刪除指定的key,返回刪除成功的key的個數,語法和exists類似,可以刪除一個或多個key
del key [key ...]
expire
給指定的key設置過期時間(key的存活時間超過這個指定的時間就會自動刪除),單位是秒,需要注意的是,設定的key必須存在
返回值:設置成功返回1,設置失敗返回0
expire key seconds
如果想要設置精確值更小的過期時間,可以使用pexpire,單位是毫秒
ttl
查詢當前key剩余的過期時間,單位是秒
返回值:剩余的過期時間, -1:沒有關聯過期時間,-2:key不存在
ttl key
同樣,要有pttl命令,單位是毫秒
ip協議的報頭中也有一個ttl字段,代表過期時間,單位是次數
Redis的key過期策略
Redis中存儲了大量的key,那么他是如何知道哪些key已經過期了要被刪除,哪些key還沒過期呢?
顯然,一次次遍歷所有的key,確定key是否過期,效率非常慢,并且占用系統的資源
在Redis中,主要采用了下面兩種策略
- 定期刪除:每次抽取一部分,驗證過期時間,并且需要保證這個過程足夠快(Redis是單線程的程序,刪除操作不能阻塞正常的處理請求命令)
- 惰性刪除:key雖然到達了過期時間,但是還沒刪除,后面一次訪問用到了這個key,Redis會先觸發刪除這個key的操作,然后返回nil
其實,Redis可以基于優先級隊列或者時間輪實現一個定時器,來清理過期的key,但是Redis并沒有采取這種措施,因為定時器的實現需要引入多線程,而Redis作者早期就奠定了單線程的基調
type
返回key對應的value的數據類型
例如:none,string,list,set,zset,hash,stream
type key