一、Jedis,Redisson,Lettuce三者的區別共同點:都提供了基于Redis操作的Java API,只是封裝程度,具體實現稍有不同。
不同點:
1.1、Jedis
是Redis的Java實現的客戶端。支持基本的數據類型如:String、Hash、List、Set、Sorted Set。
特點:使用阻塞的I/O,方法調用同步,程序流需要等到socket處理完I/O才能執行,不支持異步操作。Jedis客戶端實例不是線程安全的,需要通過連接池來使用Jedis。
1.2、Redisson
優點點:分布式鎖,分布式集合,可通過Redis支持延遲隊列。
1.3、 Lettuce
用于線程安全同步,異步和響應使用,支持集群,Sentinel,管道和編碼器。
基于Netty框架的事件驅動的通信層,其方法調用是異步的。Lettuce的API是線程安全的,所以可以操作單個Lettuce連接來完成各種操作。
二、RedisTemplate2.1、使用配置
maven配置引入,(要加上版本號,我這里是因為Parent已聲明)
<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(); } //緩存為空的時候,先查,然后緩存redis Optional
2.3、擴展
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默認序列化機制
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#選擇使用哪個數據庫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){ //設置字符串 RBucket
4.3 擴展
4.3.1 豐富的jar支持,尤其是對 Netty NIO框架
4.3.2 豐富的配置機制選擇,這里是詳細的配置說明
https://github.com/redisson/redisson/wiki/2.-Configuration
關于序列化機制中,就有很多
4.3.3 API支持(部分展示),具體的 Redis --> RedissonClient ,可查看這里
https://github.com/redisson/redisson/wiki/11.-Redis-commands-mapping
4.3.4 輕便的豐富的鎖機制的實現
Lock
Fair Lock
MultiLock
RedLock
ReadWriteLock
Semaphore
PermitExpirableSemaphore
CountDownLatch
四、基于注解實現的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注解方式實現緩存 //==================================單個操作 @Override @Cacheable(value="cache:customer",unless="null==#result",key="#id") publicCustomersEntitycacheOne(Integerid){ finalOptional
4.3 擴展
基于spring緩存實現
來源:blog.csdn.net/qq_42105629/article/details/102589319
編輯:jq
-
spring
+關注
關注
0文章
338瀏覽量
14312 -
Boot
+關注
關注
0文章
149瀏覽量
35787 -
Redis
+關注
關注
0文章
371瀏覽量
10850 -
SpringBoot
+關注
關注
0文章
173瀏覽量
169
原文標題:Spring Boot 操作 Redis 的各種實現
文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論