Redis 是一個 客戶端-服務器 結構的程序,這與 MySQL 是類似的,這點需要牢記!!!
Redis 固然好,但也不是任何場景都適合使用 Redis,一定要根據當前的業務需求來選擇是否使用 Redis
Redis 通用命令
Redis 的命令有很多,借助官方文檔可以更快的找到自己想要的命令
Redis 命令參考
set get
set key value
get key
get
和 set
是 Redis 最基本的命令,用于獲取和設置鍵值對。
如果鍵不存在,get
會返回 nil
,set
會創建一個新鍵。
What Is the Difference Between ‘Null’ and ‘Nil’
‘Null’ and ‘Nil’ are synonymous and both mean ‘zero’ or ‘nothing’ in value. The two words differ by what field we use them in. We use ‘Null’ mostly in maths, programming, business, and legal matters. On the other hand, we use ‘Nil’ in sports and games.
key
和value
都是字符串類型,不需要加上引號,加上單引號和雙引號也不會報錯,但是不推薦。
Redis 的命令是不區分大小寫的,但是推薦使用小寫,因為更好看~~
keys
keys pattern
keys
命令用于獲取所有鍵的名稱。
pattern
表示匹配模式,Redis 官方提供了多種匹配模式,可以根據需要選擇:
h?llo
matches hello, hallo and hxllo ? 匹配任何單個字符。
h*llo
matches hllo and heeeello*
匹配任何數量的字符。
h[ae]llo
matches hello and hallo, but not hillo [ae] 只能匹配 a 和 e。
h[^e]llo
matches hallo, hbllo, … but not hello[^e]
匹配除了 e 之外的任何字符。
h[a-b]llo
matches hallo and hbllo, but not hello or hillo[a-b]
匹配 a 到 b 之間的任何字符。
注意事項:
keys * 可以獲取所有鍵,但是不推薦使用,因為 Redis 使用的是單線程,如果數據庫里有大量的鍵,會導致查詢速度緩慢,從而影響其他客戶端的請求響應。
當使用 Redis 作為緩存數據庫(MySQL)時,若 Redis 服務器阻塞,則可能會導致全量數據庫的請求突增,導致數據庫崩潰。
exists
exists key [key...]
exists
命令用于判斷鍵是否存在。
返回值為 key 存在的個數,如果 key 不存在,則返回 0。
一次性可以查詢多個鍵是否存在。
如果有一次性查詢多個鍵的需求,也更推薦一次性查詢完所有需要查詢的。由于 Redis 客戶端 和 Redis 服務器之間是通過網絡通信的,每發起一次查詢都會構造一個請求,多次查詢會導致效率比較低。
del
del key [key...]
del
命令用于刪除鍵。
返回值為被刪除的 key 數量。
如果作為 緩存數據庫,可以使用 del 命令刪除一些沒用的鍵,因為數據還是存儲在全量數據庫里。
如果作為 全量數據庫,則不推薦使用 del 命令
如果作為消息隊列,則根據業務需求來看
expire
expire key seconds
expire
命令用于設置鍵的過期時間。
返回 1 表示設置成功,0 表示設置失敗。
pexpire
pexpire key milliseconds-timeout
pexpire
命令用于設置鍵的過期時間,單位是毫秒。
返回 1 表示設置成功,0 表示設置失敗。
ttl
ttl key
ttl
命令用于獲取鍵的剩余過期時間。
返回值是秒數,-1 表示沒有設置過期時間,-2 表示鍵不存在。
pttl
pttl key
pttl
命令用于獲取鍵的剩余過期時間,單位是毫秒。
返回值是毫秒數,-1 表示沒有設置過期時間,-2 表示鍵不存在。
type
type key
type
命令用于獲取改鍵對應的值的類型。
返回值可以是 string, list, set, zset, hash, stream…
Redis 鍵的過期策略
Redis 鍵的過期策略主要有兩種:
- 定期刪除:Redis 會在一定時間內,抽取一部分鍵,查看其是否過期,如果過期,則刪除。由于 Redis 是單線程的,所以需要盡可能這個過程足夠快,不然會影響其他客戶端的請求響應。
- 惰性刪除:Redis 不會主動刪除過期的鍵,而是客戶端每次獲取鍵時,檢查是否過期,如果過期,則刪除該鍵,同時返回一個 nil。