1. 程式人生 > >redis配置優化(記一次線上redis問題排查)

redis配置優化(記一次線上redis問題排查)

一、問題描述

在通過redis快取進行了一系列的介面效能優化後,大部分介面返回在1ms~200ms間,這都是redis的功勞,但隨著介面redis快取越來越多,新的問題產生了,從redis取資料竟然用了5s = =,通過觀察日誌,並不是每次取資料都是5s,
大部分情況從redis取資料還是很快的不會超過5ms.

二、解決

1 在檢視程式碼後,發現有些redis的key設計的過長,於是首先重新命名了rediskey儘量減少其長度,但觀察發現這種情況還
是存在,並且觀察日誌,redis取資料耗時長的問題大概隔一段時間才發生
2 檢視redis配置,發現redis初始化執行緒池大小沒有設定= =,需要知道的是redis初始化執行緒大預設是0,在瞭解redis模式
和伺服器端設定的連數大小後,果斷加上redis初始化執行緒大小.問題解決,如果以後發現這種問題,但檢察初始連線數已配置,可考慮初始連線數是否配置過小.

注意:
redis初始化執行緒數大小是需要根據redis併發數來設定的.

首先確定本專案reids是從主模式,單機配置,和服務端設定的最大連線數為10000,以及綜合考慮redis併發數大小
所以redis初始化連線數大小設定 100,具體redis配置如下:

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!--最大連線連線-->
        <property name="maxTotal" value="500" />
<!--最大空閒連線數,在連線空閒一段時間後,會自動回收,並恢復到最小空閒連線數個數--> <property name="maxIdle" value="300"/> <!--初始化連線數或最小空閒連線--> <property name="minIdle" value="100"/> <!--最大等待連線數--> <property name="maxWaitMillis" value="2000" /> <property
name="testOnBorrow" value="true"/>
</bean>

在配置完連線數後,還可觀察redis目前最大連數,最小連線數,來適當調整redis連線數大小