首页 > 数据库 >使用 Redis 以反应方式访问数据

使用 Redis 以反应方式访问数据

时间:2022-12-26 10:35:35浏览次数:36  
标签:反应 Spring Redis 应用程序 访问 springframework org import data

使用 Redis 以反应方式访问数据_redis

本指南将引导您完成创建功能响应式应用程序的过程,该应用程序使用 Spring 数据通过非阻塞生菜驱动程序与 Redis 进行交互。

您将构建什么

您将构建一个使用春季数据红和项目反应器以被动方式与 Redis 数据存储交互,在不阻塞的情况下存储和检索对象。此应用程序使用基于 Reactive Streams 规范的 Reactor 实现,即(对于返回 0 或 1 值的发布服务器)和(对于返回 0 到 n 个值的发布服务器)。​​Coffee​​​​Publisher​​​​Mono​​​​Flux​

你需要什么

  • 约15分钟
  • 最喜欢的文本编辑器或 IDE
  • JDK 17或以后
  • 格拉德尔 4+​或梅文 3.2+
  • 您也可以将代码直接导入到 IDE 中:
  • 弹簧工具套件 (STS)
  • 智能理念
  • VSCode

如何完成本指南

像大多数春天一样入门指南,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会得到工作代码。

要从头开始,请继续从 Spring 初始化开始.

要跳过基础知识,请执行以下操作:

  • 下载​并解压缩本指南的源存储库,或使用吉特:git clone https://github.com/spring-guides/gs-spring-data-reactive-redis.git
  • 光盘成gs-spring-data-reactive-redis/initial
  • 跳转到创建域类.

完成后,您可以根据 中的代码检查结果。​​gs-spring-data-reactive-redis/complete​

从 Spring 初始化开始

你可以使用这个预初始化项目,然后单击生成以下载 ZIP 文件。此项目配置为适合本教程中的示例。

手动初始化项目:

  1. 导航到https://start.spring.io.此服务拉入应用程序所需的所有依赖项,并为您完成大部分设置。
  2. 选择 Gradle 或 Maven 以及您要使用的语言。本指南假定您选择了 Java。
  3. 单击依赖关系,然后选择Spring Reactive Web,Spring Data Reactive RedisLombok
  4. 单击生成
  5. 下载生成的 ZIP 文件,该文件是配置了您选择的 Web 应用程序的存档。

如果您的 IDE 集成了 Spring Initializr,则可以从 IDE 完成此过程。

您也可以从 Github 分叉项目,然后在 IDE 或其他编辑器中打开它。

创建域类

创建一个类,表示我们希望在咖啡目录中储存的一种咖啡:

​src/main/java/hello/Coffee.java​

package hello;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Coffee {
private String id;
private String name;
}

在这个例子中,我使用 Lombok 来消除构造函数的样板代码和所谓的“数据类”方法(访问器/突变器、、 和)。​​equals()​​​​toString()​​​​hashCode()​

创建配置类

创建一个包含支持反应式 Redis 操作的 Spring Bean 的类:

​src/main/java/hello/CoffeeConfiguration.java​

package hello;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
import org.springframework.data.redis.core.ReactiveRedisOperations;
import org.springframework.data.redis.core.ReactiveRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class CoffeeConfiguration {
@Bean
ReactiveRedisOperations<String, Coffee> redisOperations(ReactiveRedisConnectionFactory factory) {
Jackson2JsonRedisSerializer<Coffee> serializer = new Jackson2JsonRedisSerializer<>(Coffee.class);

RedisSerializationContext.RedisSerializationContextBuilder<String, Coffee> builder =
RedisSerializationContext.newSerializationContext(new StringRedisSerializer());

RedisSerializationContext<String, Coffee> context = builder.value(serializer).build();

return new ReactiveRedisTemplate<>(factory, context);
}

}

创建弹簧 Bean 以加载数据

创建一个 Spring Bean 以在启动应用程序时加载示例数据:

