Redis的Java客户端

张开发
2026/4/7 23:29:56 15 分钟阅读

分享文章

Redis的Java客户端
Redis的Java客户端上层分类Spring Data Redis兼容Jedis和lettuce客户端列表Jedis特点以Redis命令作为方法名称学习成本低简单实用。但是Jedis实例是线程不安全的多线程环境下需要基于连接池来使用lettuce特点Lettuce是基于Netty实现的支持同步、异步和响应式编程方式并且是线程安全的。支持Redis的哨兵模式、集群模式和管道模式。Redisson特点Redisson是一个基于Redis实现的分布式、可伸缩的Java数据结构集合。包含了诸如Map、Queue、Lock、Semaphore、AtomicLong等强大功能java-redis-client特点A very simple yet very complete java client in less than 200 lines with 0 dependencies.vertx-redis-client特点The Vert.x Redis client provides an asynchronous API to interact with a Redis />JedisJedis的官网地址https://github.com/redis/jedis我们先来个快速入门1. 引入依赖dependency groupIdredis.clients/groupId artifactIdjedis/artifactId version3.7.0/version /dependency2. 建立连接private Jedis jedis; BeforeEach void setUp() { // 建立连接 jedis new Jedis(192.168.150.101, 6379); // 设置密码 jedis.auth(123321); // 选择库 jedis.select(0); }3. 测试stringTest void testString() { // 插入数据方法名称就是redis命令名称非常简单 String result jedis.set(name, 张三); System.out.println(result result); // 获取数据 String name jedis.get(name); System.out.println(name name); }4. 释放资源AfterEach void tearDown() { // 释放资源 if (jedis ! null) { jedis.close(); } }补充说明Test是JUnit单元测试注解标记测试方法jedis.set()对应Redis的SET命令用于写入键值对jedis.get()对应Redis的GET命令用于读取键值AfterEach是JUnit的后置注解在每个测试方法执行后自动调用用于关闭Jedis连接、释放资源SpringDataRedisSpringData是Spring中数据操作的模块包含对各种数据库的集成其中对Redis的集成模块就叫做SpringDataRedis官网地址https://spring.io/projects/spring-data-redis提供了对不同Redis客户端的整合Lettuce和Jedis提供了RedisTemplate统一API来操作Redis支持Redis的发布订阅模型支持Redis哨兵和Redis集群支持基于Lettuce的响应式编程支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化支持基于Redis的JDKCollection实现SpringDataRedis快速入门SpringDataRedis中提供了RedisTemplate工具类其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类型中API返回值类型说明redisTemplate.opsForValue()ValueOperations操作String类型数据redisTemplate.opsForHash()HashOperations操作Hash类型数据redisTemplate.opsForList()ListOperations操作List类型数据redisTemplate.opsForSet()SetOperations操作Set类型数据redisTemplate.opsForZSet()ZSetOperations操作SortedSet类型数据redisTemplate-通用的命令SpringBoot已经提供了对SpringDataRedis的支持使用非常简单1. 引入依赖!--Redis依赖-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency !--连接池依赖-- dependency groupIdorg.apache.commons/groupId artifactIdcommons-pool2/artifactId /dependency2.配置文件spring: redis: host: 192.168.150.101 port: 6379 password: 123321 lettuce: pool: max-active: 8 # 最大连接 max-idle: 8 # 最大空闲连接 min-idle: 0 # 最小空闲连接 max-wait: 100 # 连接等待时间3. 注入RedisTemplateAutowired private RedisTemplate redisTemplate;4. 编写测试SpringBootTest public class RedisTest { Autowired private RedisTemplate redisTemplate; Test void testString() { // 插入一条string类型数据 redisTemplate.opsForValue().set(name, 李四); // 读取一条string类型数据 Object name redisTemplate.opsForValue().get(name); System.out.println(name name); } }SpringDataRedis的序列化方式RedisTemplate可以接收任意Object作为值写入Redis只不过写入前会把Object序列化为字节形式默认是采用JDK序列化得到的结果是这样的缺点可读性差内存占用较大解决方法自定义 RedisTemplate 序列化配置java Bean public RedisTemplateString, Object redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { // 创建Template RedisTemplateString, Object redisTemplate new RedisTemplate(); // 设置连接工厂 redisTemplate.setConnectionFactory(redisConnectionFactory); // 设置序列化工具 GenericJackson2JsonRedisSerializer jsonRedisSerializer new GenericJackson2JsonRedisSerializer(); // key和 hashKey采用 string序列化 redisTemplate.setKeySerializer(RedisSerializer.string()); redisTemplate.setHashKeySerializer(RedisSerializer.string()); // value和 hashValue采用 JSON序列化 redisTemplate.setValueSerializer(jsonRedisSerializer); redisTemplate.setHashValueSerializer(jsonRedisSerializer); return redisTemplate; }### ✅ 补充说明 * 这段代码解决了默认 JDK 序列化导致的**二进制乱码**问题。 * 采用了 **JSON 序列化**保证了数据可读性同时也支持 Java 对象的读写。 * 记得在你的 pom.xml 中引入 Jackson 依赖Spring Boot 基础依赖通常已包含 xml dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId /dependencyStringRedisTemplate主流Spring默认提供了一个StringRedisTemplate类它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程Autowired private StringRedisTemplate stringRedisTemplate; // JSON工具 private static final ObjectMapper mapper new ObjectMapper(); Test void testStringTemplate() throws JsonProcessingException { // 准备对象 User user new User(虎哥, 18); // 手动序列化 String json mapper.writeValueAsString(user); // 写入一条数据到redis stringRedisTemplate.opsForValue().set(user:200, json); // 读取数据 String val stringRedisTemplate.opsForValue().get(user:200); // 反序列化 User user1 mapper.readValue(val, User.class); System.out.println(user1 user1); }用fastJson想看其他技术文章请访问 主页fzktwnd.cn

更多文章