一、Jedis,Redisson,Lettuce三者的區(qū)別共同點(diǎn):都提供了基于Redis操作的Java API,只是封裝程度,具體實(shí)現(xiàn)稍有不同。
不同點(diǎn):
1.1、Jedis
是Redis的Java實(shí)現(xiàn)的客戶端。支持基本的數(shù)據(jù)類型如:String、Hash、List、Set、Sorted Set。
特點(diǎn):使用阻塞的I/O,方法調(diào)用同步,程序流需要等到socket處理完I/O才能執(zhí)行,不支持異步操作。Jedis客戶端實(shí)例不是線程安全的,需要通過連接池來使用Jedis。
1.2、Redisson
優(yōu)點(diǎn)點(diǎn):分布式鎖,分布式集合,可通過Redis支持延遲隊(duì)列。
1.3、 Lettuce
用于線程安全同步,異步和響應(yīng)使用,支持集群,Sentinel,管道和編碼器。
基于Netty框架的事件驅(qū)動的通信層,其方法調(diào)用是異步的。Lettuce的API是線程安全的,所以可以操作單個Lettuce連接來完成各種操作。
二、RedisTemplate2.1、使用配置
maven配置引入,(要加上版本號,我這里是因?yàn)镻arent已聲明)
<dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-data-redisartifactId> dependency>
application-dev.yml
spring: redis: host:192.168.1.140 port:6379 password: database:15#指定redis的分庫(共16個0到15)
2.2、使用示例
@Resource privateStringRedisTemplatestringRedisTemplate; @Override publicCustomersEntityfindById(Integerid){ //需要緩存 //所有涉及的緩存都需要刪除,或者更新 try{ StringtoString=stringRedisTemplate.opsForHash().get(REDIS_CUSTOMERS_ONE,id+"").toString(); if(toString!=null){ returnJSONUtil.toBean(toString,CustomersEntity.class); } }catch(Exceptione){ e.printStackTrace(); } //緩存為空的時(shí)候,先查,然后緩存redis Optional
2.3、擴(kuò)展
2.3.1、spring-boot-starter-data-redis的依賴包
3.3.2、stringRedisTemplate API(部分展示)
opsForHash --》 hash操作
opsForList --》 list操作
opsForSet --》 set操作
opsForValue --》 string操作
opsForZSet --》 Zset操作
3.3.3 StringRedisTemplate默認(rèn)序列化機(jī)制
publicclassStringRedisTemplateextendsRedisTemplate<String,String>{ /** *ConstructsanewStringRedisTemplate
instance.{@link#setConnectionFactory(RedisConnectionFactory)} *and{@link#afterPropertiesSet()}stillneedtobecalled. */ publicStringRedisTemplate(){ RedisSerializer
三、RedissonClient 操作示例
3.1 基本配置
3.1.1、Maven pom 引入
<dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-data-redisartifactId> dependency> <dependency> <groupId>org.redissongroupId> <artifactId>redissonartifactId> <version>3.8.2version> <optional>trueoptional> dependency> <dependency> <groupId>org.redissongroupId> <artifactId>redisson-spring-boot-starterartifactId> <version>LATESTversion> dependency>
3.1.2、添加配置文件Yaml或者json格式
redisson-config.yml
#Redisson配置 singleServerConfig: address:"redis://192.168.1.140:6379" password:null clientName:null database:15#選擇使用哪個數(shù)據(jù)庫0~15 idleConnectionTimeout:10000 pingTimeout:1000 connectTimeout:10000 timeout:3000 retryAttempts:3 retryInterval:1500 reconnectionTimeout:3000 failedAttempts:3 subscriptionsPerConnection:5 subscriptionConnectionMinimumIdleSize:1 subscriptionConnectionPoolSize:50 connectionMinimumIdleSize:32 connectionPoolSize:64 dnsMonitoringInterval:5000 #dnsMonitoring:false threads:0 nettyThreads:0 codec: class:"org.redisson.codec.JsonJacksonCodec" transportMode:"NIO"
或者,配置 redisson-config.json
{ "singleServerConfig":{ "idleConnectionTimeout":10000, "pingTimeout":1000, "connectTimeout":10000, "timeout":3000, "retryAttempts":3, "retryInterval":1500, "reconnectionTimeout":3000, "failedAttempts":3, "password":null, "subscriptionsPerConnection":5, "clientName":null, "address":"redis://192.168.1.140:6379", "subscriptionConnectionMinimumIdleSize":1, "subscriptionConnectionPoolSize":50, "connectionMinimumIdleSize":10, "connectionPoolSize":64, "database":0, "dnsMonitoring":false, "dnsMonitoringInterval":5000 }, "threads":0, "nettyThreads":0, "codec":null, "useLinuxNativeEpoll":false }
3.1.3、讀取配置
新建讀取配置類
@Configuration publicclassRedissonConfig{ @Bean publicRedissonClientredisson()throwsIOException{ //兩種讀取方式,Config.fromYAML和Config.fromJSON //Configconfig=Config.fromJSON(RedissonConfig.class.getClassLoader().getResource("redisson-config.json")); Configconfig=Config.fromYAML(RedissonConfig.class.getClassLoader().getResource("redisson-config.yml")); returnRedisson.create(config); } }
或者,在 application.yml中配置如下
spring: redis: redisson: config:classpath:redisson-config.yaml
3.2 使用示例
@RestController @RequestMapping("/") publicclassTeController{ @Autowired privateRedissonClientredissonClient; staticlongi=20; staticlongsum=300; //==========================String======================= @GetMapping("/set/{key}") publicStrings1(@PathVariableStringkey){ //設(shè)置字符串 RBucket
4.3 擴(kuò)展
4.3.1 豐富的jar支持,尤其是對 Netty NIO框架
4.3.2 豐富的配置機(jī)制選擇,這里是詳細(xì)的配置說明
https://github.com/redisson/redisson/wiki/2.-Configuration
關(guān)于序列化機(jī)制中,就有很多
4.3.3 API支持(部分展示),具體的 Redis --> RedissonClient ,可查看這里
https://github.com/redisson/redisson/wiki/11.-Redis-commands-mapping
4.3.4 輕便的豐富的鎖機(jī)制的實(shí)現(xiàn)
Lock
Fair Lock
MultiLock
RedLock
ReadWriteLock
Semaphore
PermitExpirableSemaphore
CountDownLatch
四、基于注解實(shí)現(xiàn)的Redis緩存4.1 Maven 和 YML配置
參考 RedisTemplate 配置。另外,還需要額外的配置類
//todo定義序列化,解決亂碼問題 @EnableCaching @Configuration @ConfigurationProperties(prefix="spring.cache.redis") publicclassRedisCacheConfig{ privateDurationtimeToLive=Duration.ZERO; publicvoidsetTimeToLive(DurationtimeToLive){ this.timeToLive=timeToLive; } @Bean publicCacheManagercacheManager(RedisConnectionFactoryfactory){ RedisSerializer
4.2 使用示例
@Transactional @Service publicclassReImplimplementsRedisService{ @Resource privateCustomerRepocustomerRepo; @Resource privateStringRedisTemplatestringRedisTemplate; publicstaticfinalStringREDIS_CUSTOMERS_ONE="Customers"; publicstaticfinalStringREDIS_CUSTOMERS_ALL="allList"; //=====================================================================使用Springcahce注解方式實(shí)現(xiàn)緩存 //==================================單個操作 @Override @Cacheable(value="cache:customer",unless="null==#result",key="#id") publicCustomersEntitycacheOne(Integerid){ finalOptional
4.3 擴(kuò)展
基于spring緩存實(shí)現(xiàn)
來源:blog.csdn.net/qq_42105629/article/details/102589319
編輯:jq
-
spring
+關(guān)注
關(guān)注
0文章
340瀏覽量
14343 -
Boot
+關(guān)注
關(guān)注
0文章
149瀏覽量
35839 -
Redis
+關(guān)注
關(guān)注
0文章
375瀏覽量
10877 -
SpringBoot
+關(guān)注
關(guān)注
0文章
173瀏覽量
179
原文標(biāo)題:Spring Boot 操作 Redis 的各種實(shí)現(xiàn)
文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論