redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)

简介: 这篇文章介绍了在Java中使用Redis客户端的几种方法,包括Jedis、SpringDataRedis和SpringBoot整合Redis的操作。文章详细解释了Jedis的基本使用步骤,Jedis连接池的创建和使用,以及在SpringBoot项目中如何配置和使用RedisTemplate和StringRedisTemplate。此外,还探讨了RedisTemplate序列化的两种实践方案,包括默认的JDK序列化和自定义的JSON序列化,以及StringRedisTemplate的使用,它要求键和值都必须是String类型。

Jedis的使用

Jedis使用的基本步骤:
① 引入依赖创建Jedis对象,
② 建立连接
③ 使用Jedis,方法名与Redis命令一致
④ 释放资源

  1. 引入依赖
<!--Jedis-->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.3.1</version>
</dependency>
  1. 建立连接
// 测试链接
void SetUp(){
   
    // 1.建立链接
    jedis = new Jedis("192.168.197.129",6379);
    // 2.密码认证
    jedis.auth("123321");
    // 3.选择库
    jedis.select(0);
}
  1. 插入string类型的数据
 void testString(){
   
    String res = jedis.set("name", "byf");
    System.out.println("res"+res);

    String name = jedis.get("name");
    System.out.println("name="+name);
}
  1. 释放连接
 // 释放资源
void tearDown(){
   
    if(jedis!=null){
   
        jedis.close();
    }
}
  1. 完整代码:
package com.robin.test;

import redis.clients.jedis.Jedis;

public class JedisDemo1 {
   

    private Jedis jedis;

    // 测试链接
    void SetUp(){
   
        // 1.建立链接
        jedis = new Jedis("192.168.197.129",6379);
        // 2.密码认证
        jedis.auth("123321");
        // 3.选择库
        jedis.select(0);
    }

    // 测试String
    void testString(){
   
        String res = jedis.set("name", "byf");
        System.out.println("res"+res);

        String name = jedis.get("name");
        System.out.println("name="+name);

    }

    // 释放资源
    void tearDown(){
   
        if(jedis!=null){
   
            jedis.close();
        }
    }

    public static void main(String[] args) {
   
        JedisDemo1 demo1 = new JedisDemo1();
        demo1.SetUp();
        demo1.testString();
        demo1.tearDown();
    }

}

Jedis连接池

PS:Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此推荐使用Jedis连接池代替Jedis的直连方式。

package com.robin.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


/**
 * 使用JedisPool连接池
 */
public class JedisDemo2 {
   

    private static final JedisPool jedisPool;

    static {
   
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 配置连接池参数
        jedisPoolConfig.setMaxTotal(8); // 最大链接数
        jedisPoolConfig.setMaxIdle(8); //最大空闲连接数
        jedisPoolConfig.setMinIdle(8); // 最小空闲连接数

        jedisPool = new JedisPool(jedisPoolConfig,"192.168.197.129",6379);
    }

    // 获取jedis对象
    public static Jedis getJedis(){
   
        return jedisPool.getResource();
    }
}

SpringBoot整合Jedis

快速入门

SpringDataRedis的使用步骤:
① 引入spring-boot-starter-data-redis依赖
② 在application.yml配置Redis信息
③ 注入RedisTemplate

  1. 引入依赖
<!-- redis-stater -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--common-pool redis连接池-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.11.1</version>
</dependency>
  1. 配置yaml相关redis配置信息
spring:
  data:
    redis:
      host: 192.168.197.129 # redis服务IP
      port: 6379 # 端口
      password: 123321 # redis auth 认证密码
      lettuce:
        pool:
          max-active: 8  # 最大连接数
          max-idle: 8  # 最大空闲连接数
          max-wait: 100ms  # 最长等待时间
  1. 注入RedisTemplate测试使用
@SpringBootTest
class RedisDemoApplicationTests {
   

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @Test
    void testString() {
   
        redisTemplate.opsForValue().set("day","2023-11-28");
        String day = (String)redisTemplate.opsForValue().get("day");
        System.out.println(day);
    }

}

