鍍金池/ 問(wèn)答/人工智能  網(wǎng)絡(luò)安全/ redis連接池問(wèn)題

redis連接池問(wèn)題

??比如就一個(gè)服務(wù)A,部署在服務(wù)器1上。
??redis部署在服務(wù)器2上。

?????為什么還會(huì)需要redis連接池這個(gè)東西?我在服務(wù)A上維護(hù)一個(gè)全局變量的redis連接實(shí)例,前端請(qǐng)求過(guò)來(lái)我都是用這個(gè)連接實(shí)例去執(zhí)行redis指令,不也可以嗎?

?????redis連接池,無(wú)非就是高并發(fā)的時(shí)候可以支持多個(gè)redis連接實(shí)例去連接redis,但是redis本身就是單線程的,我多個(gè)連接同時(shí)去連redis(不還是得排隊(duì)么),然后執(zhí)行指令,和我單個(gè)全局連接直接去一個(gè)個(gè)執(zhí)行redis指令,感覺(jué)應(yīng)該差不多性能吧?
?????而且如果是全局單個(gè)redis連接的話,每次請(qǐng)求過(guò)來(lái)我還省了連接這個(gè)操作,不是又省了點(diǎn)時(shí)間么?

回答
編輯回答
萢萢糖

樓主所說(shuō)的并不正確。

  1. redis本身是單線程的沒(méi)有問(wèn)題,但這并不表示,使用連接池不能提供效率,只是不能通過(guò)多線程提高效率而已。
  2. redis連接池較單鏈接的效能提高很多。要了解為什么redis連接池能夠這么大幅的提高性能,就要了解單鏈接的性能瓶頸在哪。
    單線程并不是redis性能瓶頸。對(duì)redis而言,有兩個(gè)性能所在(一個(gè)是計(jì)算性能,也就是所謂的執(zhí)行命令速度,另一個(gè)是網(wǎng)絡(luò)通信性能)。很顯然,redis較執(zhí)行效率而言,通信才是其瓶頸。據(jù)我所知(不一定正確,但也相差無(wú)幾),redis執(zhí)行命令大概是10w/s,因此,對(duì)于客戶端將若干條(若干條顯然不會(huì)很大)命令傳輸給redis服務(wù),命令執(zhí)行時(shí)間和通信時(shí)間比等于0.(假設(shè)以1s舉例,幾條命令傳輸時(shí)間為40ms,而每秒可執(zhí)行10w個(gè)命令,即n/10w 秒就可執(zhí)行完畢,等待下一個(gè)命令到來(lái)的時(shí)間間隙(約39ms多)redis沒(méi)有任何命令執(zhí)行),這就造成了redis閑置。
    綜上,要提高redis的性能,可以降低單位時(shí)間內(nèi)的通信成本。那么連接池就是一個(gè)不錯(cuò)的選擇。
    客戶端使用連接池+多線程方案,使得使得redis服務(wù)閑置時(shí)間降低,極大地提高了服務(wù)效率。
2017年2月3日 09:22
編輯回答
憶往昔

確實(shí)可以如題主說(shuō)的做
連接池管理連接,而這個(gè)管理的過(guò)程,我們當(dāng)然自己可以做。
連接池可以看作是,有人幫你做了這部分工作,而你可以選擇自己實(shí)現(xiàn)一次,并沒(méi)有什么壞處。
學(xué)習(xí)一下怎么負(fù)載均衡也是好的。

2018年9月18日 04:05