十念 发表于 2025-3-24 09:58:49

SpringBoot项目实战—难忘外卖开发:Redis与HttpClient实践【06】

SpringBoot项目实战—难忘外卖开发:Redis与HttpClient实践【06】

Java操作Redis入门指南

Redis是一个开源的内存数据结构存储体系,通常用于缓存、消息队列、会话存储等场景。它支持多种数据结构,如字符串、哈希、列表、集合等。在Java中使用Redis,可以通过多个客户端库来进行交互,最常用的库之一是Jedis。
https://i-blog.csdnimg.cn/img_convert/78ad9d4b30030f6d84cc56e3dc9a93a2.png
本节将先容如安在Java中操作Redis,包括如何设置Redis情况、毗连Redis、实行常用的Redis命令等内容。
情况搭建

1. 安装Redis

首先,你需要在你的体系中安装Redis。你可以根据体系平台的不同,参考Redis官方安装文档进行安装。
在Linux/Mac中,可以通过命令行安装:
# 使用Homebrew(macOS)
brew install redis

# 在Ubuntu上安装Redis
sudo apt-get install redis-server

在Windows上,推荐使用Redis Windows版进行安装。
安装完毕后,可以使用以下命令启动Redis服务:
redis-server
2. Java情况准备

在Java中使用Redis,我们需要引入Jedis客户端库。可以通过Maven来引入依赖:
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.3.1</version><!-- 使用最新版本 -->
</dependency>
假如你使用的是Gradle,则可以在build.gradle中添加如下依赖:
implementation 'redis.clients:jedis:4.3.1'
Java毗连Redis

1. 创建Jedis毗连

Jedis是最流行的Java Redis客户端库,它提供了直观的API来与Redis进行交互。首先,我们需要创建一个Jedis实例来毗连Redis服务器。
import redis.clients.jedis.Jedis;

public class RedisExample {
    public static void main(String[] args) {
      // 连接本地的Redis服务
      Jedis jedis = new Jedis("localhost", 6379);

      // 验证连接
      System.out.println("连接成功: " + jedis.ping());// 返回PONG

      // 关闭连接
      jedis.close();
    }
}
在这个简单的例子中,我们使用Jedis类来毗连本地Redis服务,ping()方法用来查抄是否成功毗连。毗连成功后,Redis会返回PONG。
2. 进行根本的Redis操作

Redis支持许多常见的数据类型和操作,接下来我们会演示一些常见的操作。
2.1 字符串操作

Redis中最常见的数据结构之一就是字符串。我们可以通过Jedis的set()和get()方法来设置和获取字符串值。
public class RedisExample {
    public static void main(String[] args) {
      Jedis jedis = new Jedis("localhost", 6379);

      // 设置一个键值对
      jedis.set("name", "Redis");

      // 获取一个键的值
      String value = jedis.get("name");
      System.out.println("键'name'的值是: " + value);

      jedis.close();
    }
}
2.2 哈希操作

Redis的哈希数据类型非常恰当存储对象。在Jedis中,我们可以使用hset()和hget()来操作哈希。
public class RedisExample {
    public static void main(String[] args) {
      Jedis jedis = new Jedis("localhost", 6379);

      // 设置哈希字段
      jedis.hset("user:1000", "name", "John");
      jedis.hset("user:1000", "age", "30");

      // 获取哈希字段的值
      String name = jedis.hget("user:1000", "name");
      String age = jedis.hget("user:1000", "age");

      System.out.println("用户的名字是: " + name);
      System.out.println("用户的年龄是: " + age);

      jedis.close();
    }
}
2.3 列表操作

Redis的列表可以存储多个元素,并支持按照次序访问。Jedis提供了lpush()和rpop()等方法来操作列表。
public class RedisExample {
    public static void main(String[] args) {
      Jedis jedis = new Jedis("localhost", 6379);

      // 向列表中添加元素
      jedis.lpush("fruits", "apple", "banana", "cherry");

      // 从列表中取出元素
      String fruit = jedis.rpop("fruits");
      System.out.println("取出的水果是: " + fruit);

      jedis.close();
    }
}
2.4 集合操作

