redis批量操作及性能分析
redis批量操作及性能分析
用過(guò)redis的小伙伴都知道,這東西是C/S的,就單純的ser key vvv 就要走一次TCP,記得官方是說(shuō)redis的qps將近10W,這...我不太敢相信,一秒鐘之內(nèi)對(duì)一個(gè)服務(wù)10W次TCP會(huì)啥樣,當(dāng)然可以走集群負(fù)載均衡,把Redis分片了,但是分片的話又會(huì)設(shè)計(jì)到很多東西,之前我整理過(guò),想了解的看下這: https://blog.csdn.net/u013761036/article/details/103636870?。
OK下面說(shuō)正事,基于redis的這種模式,我們?cè)谌粘J褂玫臅r(shí)候一定要注意進(jìn)行批量操作,這對(duì)系統(tǒng)調(diào)優(yōu)很重要,帶來(lái)的效果會(huì)非常大。
幾種常見的批量操作方式
?
1.批量命令:
每個(gè)數(shù)據(jù)類型都對(duì)應(yīng)著幾個(gè)批量操作的命令,例如mset/mget/hmset/hmget...,這種的一次可以對(duì)多個(gè)key進(jìn)行操作,相比于所有姿勢(shì)這個(gè)是最快的,因?yàn)檫@里面的對(duì)多個(gè)key進(jìn)行一次性操作,是一個(gè)命令,注意,是一個(gè)命令。不是把很多命令打包,也不是緩存了很多命令最后一起執(zhí)行。這是最快的方式。一次連接,一個(gè)命令。并且這個(gè)是原子操作。但是缺點(diǎn)是并不是所有命令都支持,只支持一小部分基本的命令,所以最終結(jié)論是,能用這個(gè)就一定用這個(gè),不能的話在用其他批量處理的姿勢(shì)。
?
2.管道:
???管道的話這么理解,有9個(gè)任務(wù),我們直接扔在一個(gè)管道里了(過(guò)大的話會(huì)被自動(dòng)分批發(fā)送),可能會(huì)變成3截。每截3個(gè)。每次發(fā)送一截。這樣不用建立9次連接發(fā)送9個(gè)。3次就可以了,這個(gè)就是管道的原理。同時(shí)一定要注意,管道的批量操作是建立在協(xié)議上的優(yōu)化,就是就是依靠協(xié)議進(jìn)行分批操作。同時(shí)一定一定記住,管道不是原子操作。
?
3.事務(wù):
???這么理解,先喊一聲 準(zhǔn)備,然后把所有任務(wù)都扔在車?yán)?#xff08;此時(shí)已經(jīng)陸續(xù)的傳給操作端了),然后再喊開始,所有被傳過(guò)去的任務(wù)才開始執(zhí)行。就是分三部分,準(zhǔn)備好了、上任務(wù)、干活。是不是感覺這東西可能會(huì)比管道慢點(diǎn),因?yàn)楣艿朗?仍一批過(guò)去、干活 再扔一批過(guò)去、干活 不用等都到了再開始統(tǒng)一干活。沒錯(cuò)。實(shí)際測(cè)試結(jié)果也是事務(wù)略微慢于管道一點(diǎn)點(diǎn),但是重點(diǎn)是這東西是 原子操作 原子操作 原子操作。
?
4.基于事務(wù)的管道:
管道是建立在協(xié)議上的,而事務(wù)是redis的命令。量道理可以通過(guò)協(xié)議的思路,也是就是管道把事務(wù)給拆成一節(jié)一節(jié)的。這個(gè)姿勢(shì)就是 基于事務(wù)的管道。性能略微好于事務(wù)。效果不明顯,操作也比較麻煩,所以較少使用。通常姿勢(shì)就是 能1.批量就批量,不能的話如果必須原子操作就3.事務(wù),否則就2.管道。
?
5.Redis批量操作原子性:還有就是關(guān)于每個(gè)姿勢(shì)到底是不是原子操作這個(gè)事,有很多爭(zhēng)論,其實(shí)要是理解redis工作原理和研究過(guò)redis分片的話(最好手寫那兩個(gè)算法,很簡(jiǎn)單),很容易分清狀況,并且考慮的時(shí)候要全面,分片姿勢(shì)有很多種的,雖然常見算法有兩種,key范圍和hash key,但是別忘記了分片的位置也很關(guān)鍵。你可以在客戶端分片(這可能會(huì)導(dǎo)致業(yè)務(wù)代碼里有分片代碼),也可以在中間件里分,就是把任務(wù)都扔給一個(gè)類似消息隊(duì)列的,然后統(tǒng)一處理,再或者自己搭建redis集群,然后在入口負(fù)載均衡的地方分。這導(dǎo)致的結(jié)果都將不一樣,同時(shí)還要考慮你每個(gè)環(huán)節(jié)用的什么框架,如果是手寫的要看自己的實(shí)現(xiàn)方式是啥樣的。有的是命令轉(zhuǎn)發(fā),有的是直接自己處理了,然后解析命令了。這都不一樣。
等有時(shí)間,我會(huì)補(bǔ)一個(gè)壓力測(cè)試的筆記。
總結(jié)
以上是生活随笔為你收集整理的redis批量操作及性能分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Docker Swarm服务发现和负载均
- 下一篇: MySql各引擎特点和性能测试