大家好,我是程序員若風,又到了技術分享時刻。
概要
在某些場景下,我們需要頻繁的使用到緩存,比如需要獲取多個key值,如果采用單個拿緩存的辦法,會造成網絡IO極大的浪費,所以我們需要用戶Redis的批處理。
批處理場景
- 批量獲取緩存
-
我們以獲取社區UGC內容為例子, 如果需要同時獲取10條UGC內容的點贊量,當然,點贊量我們是以集合的方式來存儲的,每一條UGC都對應的點贊集合,所以,如果我們要獲取這10條點贊的數量,就只能用循環的方式去讀取。這樣就會造成網絡IO的浪費,我們需要采用批量獲取的方式來拿數據
-
public function mgetSetCount($arr) { return RedisConnect->pipeline(function ($pipe) use ($arr) {$c = [];foreach ($arr as $key=>$value) {$c[] = $pipe->scard($value); } return $c;});}通過上面的方法,我們就能滿足要求。當然,我們這里用到了管道的技術,這個技術我會單獨寫一篇文章。
-
-
除了上面管道的方法,也有redis官方的命令能夠直接批量獲取緩存
+ mget
+ hmget
-
- 批量刪除緩存
- 批量刪除緩存同上面批量獲取緩存一樣,也可以使用管道來直接刪除我們想要刪除的健
public function delMul(array $keys){RedisConnect->pipeline(function ($pipe) use ($keys) {foreach ($keys as $cacheKey) {$pipe->del($cacheKey);}});}
- 批量設置緩存
public function MulSet(array $arr){return RedisConnect->pipeline(function ($pipe) use ($arr) {foreach ($arr as $item) {if (!$item['key'] || !$item['value'] || !$item['ttl']) {continue;}$pipe->set($item['key'], $value, 'EX', $item['ttl']);}});}
總結
Redis批處理算是redis我們實戰中的一種進階玩法,有的低流量項目,你不用Redis都可以,如果用上了Redis,用單一操作也是足夠了,但是如果我們想要低延時,高性能的服務。那么你肯定繞不開Redis批處理操作。