Redis的集合类型不允许重复元素。我们可以使用sadd()和sismember()方法来操作集合。
public class RedisExample {
    public static void main(String[] args) {
      Jedis jedis = new Jedis("localhost", 6379);

      // 向集合中添加元素
      jedis.sadd("colors", "red", "green", "blue");

      // 判断某个元素是否在集合中
      boolean isMember = jedis.sismember("colors", "green");
      System.out.println("绿色是否在集合中: " + isMember);

      jedis.close();
    }
}
2.5 发布/订阅模式

Redis也支持发布/订阅(Pub/Sub)模式,可以通过Jedis实现消息的发布和订阅。
// 订阅者
public class RedisSubscriber {
    public static void main(String[] args) {
      Jedis jedis = new Jedis("localhost", 6379);

      jedis.subscribe(new redis.clients.jedis.JedisPubSub() {
            @Override
            public void onMessage(String channel, String message) {
                System.out.println("收到消息: " + message);
            }
      }, "newsChannel");

      jedis.close();
    }
}

// 发布者
public class RedisPublisher {
    public static void main(String[] args) {
      Jedis jedis = new Jedis("localhost", 6379);

      // 发布消息
      jedis.publish("newsChannel", "Hello, Redis!");

      jedis.close();
    }
}
Java使用HttpClient进行网络请求

在现代的Java应用程序中,发起HTTP请求是一个常见的需求。无论是与RESTful API通讯,照旧从远程服务器获取资源,Java提供了多种方法来实现HTTP请求。在Java 11中,HttpClient类被引入为标准库的一部分,替换了之前的HttpURLConnection和第三方库(如Apache HttpClient)。本文将先容如何使用Java 11的HttpClient类来发起HTTP请求。
1. 情况准备

确保你的Java版本是11或更高版本。假如你使用的是较低版本的Java,需要手动引入HttpClient的依赖。
1.1 查抄Java版本

可以通过以下命令查抄Java版本:
java -version
假如输出表现版本是11或更高版本,则可以使用HttpClient类。
1.2 创建Java项目

假如你使用的是Maven或Gradle管理项目依赖,你不需要额外的配置,由于HttpClient已经是Java 11标准库的一部分。
2. 根本用法

2.1 创建HttpClient实例

HttpClient是一个可以用来发送HTTP请求的类。在Java 11中,你可以通过HttpClient.newHttpClient()来创建一个新的HttpClient实例。
import java.net.http.HttpClient;

public class HttpClientExample {
    public static void main(String[] args) {
      // 创建HttpClient实例
      HttpClient client = HttpClient.newHttpClient();
      
      // 输出HttpClient信息
      System.out.println("HttpClient实例已创建");
    }
}
2.2 发送GET请求

最常见的HTTP请求类型是GET请求,它用来从服务器获取资源。在HttpClient中,我们可以通过HttpRequest来构建请求,然后使用HttpClient发送。
以下示例展示了如何发送一个简单的GET请求:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
      // 创建HttpClient实例
      HttpClient client = HttpClient.newHttpClient();

      // 创建GET请求
      HttpRequest request = HttpRequest.newBuilder()
                .uri(new URI("https://jsonplaceholder.typicode.com/posts/1"))
                .build();

      // 发送请求并获取响应
      HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

      // 输出响应内容
      System.out.println("Response Code: " + response.statusCode());
      System.out.println("Response Body: " + response.body());
    }
}
在上面的代码中:


[*]我们使用HttpRequest.newBuilder()来创建一个请求。
[*]client.send()方法发送请求并获取响应。
[*]使用HttpResponse.BodyHandlers.ofString()来处理响应体,返回一个字符串。
2.3 发送POST请求

POST请求通常用来向服务器发送数据。在HttpClient中,发送POST请求的方法与GET请求雷同,但需要指定请求体。
以下是发送POST请求的例子:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpHeaders;
import java.net.http.HttpRequest.BodyPublishers;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
      // 创建HttpClient实例
      HttpClient client = HttpClient.newHttpClient();

      // 创建POST请求
      String jsonBody = "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}";
      HttpRequest request = HttpRequest.newBuilder()
                .uri(new URI("https://jsonplaceholder.typicode.com/posts"))
                .header("Content-Type", "application/json")
                .POST(BodyPublishers.ofString(jsonBody))
                .build();

      // 发送请求并获取响应
      HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

      // 输出响应内容
      System.out.println("Response Code: " + response.statusCode());
      System.out.println("Response Body: " + response.body());
    }
}
在这个例子中:


