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);
    }

}

在这里插入图片描述


相关文章
|
20天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
38 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
7天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
55 13
|
15天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
80 5
|
1月前
|
监控 前端开发 Java
Java SpringBoot –性能分析与调优
Java SpringBoot –性能分析与调优
|
1月前
|
存储 缓存 安全
🌟Java零基础:深入解析Java序列化机制
【10月更文挑战第20天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
29 3
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
1月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
44 0
|
Java Linux API
redis安装以及java连接
1.什么是redis Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
836 0
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
下一篇
DataWorks