春衣少年当酒歌,起舞四顾以笑和。这篇文章主要讲述Spring Boot + Redis 实现各种操作 #yyds干货盘点#相关的知识,希望能为你提供帮助。
一、Jedis,Redisson,Lettuce 三者的区别共同点:都提供了基于 Redis 操作的 java API,只是封装程度,具体实现稍有不同。
不同点:
- 1.1、Jedis
特点:使用阻塞的 I/O,方法调用同步,程序流需要等到 socket 处理完 I/O 才能执行,不支持异步操作。Jedis 客户端实例不是线程安全的,需要通过连接池来使用 Jedis。
- 1.1、Redisson
- 1.3、 Lettuce
基于 Netty 框架的事件驱动的通信层,其方法调用是异步的 ,Lettuce 的 API 是线程安全的,所以可以操作单个 Lettuce 连接来完成各种操作。
二、Jedis三、RedisTemplate3.1、使用配置
maven 配置引入,(要加上版本号,我这里是因为 Parent 已声明)
< dependency>
< groupId> org.springframework.boot< /groupId>
< artifactId> spring-boot-starter-data-redis< /artifactId>
< /dependency>
application-dev.yml
spring:
redis:
host: 192.168.1.140
port: 6379
password:
database: 15 # 指定redis的分库(共16个0到15)
3.2、使用示例
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override
public CustomersEntity findById(Integer id)
// 需要缓存
// 所有涉及的缓存都需要删除,或者更新
try
String toString = stringRedisTemplate.opsForHash().get(REDIS_CUSTOMERS_ONE, id + "").toString();
if (toString != null)
return JSONUtil.toBean(toString, CustomersEntity.class);
catch (Exception e)
e.printStackTrace();
// 缓存为空的时候,先查,然后缓存redis
Optional< CustomersEntity> byId = customerRepo.findById(id);
if (byId.isPresent())
CustomersEntity customersEntity = byId.get();
try
stringRedisTemplate.opsForHash().put(REDIS_CUSTOMERS_ONE, id + "", JSONUtil.toJsonStr(customersEntity));
catch (Exception e)
e.printStackTrace();
return customersEntity;
return null;
3.3、扩展
3.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 默认序列化机制
public class StringRedisTemplate extends RedisTemplate< String, String>
public StringRedisTemplate()
RedisSerializer< String> stringSerializer = new StringRedisSerializer();
setKeySerializer(stringSerializer);
setValueSerializer(stringSerializer);
setHashKeySerializer(stringSerializer);
setHashValueSerializer(stringSerializer);
四、RedissonClient 操作示例4.1 基本配置
4.1.1、Maven pom 引入
< dependency>
< groupId> org.springframework.boot< /groupId>
< artifactId> spring-boot-starter-data-redis< /artifactId>
< /dependency>
< dependency>
< groupId> org.redisson< /groupId>
< artifactId> redisson< /artifactId>
< version> 3.8.2< /version>
< optional> true< /optional>
< /dependency>
< dependency>
< groupId> org.redisson< /groupId>
< artifactId> redisson-spring-boot-starter< /artifactId>
< version> LATEST< /version>
< /dependency>
4.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:
falsethreads: 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
4.1.3、读取配置【Spring Boot + Redis 实现各种操作 #yyds干货盘点#】新建读取配置类
@Configuration
public推荐阅读
- 测试服务器带宽的几种常用方法
- java版gRPC实战之二(服务发布和调用)
- #yyds干货盘点#linux命令--more,less
- #yyds干货盘点#java内存模型之final域的内存语义
- 《微服务架构设计模式》读书笔记 | 第3章 微服务架构中的进程间通信 #yyds干货盘点#
- #yyds干货盘点# C语言自定义类型的介绍(结构体,枚举,联合体,位段)
- #yyds干货盘点#springcloud学习笔记---Robbin---2
- #私藏项目实操分享# Java深层系列「技术盲区」让我们一起探索一下Netty(Java)底层的“零拷贝Zero-Copy”技术(上)
- #yyds干货盘点#复合数据类型–Object类型