[*]我们创建了一个POST请求,并将一个JSON格式的字符串作为请求体。
[*]BodyPublishers.ofString()方法将字符串转换为请求体。
[*]请求头中设置了Content-Type为application/json,告诉服务器请求体的格式是JSON。
2.4 异步请求

Java HttpClient也支持异步请求,这可以在不壅闭主线程的情况下处理请求。异步请求通过sendAsync()方法实现。
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;

public class HttpClientExample {
    public static void main(String[] args) {
      // 创建HttpClient实例
      HttpClient client = HttpClient.newHttpClient();

      // 创建GET请求
      HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
                .build();

      // 发送异步请求
      CompletableFuture<HttpResponse<String>> response = client.sendAsync(request, HttpResponse.BodyHandlers.ofString());

      // 打印响应结果
      response.thenAccept(res -> {
            System.out.println("Response Code: " + res.statusCode());
            System.out.println("Response Body: " + res.body());
      }).join();
    }
}
在这个异步请求的例子中:


[*]sendAsync()方法返回一个CompletableFuture对象,你可以通过thenAccept()方法来处理响应结果。
[*]join()方法壅闭当火线程,直到异步操作完成。
3. 处理请求和响应的常见问题

3.1 处理JSON响应

通常,HTTP请求的响应是JSON格式的数据。在Java中,我们可以使用Jackson或Gson库来解析JSON响应。
下面是一个简单的使用Jackson库解析JSON响应的例子:
import com.fasterxml.jackson.databind.ObjectMapper;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
      HttpClient client = HttpClient.newHttpClient();

      HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
                .build();

      HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

      // 使用Jackson解析JSON
      ObjectMapper objectMapper = new ObjectMapper();
      Post post = objectMapper.readValue(response.body(), Post.class);
      
      System.out.println("Post ID: " + post.getId());
      System.out.println("Post Title: " + post.getTitle());
    }

    public static class Post {
      private int id;
      private String title;

      // Getter and Setter
      public int getId() {
            return id;
      }

      public void setId(int id) {
            this.id = id;
      }

      public String getTitle() {
            return title;
      }

      public void setTitle(String title) {
            this.title = title;
      }
    }
}
3.2 处理超时和非常

当网络请求超时或者发生非常时,我们可以通过设置HttpClient的超时和捕获非常来进行处理。
import java.net.http.HttpClient;
import java.time.Duration;

public class HttpClientExample {
    public static void main(String[] args) {
      // 设置请求超时为5秒
      HttpClient client = HttpClient.newBuilder()
                .connectTimeout(Duration.ofSeconds(5))
                .build();
      
      try {
            // 发起请求
            HttpRequest request = HttpRequest.newBuilder()
                  .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
                  .build();
            client.send(request, HttpResponse.BodyHandlers.ofString());
      } catch (Exception e) {
            System.out.println("请求出错: " + e.getMessage());
      }
    }
}
Java的HttpClient类提供了一个简单、高效且功能强盛的API,能够资助开发者轻松地与Web服务进行交互。通过本文的学习,你应该能够使用HttpClient发送同步和异步的GET和POST请求,并处理常见的网络请求场景,如JSON解析和超时设置。
https://i-blog.csdnimg.cn/img_convert/f0b3b7d43523a56afb09eed4632db562.png
总结

本文深入探讨了如安在Java中使用Redis和HttpClient进行数据存储与网络请求的操作。首先,我们先容了Redis的根本概念和安装方法,并展示了如何通过Jedis客户端库在Java中与Redis进行毗连和交互。通过详细实例,我们演示了如何实行Redis中的常见操作,包括字符串、哈希、列表、集合等数据类型的操作,以及如何实现Redis的发布/订阅模式。
接着,本文转向了Java 11引入的HttpClient类,解说了如何使用它发送GET和POST请求,如那里理JSON响应,及其在实际开发中的应用。我们还先容了如何进行异步请求以及如那里理常见的网络请求问题,如超时和非常。
通过本篇教程,读者不仅能够把握Redis与Java的底子毗连操作,还能学会使用HttpClient进行高效的网络请求。这些技术对于构建高性能的Web应用程序,尤其是在处理缓存和远程API交互时,具有重要的实用代价。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: SpringBoot项目实战—难忘外卖开发:Redis与HttpClient实践【06】