前言
在我們的印象中redis命令好像都是一個(gè)個(gè)單條進(jìn)行執(zhí)行的,
如果有人問你如何批量執(zhí)行Redis命令,你能回答的上嗎,或者說能答出幾種方式呢?
最容易想到的是Redis的一些批量命令,例如MGET
今天小許就這個(gè)問題給大家總結(jié)一下!
圖片
Redis命令執(zhí)行過程
在了解批量執(zhí)行有哪些方式之前,我們簡(jiǎn)單回顧下Redis命令執(zhí)行的過程:
圖片
為什么需要批量執(zhí)行命令呢?
在了解批量執(zhí)行命令有哪些方式之前,我們先簡(jiǎn)單整理下【批量執(zhí)行命令】比【執(zhí)行多個(gè)單Redis命令】能帶來哪些好處!
通過批量執(zhí)行命令好處如下:
- • 提高命令執(zhí)行效率:減少網(wǎng)絡(luò)延遲,提高Redis服務(wù)器的響應(yīng)速度
- • 簡(jiǎn)化客戶端邏輯:將多個(gè)命令封裝成一個(gè)操作,簡(jiǎn)化客戶端處理邏輯
- • 提升事務(wù)性能:可以保證一組命令在同一時(shí)間內(nèi)執(zhí)行,提高事務(wù)的性能
圖片
你看單個(gè)執(zhí)行命令每次都需要發(fā)送進(jìn)行網(wǎng)絡(luò)傳輸,同樣多的執(zhí)行,批量執(zhí)行可以有效減小網(wǎng)絡(luò)開銷,減少 RTT(往返時(shí)間)。
批量執(zhí)行命令的方式
有以下四種常見批量執(zhí)行命令的方式:
1. Redis原生命令:例如 MSET、HMGET、HMSET、SADD
2. pipeline(管道)
3. Lua腳本
4. Redis事務(wù)
圖片
我們來給每種方式簡(jiǎn)單舉個(gè)栗子,然后看看有什么需要注意的地方!
原生批量命令
Redis的原生命令就支持批量命令的操作,比如:HMSET、HMGET、SADD。
其實(shí)嚴(yán)格來說上述命令不屬于批量操作,而是在一個(gè)指令中處理多個(gè)key,我們來看下具體該如何使用。
String字符串
MSET:設(shè)置一個(gè)或多個(gè)指定 key 的值
MGET:從一個(gè)或多個(gè)指定的key中獲取值
MSET key value [key value ...]
MGET key [key ...]
Hash哈希
操作哈希類型時(shí),使用HMSET和HMGET命令分別設(shè)置和獲取多個(gè)字段及其值
HMSET:將一個(gè)或多個(gè) field-value 對(duì)設(shè)置到指定哈希表中
HMGET:從指定指定哈希表中一個(gè)或者多個(gè)字段的值
HMSET key field value [field value ...]
HMGET key field [field ...]
Sorted Set 有序集合
SADD可以將多個(gè)元素添加到有序集合
SADD key member [member ...]