java的redis连接工具篇(java redis client)
bigegpt 2025-06-18 19:15 3 浏览
在 Java 里,有不少用于连接 Redis 的工具,下面为你介绍一些主流的工具及其特点:
Jedis
Jedis 是 Redis 官方推荐的 Java 连接工具,它提供了全面的 Redis 命令支持,且 API 设计直观。
public class JedisExample {
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost", 6379);
jedis.set("key", "value");
String value = jedis.get("key");
System.out.println(value);
jedis.close();
}
}
它的优势在于使用简单,不过在多线程环境下需要配合连接池使用。
下面是jedis连接池的配置使用,需要注意的是使用完连接资源后需要close归还到连接池,在获取资源时候需要重新指定db,在前面的连接close后是仍然保留之前的db
public class JedisUtils {
private static final JedisPool jedisPool;
static {
//配置连接池
JedisPoolConfig poolConfig = new JedisPoolConfig();
//最大连接数
poolConfig.setMaxTotal(5000);
//最大空闲连接
poolConfig.setMaxIdle(1200);
//最小空闲连接
poolConfig.setMinIdle(10);
//最长等待时间,ms
poolConfig.setBlockWhenExhausted(true);
poolConfig.setMaxWaitMillis(-1);
//空闲检查有效性
poolConfig.setTestWhileIdle(true);
//进行有效性检查
// poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
String pwd = "123456";
String port = "6379";
String timeout = "10000";
String host = "127.0.0.1";
if (StringUtils.isEmpty(pwd)) {
jedisPool = new JedisPool(poolConfig, host, Integer.parseInt(port), Integer.parseInt(timeout));
} else {
jedisPool = new JedisPool(poolConfig, host, Integer.parseInt(port), Integer.parseInt(timeout), pwd);
}
}
public static Jedis getJedisDB(int index) {
log.info("jdeis active num:{}", jedisPool.getNumActive());
Jedis resource = jedisPool.getResource();
resource.select(index);
return resource;
}
Lettuce
Lettuce 是基于 Netty 的高性能 Redis 客户端,它支持同步、异步和响应式编程模式,并且天然适配 Reactive Streams。其特点是线程安全,适合在高并发场景中使用。
public class LettuceExample {
public static void main(String[] args) {
RedisClient redisClient = RedisClient.create(RedisURI.create("redis://localhost:6379"));
StatefulRedisConnection<String, String> connection = redisClient.connect();
RedisCommands<String, String> commands = connection.sync();
commands.set("key", "value");
String value = commands.get("key");
System.out.println(value);
connection.close();
redisClient.shutdown();
}
}
Lettuce 自身提供了GenericObjectPool(基于 Apache Commons Pool)的封装示例,可通过配置PoolConfig控制连接池参数(如最大连接数、空闲连接超时时间等)。
// 配置连接池
GenericObjectPoolConfig<StatefulRedisConnection<String, String>> config = new GenericObjectPoolConfig<>();
config.setMaxTotal(100); // 最大连接数
config.setMinIdle(10); // 最小空闲连接数
// 创建连接工厂
RedisClient client = RedisClient.create("redis://localhost:6379");
RedisURI uri = RedisURI.create("localhost", 6379);
ConnectionFactory<String, String> factory = new JedisConnectionFactory(uri);
// 创建连接池
GenericObjectPool<StatefulRedisConnection<String, String>> pool =
new GenericObjectPool<>(() -> client.connect(), config);
// 从连接池获取连接
try (StatefulRedisConnection<String, String> connection = pool.borrowObject()) {
RedisCommands<String, String> commands = connection.sync();
commands.set("key", "value");
} catch (Exception e) {
// 异常处理
} finally {
pool.returnObject(connection); // 归还连接
}
Redisson
Redisson 是一个在 Redis 基础上实现的分布式和可扩展的 Java 数据结构集合。它提供了如分布式锁、分布式集合等高级功能。
public class RedissonExample {
public static void main(String[] args) {
Config config = new Config();
config.useSingleServer().setAddress("redis://localhost:6379");
RedissonClient redisson = Redisson.create(config);
RLock lock = redisson.getLock("myLock");
lock.lock();
try {
// 执行需要加锁的业务逻辑
} finally {
lock.unlock();
}
redisson.shutdown();
}
}
以下是 Redisson 连接池的典型配置代码
public class RedissonConfigExample {
// 单机模式配置
public static RedissonClient createSingleServerClient() {
Config config = new Config();
config.useSingleServer()
.setAddress("redis://localhost:6379")
.setDatabase(0)
// 连接池配置
.setConnectionPoolSize(100) // 最大连接数
.setConnectionMinimumIdleSize(10) // 最小空闲连接数
.setSubscriptionConnectionPoolSize(50) // 订阅连接池大小
// 超时配置
.setConnectTimeout(5000) // 连接超时时间(毫秒)
.setTimeout(3000) // 命令超时时间(毫秒)
.setRetryAttempts(3) // 重试次数
.setRetryInterval(1500) // 重试间隔(毫秒)
// 空闲检测
.setIdleConnectionTimeout(10000) // 空闲连接超时时间(毫秒)
.setPingConnectionInterval(60000); // 心跳检测间隔(毫秒)
return Redisson.create(config);
}
// 主从模式配置
public static RedissonClient createMasterSlaveClient() {
Config config = new Config();
config.useMasterSlaveServers()
.setMasterAddress("redis://master:6379")
.addSlaveAddress("redis://slave1:6379", "redis://slave2:6379")
// 读写分离配置
.setReadMode(ReadMode.SLAVE) // 读操作优先从从节点获取
.setSubscriptionMode(ReadMode.MASTER) // 订阅操作使用主节点
// 连接池配置(主节点)
.setMasterConnectionPoolSize(100)
.setMasterConnectionMinimumIdleSize(10)
// 连接池配置(从节点)
.setSlaveConnectionPoolSize(100)
.setSlaveConnectionMinimumIdleSize(10)
// 其他通用配置(同单机模式)
.setConnectTimeout(5000)
.setTimeout(3000);
return Redisson.create(config);
}
// 哨兵模式配置
public static RedissonClient createSentinelClient() {
Config config = new Config();
config.useSentinelServers()
.setMasterName("mymaster")
.addSentinelAddress("redis://sentinel1:26379",
"redis://sentinel2:26379",
"redis://sentinel3:26379")
// 哨兵监控相关配置
.setCheckSentinelsList(false) // 是否检查哨兵列表
.setScanInterval(2000) // 哨兵扫描间隔(毫秒)
// 连接池配置
.setMasterConnectionPoolSize(100)
.setSlaveConnectionPoolSize(100)
.setSubscriptionConnectionPoolSize(50)
// 其他配置
.setConnectTimeout(5000)
.setDatabase(0);
return Redisson.create(config);
}
// 集群模式配置
public static RedissonClient createClusterClient() {
Config config = new Config();
config.useClusterServers()
.addNodeAddress("redis://node1:7000", "redis://node2:7001",
"redis://node3:7002", "redis://node4:7003")
// 集群扫描与拓扑发现
.setScanInterval(2000) // 集群状态扫描间隔(毫秒)
.setCheckSlotsCoverage(true) // 是否检查槽覆盖情况
// 负载均衡策略
.setLoadBalancer(new org.redisson.connection.balancer.RoundRobinLoadBalancer())
// 连接池配置(每个节点)
.setNodeConnectionMinimumIdleSize(10)
.setNodeConnectionPoolSize(64)
// 重试与超时
.setRetryAttempts(3)
.setRetryInterval(1500)
.setTimeout(3000);
return Redisson.create(config);
}
public static void main(String[] args) {
// 根据实际环境选择配置方式
RedissonClient client = createSingleServerClient();
// 使用示例
try {
client.getBucket("testKey").set("testValue");
System.out.println(client.getBucket("testKey").get());
} finally {
client.shutdown(); // 关闭客户端时自动释放连接池资源
}
}
}
Redisson 的优势在于提供了丰富的分布式对象和服务。
Spring Data Redis
Spring Data Redis 是 Spring 框架的一部分,它为 Redis 提供了高度抽象的 API。
@Configuration
public class RedisConfig {
@Bean
public JedisConnectionFactory connectionFactory() {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration("localhost", 6379);
return new JedisConnectionFactory(config);
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory());
return template;
}
}
借助 Spring 的依赖注入机制,它能让 Redis 的操作变得更加简便。
可以根据项目的具体需求来挑选合适的 Redis 连接工具。
● 若你追求简单易用的工具,那么 Jedis 是个不错的选择。
● 要是处于高并发场景,Lettuce 会更适合你。
● 当你需要分布式锁或分布式集合等高级功能时,Redisson 是首选。
● 如果你在使用 Spring 框架,Spring Data Redis 能让你更好地集成 Redis。
例如在呼叫中心系统中的配置更新操作上就可以选择jedis、Spring Data Redis完成参数的更迭,在呼叫黑名单系统中就可以选择Lettuce来进行开发,在对部分分布式系统的接口验证上可以使用Redisson
相关推荐
- 悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)
-
新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...
- 高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源
-
凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...
- 微服务架构实战:商家管理后台与sso设计,SSO客户端设计
-
SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...
- 还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑
-
在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...
- Seata源码—6.Seata AT模式的数据源代理二
-
大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...
- 30分钟了解K8S(30分钟了解微积分)
-
微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...
- SpringBoot条件化配置(@Conditional)全面解析与实战指南
-
一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...
- 一招解决所有依赖冲突(克服依赖)
-
背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...
- 你读过Mybatis的源码?说说它用到了几种设计模式
-
学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...
- golang对接阿里云私有Bucket上传图片、授权访问图片
-
1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...
- spring中的资源的加载(spring加载原理)
-
最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...
- Android资源使用(android资源文件)
-
Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...
- 如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)
-
深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...
- @Autowired与@Resource原理知识点详解
-
springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...
- java的redis连接工具篇(java redis client)
-
在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)