由于我们可能会多次(重新)启动我们的应用程序,因此我们应该首先删除以前执行中可能仍然存在的任何数据。我们使用 (Redis) 服务器命令来执行此操作。刷新任何现有数据后,我们创建一个小的,将每个咖啡名称映射到一个对象,并将其保存到反应式 Redis 存储库中。然后,我们在存储库中查询所有值并显示它们。​​flushAll()​​​​Flux​​​​Coffee​

​src/main/java/hello/CoffeeLoader.java​

package hello;

import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
import org.springframework.data.redis.core.ReactiveRedisOperations;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Flux;

import jakarta.annotation.PostConstruct;
import java.util.UUID;

@Component
public class CoffeeLoader {
private final ReactiveRedisConnectionFactory factory;
private final ReactiveRedisOperations<String, Coffee> coffeeOps;

public CoffeeLoader(ReactiveRedisConnectionFactory factory, ReactiveRedisOperations<String, Coffee> coffeeOps) {
this.factory = factory;
this.coffeeOps = coffeeOps;
}

@PostConstruct
public void loadData() {
factory.getReactiveConnection().serverCommands().flushAll().thenMany(
Flux.just("Jet Black Redis", "Darth Redis", "Black Alert Redis")
.map(name -> new Coffee(UUID.randomUUID().toString(), name))
.flatMap(coffee -> coffeeOps.opsForValue().set(coffee.getId(), coffee)))
.thenMany(coffeeOps.keys("*")
.flatMap(coffeeOps.opsForValue()::get))
.subscribe(System.out::println);
}
}

创建 RestController

创建一个为我们的应用程序提供外部接口:​​RestController​

​src/main/java/hello/CoffeeController.java​

package hello;

import org.springframework.data.redis.core.ReactiveRedisOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

@RestController
public class CoffeeController {
private final ReactiveRedisOperations<String, Coffee> coffeeOps;

CoffeeController(ReactiveRedisOperations<String, Coffee> coffeeOps) {
this.coffeeOps = coffeeOps;
}

@GetMapping("/coffees")
public Flux<Coffee> all() {
return coffeeOps.keys("*")
.flatMap(coffeeOps.opsForValue()::get);
}
}

使应用程序可执行

虽然您可以将此服务打包为传统服务战争文件以部署到外部应用程序服务器,此处显示的更简单的方法将创建独立应用程序。您将所有内容打包到一个可执行的 JAR 文件中,该文件由一个很好的旧 Java 方法驱动。在此过程中,您使用 Spring 的支持来嵌入​​main()​​内蒂作为 HTTP 运行时的异步“容器”,而不是部署到外部实例。

​src/main/java/hello/Application.java​

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

​@SpringBootApplication​​是一个方便的注释,它添加了以下所有内容:

  • ​@Configuration​​:将类标记为应用程序上下文的 Bean 定义源。
  • ​@EnableAutoConfiguration​​:告诉 Spring 引导根据类路径设置、其他 bean 和各种属性设置开始添加 bean。例如,如果 在类路径上,则此注释会将应用程序标记为 Web 应用程序并激活关键行为,例如设置 .spring-webmvcDispatcherServlet
  • ​@ComponentScan​​:告诉 Spring 在包中查找其他组件、配置和服务,让它找到控制器。hello

该方法使用 Spring Boot 的方法启动应用程序。您是否注意到没有一行 XML?也没有文件。此 Web 应用程序是 100% 纯 Java,您无需处理配置任何管道或基础结构。​​main()​​​​SpringApplication.run()​​​​web.xml​

构建可执行的 JAR

您可以使用 Gradle 或 Maven 从命令行运行应用程序。您还可以构建一个包含所有必需依赖项、类和资源的可执行 JAR 文件并运行该文件。通过构建可执行 jar,可以轻松地在整个开发生命周期中跨不同环境等将服务作为应用程序进行交付、版本控制和部署。