在这里插入图片描述

RedisTemplate的两种序列化实践方案

redisTemplate

  1. 默认情况
    RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式默认是采用JDK序列化。(字节形式可读性差,且占用内存较大
    在这里插入图片描述

  2. 自定义redisTemlate的序列化方式

@Configuration
public class RedisConfig {
   

    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
   

        // 创建RedisTemplate 对象
        RedisTemplate<String,Object> template = new RedisTemplate<>();
        // 设置连接工厂
        template.setConnectionFactory(connectionFactory);
        // 创建json序列化工具
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        // 设置key的序列化
        template.setKeySerializer(RedisSerializer.string());
        template.setHashKeySerializer(RedisSerializer.string());
        // 设置value的序列化
        template.setValueSerializer(jsonRedisSerializer);
        template.setHashValueSerializer(jsonRedisSerializer);
        // 返回 RedisTemplate
        return  template;
    }
}

PS:key设为string的序列化,value设为json序列化

@Test
void testSaveUser(){
   
    redisTemplate.opsForValue().set("user:100",new User("zhangsan",21));
    User o = (User)redisTemplate.opsForValue().get("user:100");
    System.out.println(o);
}

在这里插入图片描述

为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。" @class:“com.robin.redisdemo.pojo.user” "

stringRedisTemplate

统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化
在这里插入图片描述
(Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。)

@SpringBootTest
class StringRedisTemplateTests {
   

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    void testString() {
   
        stringRedisTemplate.opsForValue().set("day","2023-11-28");
        String day = (String)stringRedisTemplate.opsForValue().get("day");
        System.out.println(day);
    }


    private static final ObjectMapper mapper= new ObjectMapper();

    @Test
    void testSaveUser() throws JsonProcessingException {
   
        // 创建对象
        User user = new User("zhangsan2", 21);
        // 手动序列化
        String json = mapper.writeValueAsString(user);
        // 写入数据
        stringRedisTemplate.opsForValue().set("user:200",json);
        // 手动反序列化
        User user1 = mapper.readValue(json, User.class);
        String res = stringRedisTemplate.opsForValue().get("user:200");
        System.out.println(res);
    }

}

在这里插入图片描述


相关文章
|
7月前
|
存储 NoSQL Java
配置RedisTemplate序列化机制
通过上述步骤,你可以灵活配置RedisTemplate的序列化机制,根据应用需求选择合适的序列化器,从而确保数据在Redis中的存储和读取效率最优化。配置合适的序列化机制对于性能和存储效率至关重要,而且这样可以确保数据在存储和传输过程中的结构清晰和一致性。
488 11
|
8月前
|
存储 NoSQL Java
RedisTemplate序列化问题排查与优化建议。
最后,对于序列化问题的深入排查与优化,建议编写具有代表性的单元测试,以验证RedisTemplate配置的正确性和效能。此外,可以在非生产环境中测试不同的序列化策略,找到最适合当前应用场景的序列化方式。通过不断迭代和优化,达到持续提高数据存取能力的目标。
343 13
|
9月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
264 2
|
10月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
372 1
|
10月前
|
Java 调度 流计算
基于Java 17 + Spring Boot 3.2 + Flink 1.18的智慧实验室管理系统核心代码
这是一套基于Java 17、Spring Boot 3.2和Flink 1.18开发的智慧实验室管理系统核心代码。系统涵盖多协议设备接入(支持OPC UA、MQTT等12种工业协议)、实时异常检测(Flink流处理引擎实现设备状态监控)、强化学习调度(Q-Learning算法优化资源分配)、三维可视化(JavaFX与WebGL渲染实验室空间)、微服务架构(Spring Cloud构建分布式体系)及数据湖建设(Spark构建实验室数据仓库)。实际应用中,该系统显著提升了设备调度效率(响应时间从46分钟降至9秒)、设备利用率(从41%提升至89%),并大幅减少实验准备时间和维护成本。
488 0
|
10月前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
1054 0
|
10月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
2117 0
|
10月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
549 1