Redis客戶端 Jedis 與 Lettuce
點(diǎn)擊上方“程序員大白”,選擇“星標(biāo)”公眾號(hào)
重磅干貨,第一時(shí)間送達(dá)
Lettuce 和 Jedis 的定位都是 Redis 的 client,所以它們可以直接連接redis server。
Jedis 在實(shí)現(xiàn)上是直接連接的 redis server,如果在多線程環(huán)境下是非線程安全的,這個(gè)時(shí)候只有使用連接池,為每個(gè)Jedis實(shí)例增加物理連接
Lettuce 的連接是基于 Netty 的,連接實(shí)例(StatefulRedisConnection)可以在多個(gè)線程間并發(fā)訪問(wèn),應(yīng)為 StatefulRedisConnection 是線程安全的,所以一個(gè)連接實(shí)例(StatefulRedisConnection)就可以滿足多線程環(huán)境下的并發(fā)訪問(wèn),當(dāng)然這個(gè)也是可伸縮的設(shè)計(jì),一個(gè)連接實(shí)例不夠的情況也可以按需增加連接實(shí)例。
從Springboot 2.X 開(kāi)始已經(jīng)默認(rèn)使用 Luttuce,但仍然提供兩種客戶端供使用。
SpringBoot 1.x 默認(rèn)采用 Jedis 作為 redis 客戶端連接池
SpringBoot 2.x spring-data-redis 默認(rèn)采用 Lettuce 作為 redis 客戶端驅(qū)動(dòng)連接池
從 spring-boot-starter-redis 1.4.7.RELEASE 是該依賴的最后一個(gè)版本,遷移到 spring-boot-starter-data-redis
在 springboot1.4.7 之前的版本配置客戶端連接池如下:
spring:
redis:
pool:
maxActive: 5000
maxIdle: 30
minIdle: 5
max-wait: 2000
在 1.4.7 版本之后如果仍使用以上配置,會(huì)提示你:Deprecated configuration property 'spring.redis.pool.max-active' ,即使配了也是失效配置。在RedisProperties(springboot autoconfig jar包)新增了 Jedis 和 Lettuce 內(nèi)部類用來(lái)配置客戶端連接池,如下
Jedis
spring:
redis:
jedis:
pool:
maxActive: 5000
maxIdle: 30
minIdle: 5
max-wait: 2000
Jedis 可替換為 Lettuce
spring:
redis:
lettuce:
pool:
maxActive: 5000
maxIdle: 30
minIdle: 5
max-wait: 2000
建議 Lettuce,但是使用 Lettuce 后,就不能使用 jedis pipeline 模式。Lettuce 的批量異步模式可以參考以下代碼段
https://blog.csdn.net/huangjinjin520/article/details/118255621
另外,spring-boot-starter-redis 默認(rèn)是不使用連接池的,只有配置 spring.redis.lettuce.pool 下的屬性的時(shí)候才可以使用到 redis 連接池。在高并發(fā)的項(xiàng)目中請(qǐng)注意配置。
推薦閱讀
國(guó)產(chǎn)小眾瀏覽器因屏蔽視頻廣告,被索賠100萬(wàn)(后續(xù))
年輕人“不講武德”:因看黃片上癮,把網(wǎng)站和786名女主播起訴了
關(guān)于程序員大白
程序員大白是一群哈工大,東北大學(xué),西湖大學(xué)和上海交通大學(xué)的碩士博士運(yùn)營(yíng)維護(hù)的號(hào),大家樂(lè)于分享高質(zhì)量文章,喜歡總結(jié)知識(shí),歡迎關(guān)注[程序員大白],大家一起學(xué)習(xí)進(jìn)步!