如果使用 Gradle,则可以使用 .或者,您可以使用 JAR 文件生成 JAR 文件,然后运行该文件,如下所示:​​./gradlew bootRun​​​​./gradlew build​

java -jar build/libs/gs-spring-data-reactive-redis-0.1.0.jar

如果使用 Maven,则可以使用 运行应用程序。或者,您可以使用 JAR 文件生成 JAR 文件,然后运行该文件,如下所示:​​./mvnw spring-boot:run​​​​./mvnw clean package​

java -jar target/gs-spring-data-reactive-redis-0.1.0.jar

此处描述的步骤将创建一个可运行的 JAR。你也可以构建经典 WAR 文件.

测试应用程序

现在应用程序正在运行,您可以通过从 HTTPie、curl 或您喜欢的浏览器访问来测试它。​​http://localhost:8080/coffees​

总结

祝贺!您已经开发了一个 Spring 应用程序,该应用程序使用 Spring 数据和 Redis 进行完全反应式、无阻塞的数据库访问!

标签:反应,Spring,Redis,应用程序,访问,springframework,org,import,data
From: https://blog.51cto.com/u_15326439/5968612

相关文章

  • 构建一个反应式 RESTful Web 服务
    本指南将引导您完成创建“你好,春天!带有SpringWebFlux的RESTfulWeb服务(SpringBoot2.0的新功能),然后使用WebClient使用该服务(也是SpringBoot2.0的新功能)。本指南展示了使......
  • 访问保管库
    本指南将引导您完成使用过程弹簧穹顶​生成从中加载机密的应用程序桥狮金库,一个机密管理工具。您将构建的内容您将加载存储在保管库中的密钥并使用传输加密后端。你需要什么......
  • springboot 使用redis和lettuce原理
    springboot使用redis  简介   在SpringBoot中,要访问Redis,可以直接引入spring-boot-starter-data-redis依赖,它实际上是SpringData的一个子项目——SpringDat......
  • redis设计与实现(一) redis概念和数据结构
    基础概念     定义       Redis(RemoteDictionaryServer)是一个使用C语言编写的,高性能非关系型的键值对数据库。     特点 基于......
  • Redis数据结构与对象
    参考《Redis设计与实现》系列文章目录和关于我一丶简单动态字符串当redis需要的不仅仅是一个字符串字面量,而是一个可以被修改的字符串值时,就会使用SDS(simpledynamics......
  • 【Redis场景2】缓存更新策略(双写一致)
    在业务初始阶段,流量很少的情况下,通过直接操作数据是可行的操作,但是随着业务量的增长,用户的访问量也随之增加,在该阶段自然需要使用一些手段(缓存)来减轻数据库的压力;所谓遇......
  • 03:Maven 私服 nexus服务器 – 本地仓库访问私服 & IDEA访问私服与组件上传
    1.本地仓库访问私服1.1访问流程1.2配置本地仓库访问私服1.2.1找到Maven的配置文件用记事本打开    1.2.2配置访问服务器的权限,用户名密码setting......
  • Redis 持久化机制
    Redis持久化机制1RDB每隔一段时间,生成一个指定时间点的快照。RDB使用fork子进程进行数据的持久化,数据IO操作在子进程中执行。1.1优点RDB文件简单,它保存的是到......
  • Git辅助bash脚本,-i指定独立密钥访问远程仓库,并智能判断是否需要使用网络代理
    劫持Git命令在个人配置文件(~/.bash_profile或~/.bashrc)中新建一个名为git的函数,注意,此处函数名称必须为git,这样在终端执行git命令时,才会优先调用我们定义好的Bash函数,而......
  • Kubernetes(三) 如何从外部访问服务
    Kubernetes教程之对外暴露服务文章地址:blog.piaoruiqing.com/2019/10/20/…前言通过前文的讲解,《跟着官方文档从零搭建K8S》、《应用部署》相信读者已经对Kubernet......