1.Redis 支持數(shù)據(jù)的持久化,它可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中肴楷,重啟的時候可以再次加載進行使用水由。
2.Redis 不僅僅支持簡單的 key-value 類型的數(shù)據(jù),同時還提供 list赛蔫,set砂客,zset,hash 等數(shù)據(jù)結(jié)構(gòu)的存儲濒募。
3.Redis 支持數(shù)據(jù)的備份鞭盟,即 master-slave 模式的數(shù)據(jù)備份。
Redis優(yōu)勢
1.性能極高瑰剃。Redis 能讀的速度是 110000 次/s齿诉,寫的速度是 81000 次/s。
2.豐富的數(shù)據(jù)類型晌姚。Redis 支持二進制案例的 Strings粤剧,Lists,Sets 及 Ordered Sets 數(shù)據(jù)類型操作挥唠。
3.原子性抵恋。Redis 所有的操作都是原子性的,意思是要么成功執(zhí)行要么失敗完全不執(zhí)行宝磨。單個操作是原子性的弧关,多個操作也是,通過 MULTI 和 EXEC 指令抱起來唤锉。
4.豐富的特性世囊。Redis 還支持 publish/subscribe,通知窿祥,key 過期等特性株憾。
Lettuce
從 Spring Boot 2.x 開始 Lettuce 已取代 Jedis 成為首選 Redis 的客戶端。當(dāng)然 Spring Boot 2.x 仍然支持 Jedis晒衩,并且你可以任意切換客戶端嗤瞎。
Lettuce 是一個可伸縮的線程安全的 Redis 客戶端,支持同步听系、異步和響應(yīng)式模式贝奇。多個線程可以共享一個連接實例,而不必擔(dān)心多線程并發(fā)問題靠胜。它基于優(yōu)秀 Netty NIO 框架構(gòu)建弃秆,支持 Redis 的高級功能届惋,如 Sentinel、集群菠赚、流水線脑豹、自動重新連接和 Redis 數(shù)據(jù)模型
Jedis 在實現(xiàn)上是直接連接的 redis server,如果在多線程環(huán)境下是非線程安全的衡查,這個時候只有使用連接池瘩欺,為每個 Jedis 實例增加物理連接。
Lettuce 的連接是基于 Netty 的拌牲,連接實例 (StatefulRedisConnection) 可以在多個線程間并發(fā)訪問俱饿,應(yīng)為 StatefulRedisConnection 是線程安全的,所以一個連接實例 (StatefulRedisConnection) 就可以滿足多線程環(huán)境下的并發(fā)訪問塌忽,當(dāng)然這個也是可伸縮的設(shè)計拍埠,一個連接實例不夠的情況也可以按需增加連接實例。
使用Lecttuce
使用Lecttuce需要再引用一個包
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
配置
# lettuce 客戶端配置(從 Spring Boot 2.x 開始土居,推薦使用 lettuce 客戶端)
# 建立連接最大等待時間枣购,默認1ms,超出該時間會拋異常擦耀。設(shè)為-1表示無限等待棉圈,直到分配成功。
spring.redis.lettuce.pool.max-wait=1ms
# 最大連連接數(shù)眷蜓,默認為8分瘾,負值表示沒有限制
spring.redis.lettuce.pool.max-active=8
# 最大空閑連接數(shù),默認8。負值表示沒有限制
spring.redis.lettuce.pool.max-idle=8
# 最小空閑連接數(shù),默認0吁系。
spring.redis.lettuce.pool.min-idle=0
# 設(shè)置關(guān)閉連接的超時時間
spring.redis.lettuce.shutdown-timeout=100ms
org.springframework.boot.autoconfigure.data.redis.RedisProperties中集成了Jedis與Lettuce德召。
// 哨兵
private Sentinel sentinel;
// 集群配置
private Cluster cluster;
private final Jedis jedis = new Jedis();
private final Lettuce lettuce = new Lettuce();
Redis客戶端的幾種實現(xiàn)
概念:
Jedis:是Redis的Java實現(xiàn)客戶端,提供了比較全面的Redis命令的支持汽纤,
Redisson:實現(xiàn)了分布式和可擴展的Java數(shù)據(jù)結(jié)構(gòu)上岗。
Lettuce:高級Redis客戶端,用于線程安全同步冒版,異步和響應(yīng)使用,支持集群逞姿,Sentinel辞嗡,管道和編碼器。
優(yōu)點:
Jedis:比較全面的提供了Redis的操作特性
Redisson:促使使用者對Redis的關(guān)注分離滞造,提供很多分布式相關(guān)操作服務(wù)续室,例如,分布式鎖谒养,分布式集合挺狰,可通過Redis支持延遲隊列
Lettuce:主要在一些分布式緩存框架上使用比較多
可伸縮:
Jedis:使用阻塞的I/O明郭,且其方法調(diào)用都是同步的,程序流需要等到sockets處理完I/O才能執(zhí)行丰泊,不支持異步薯定。Jedis客戶端實例不是線程安全的,所以需要通過連接池來使用Jedis瞳购。
Redisson:基于Netty框架的事件驅(qū)動的通信層话侄,其方法調(diào)用是異步的。Redisson的API是線程安全的学赛,所以可以操作單個Redisson連接來完成各種操作
Lettuce:基于Netty框架的事件驅(qū)動的通信層年堆,其方法調(diào)用是異步的。Lettuce的API是線程安全的盏浇,所以可以操作單個Lettuce連接來完成各種操作