青村网站建设,东莞软件有限公司,做百度网站还是安居客网站,wordpress外链内链Jedis是Redis官方推荐的Java客户端库#xff0c;提供了对Redis数据库的全面支持#xff0c;适用于单机、哨兵及集群模式。作为最老牌的Java Redis客户端#xff0c;其API设计直观#xff0c;与Redis命令高度对应#xff0c;例如set、get等方法与原生命令一致#xff0c;降…Jedis是Redis官方推荐的Java客户端库提供了对Redis数据库的全面支持适用于单机、哨兵及集群模式。作为最老牌的Java Redis客户端其API设计直观与Redis命令高度对应例如set、get等方法与原生命令一致降低了学习成本。
简单使用
引入依赖
dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion5.0.2/version
/dependency使用示例
package com.morris.redis.demo.jedis;import redis.clients.jedis.Jedis;import java.util.List;
import java.util.Map;/*** jedis的简单使用*/
public class JedisDemo {public static void main(String[] args) {// 创建Jedis实例默认端口6379try (Jedis jedis new Jedis(127.0.0.1, 6380)) {// 若需认证如设置密码// jedis.auth(your_password);// 字符串类型的使用jedis.set(key1, value1); // 设置键值String value jedis.get(key1); // 获取值返回value1jedis.incr(counter); // 自增数值可用于计数器场景// hash类型的使用jedis.hset(user:1, name, John); // 设置哈希字段String name jedis.hget(user:1, name); // 获取字段值MapString, String user jedis.hgetAll(user:1); // 获取全部字段// list类型的使用jedis.rpush(list1, element1, element2); // 右侧插入元素ListString list jedis.lrange(list1, 0, -1); // 获取全部元素String popped jedis.lpop(list1); // 左侧弹出元素// 测试连接System.out.println(连接状态: jedis.ping()); // 输出PONG表示成功} // try-with-resources自动关闭连接}
}连接池优化推荐生产环境使用
Jedis使用连接池的核心目的是解决直连模式下的性能瓶颈与资源管理问题。由于每次直连Redis都需新建TCP连接三次握手并在操作后关闭四次挥手高频请求时网络延迟占比可能高达97%而连接池通过复用已建立的连接将单次操作耗时从40ms级降至微秒级。此外Jedis实例非线程安全连接池为每个线程分配独立连接规避多线程竞争风险。
package com.morris.redis.demo.jedis;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;/*** jedis连接池的使用*/
public class JedisPoolDemo {public static void main(String[] args) {JedisPoolConfig config new JedisPoolConfig();config.setMaxTotal(400); // 最大连接数config.setMaxIdle(400); // 最大空闲连接config.setMinIdle(100); // 最小空闲连接config.setMaxWaitMillis(5000); // 最大等待5秒config.setTestOnBorrow(false); // 禁用借出检测config.setTestWhileIdle(true); // 开启空闲检测config.setTimeBetweenEvictionRunsMillis(30000); // 每30秒检测空闲连接config.setLifo(false); // 使用FIFO均衡负载try (JedisPool pool new JedisPool(config, 127.0.0.1, 6379)) {Jedis jedis pool.getResource();jedis.set(xx, oo);System.out.println(jedis.get(xx));// 执行操作...jedis.close(); // 归还连接到池}}
}与SpringBoot的结合使用
需在pom.xml中添加spring-boot-starter-data-redis和Jedis客户端依赖并排除默认的Lettuce客户端也可以不排除但是需要在配置文件中需要指定client-type。
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependencydependencygroupIdredis.clients/groupIdartifactIdjedis/artifactId
/dependency在application.yml中配置Redis服务器地址及连接池参数指定client-type为jedis。
spring:data:redis:host: 127.0.0.1port: 6379
# password: your_passwordjedis:pool:max-active: 200 # 最大活跃连接数max-idle: 100 # 最大空闲连接min-idle: 50 # 最小空闲连接max-wait: 3000ms # 获取连接最大等待时间client-type: jedis # 需要手动指定jedis否则默认是lettuceRedisTemplate序列化配置自定义RedisTemplate以避免默认的JDK序列化问题
package com.morris.redis.demo.jedis;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;Configuration
public class RedisConfig {Beanpublic RedisTemplateString, Object redisTemplate(RedisConnectionFactory factory) {RedisTemplateString, Object template new RedisTemplate();template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setConnectionFactory(factory);return template;}
}RedisTemplate的使用
package com.morris.redis.demo.jedis;import com.morris.redis.demo.RedisDemoApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.data.redis.core.RedisTemplate;/*** RedisTemplate的使用*/
SpringBootApplication
public class JedisSpringBootDemo {public static void main(String[] args) {ConfigurableApplicationContext applicationContext SpringApplication.run(JedisSpringBootDemo.class, args);RedisTemplate redisTemplate (RedisTemplate) applicationContext.getBean(redisTemplate);redisTemplate.opsForValue().set(oo, xx);System.out.println(redisTemplate.opsForValue().get(oo));applicationContext.close();}
}jedis哨兵模式的使用
Jedis配置哨兵模式下的Redis地址需通过哨兵节点列表和主节点名称实现并结合连接池参数优化。
spring:data:redis:sentinel:master: mymasternodes: 127.0.0.1:16380,127.0.0.1:16381,127.0.0.1:16382jedis:pool:max-active: 200 # 最大活跃连接数max-idle: 100 # 最大空闲连接min-idle: 50 # 最小空闲连接max-wait: 3000ms # 获取连接最大等待时间client-type: jedis # 需要手动指定jedis否则默认是lettucejedis cluster的使用
配置文件中配置集群节点
spring:data:redis:jedis:pool:max-active: 200 # 最大连接数max-idle: 100 # 最大空闲连接数min-idle: 50 # 最小空闲连接数max-wait: 3000ms # 获取连接的最大等待时间client-type: jedis # 客户端类型使用 jedis默认是 lettuce# redis集群模式cluster:nodes: 127.0.0.1:3001,127.0.0.1:3002,127.0.0.1:3003max-redirects: 5Jedis在初始化时通过cluster slots命令获取集群中所有槽与节点的对应关系并将这些信息缓存在本地JedisClusterInfoCache类中。每次操作时客户端直接根据本地缓存确定Key所属的槽及对应的节点无需依赖服务端重定向。
如果请求发送到错误的节点如槽迁移或节点故障Redis会返回MOVED错误此时Jedis会重新执行cluster slots命令更新本地映射并重试请求。默认最多重试5次超过则抛出Too many cluster redirection异常。
Jedis为每个Redis节点创建独立的连接池JedisPool确保高并发下的资源复用和线程安全。