Reactive的方式访问Redis

2023-11-18

前言

本文主要大概介绍一下响应式/反应式编程方式访问 redis,不能解决很多生产问题,只是帮助大家对响应式编程有一个认识。

本文是以Reactive 对方式访问 Redis ,当然也可以访问mongodb,以及部分关系型数据库,例如 Postgres,H2,Microsoft SQL Sever,目前只支持这些,持续更新请关注(https://spring.io/projects/spring-data-r2dbc),这个子工程是spring为了更好支持关系型数据库开发的。

响应式编程目前支持最多的是 web 层面,也就是我们springboot 依赖的 spring-boot-starter-webflux

正文

通俗解释Reactive: a=b+c ,我们给a 赋值后,再去改变b或者c不会影响a,我们在单元格写一个公式时,这样的值会随着其他值的改变而改变,这就是响应式的一个体现。

Java操作Redis的库有两个,Jedis和Lettuce,目前SpringBoot 2.x中已经将Jedis换成了Lettuce。

Lettuce能够支持 Reactive 方式

Spring Data Redis 中主要的支持

  • ReactiveRedisConnection
  • ReactiveRedisConnectionFactory
  • ReactiveRedisTemplate   

 

使用所有框架和中间件的版本

环境
框架 版本
Spring Boot                 2.1.3.RELEASE
redis redis-4.0.11
JDK 1.8.x

 

首先,创建一个maven工程,其pom文件如下

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


<dependencies>
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
        </dependency>
</dependencies>

这样我们就可以使用springboot 2.0+ 自带的  lettuce。

 

创建一个启动类 名字叫  RedisDemoApplication

 

@SpringBootApplication
public class RedisDemoApplication implements ApplicationRunner {
    @Autowired
    private ReactiveStringRedisTemplate redisTemplate;

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

    @Bean
    ReactiveStringRedisTemplate reactiveRedisTemplate(ReactiveRedisConnectionFactory factory) {
        return new ReactiveStringRedisTemplate(factory);
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        ReactiveHashOperations<String, String, String> hashOps = redisTemplate.opsForHash();
        Mono mono1 = hashOps.put("apple", "x", "6000");
        mono1.subscribe(System.out::println);
        Mono mono2 = hashOps.put("apple", "xr", "5000");
        mono2.subscribe(System.out::println);
        Mono mono3 = hashOps.put("apple", "xs max", "8000");
        mono3.subscribe(System.out::println);
    }
}

 

如果说我们想连接 reids的话,那么现在已经做完了。

测试一下

启动上面的程序,回到redis客户端,输出如下命令

127.0.0.1:6379> hgetall apple
1) "x"
2) "6000"
3) "xr"
4) "5000"
5) "xs max"
6) "8000"
127.0.0.1:6379> 

 

我们看到网上其他博主的文章有些累赘,我觉得很多可以用默认就用默认的,可以不写的那就不写,我连个配置文件都没用不是一样连接到redis嘛。

另外响应式编程目前我还没有听说哪家企业普及,但是这应该是未来的趋势,我们可能对返回 Flux 和Mono 有些不习惯,放心,一定有你习惯的一天。

 

关于 响应式编程的其他操作网上有很多,可以访问如下

https://blog.csdn.net/liubenlong007/article/details/86541913

https://www.jianshu.com/p/5172c48cb877

http://www.pianshen.com/article/868527566/

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Reactive的方式访问Redis 的相关文章

  • 使用brew在MacOSx上安装Redis JSON

    如何使用brew 在 macOSx 上安装 RedisJSON 如何在不编译redis的情况下启用redis上的模块 我不想使用 docker 客户端 Redis Stack 可能是最简单的方法 它不仅仅是 RedisJSON 还包括 Re
  • Laravel - 缓存 Eloquent 并频繁更新

    是否可以对经常修改的对象使用缓存 例如 假设我们有一个 BlogPost 对象 并且有一个经常更改的 num of views 列 以及其他列 是否可以更新缓存和数据库中的 num of views 字段 而不破坏缓存对象并重新创建它 我可
  • redis集群不断打印日志WSA_IO_PENDING

    当我启动redis集群的所有redis服务器时 所有这些服务器不断打印类似WSA IO PENDING clusterWriteDone的日志 9956 03 Feb 18 17 25 044 WSA IO PENDING writing
  • 如何在节点redis客户端上设置读取超时?

    在 github 上我没有看到读取超时的选项 https github com NodeRedis node redis https github com NodeRedis node redis There s connect timeo
  • Docker-compose Predis 不通过 PHP 连接

    我正在尝试使用 docker compose 将 PHP 与 redis 连接 docker compose yml version 2 services redis image redis 3 2 2 php image company
  • Redis hash写入速度非常慢

    我面临一个非常奇怪的问题 使用 Redis 时 我的写入速度非常糟糕 在理想的情况下 写入速度应该接近 RAM 上的写入速度 这是我的基准 package redisbenchmark import redis clients jedis
  • redis-cli 重定向到 127.0.0.1

    我在PC1上启动Redis集群 然后在PC2上连接它 当需要重定向到另一个集群节点时 它会显示Redirected to slot 7785 located at 127 0 0 1 但应该显示Redirected to slot 7785
  • 通过 StackExchange.Redis 连接到 Redis Servier

    我尝试使用以下方法制作一个测试项目Redis https redis io服务器 通过 Virtual Box 安装在 Linux Ubuntu 虚拟机上 Linux 机器通过 Virtual Box 的桥接适配器与本地网络连接 Virtu
  • 在 Kubernetes/Openshift 中将客户端-服务器流量保持在同一区域的最佳方法?

    我们运行兼容 Kubernetes OKD 3 11 的本地 私有云集群 其中后端应用程序与用作缓存和 K V 存储的低延迟 Redis 数据库进行通信 新的架构设计将在两个地理上分布的数据中心 区域 之间平均划分工作节点 我们可以假设节点
  • 使用Redis从有限范围内生成唯一ID

    我有一些数据库项目 除了主键之外 还需要项目所属组的唯一索引 我们来调用属性nbr 以及将项目分组在一起并定义唯一范围的属性nbr 我们会打电话group This nbr必须在 1 N 范围内 并且may从外部源导入项目时进行设置 由于所
  • 如何设置和获取Redis中存储的对象?

    我试图在 redis 中存储一个对象 当我获取该对象时 它似乎不起作用 I tried u User new u name blankman redis set test u x redis get test x name error 我想
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo
  • RxJS - 从可观察对象中获取最后 n 个元素

    我想从可观察对象中获取最后 3 个元素 假设我的时间线是这样的 a b c d e f g h i j gt where a b c d e f g h i j are emitted values 每当发出新值时 我想立即获取它 因此它可
  • Spring Data JPA Redis:无法编写基于自定义方法的查询

    我已经使用 Redis 配置了 Spring Data JPA 并使用RedisRepositorieswith 提供了类似的方法find findAll 所有这些方法似乎都工作得很好 但我无法编写我的自定义方法 RedisEntity f
  • redis - 使用哈希

    我正在使用 redis 为我的 Web 应用程序实现社交流和通知系统 我是 redis 的新手 我对哈希值及其效率有一些疑问 我读过这篇很棒的文章Instagram 帖子 http instagram engineering tumblr
  • 使用 Celery 通过 Gevent 进行实时、同步的外部 API 查询

    我正在开发一个 Web 应用程序 该应用程序将接收用户的请求 并且必须调用许多外部 API 来编写对该请求的答案 这可以直接从主 Web 线程使用 gevent 之类的东西来扇出请求来完成 或者 我在想 我可以将传入的请求放入队列中 并使用
  • StackExchange.Redis Get 函数抛出 TimeoutException

    我在用着StackExchange Redis与 C 和StackExchangeRedisCacheClient Get函数抛出以下异常 myCacheClient Database StringGet txtKey Text myCac
  • 使用redis进行树形数据结构

    我需要为基于树的键值开发一个缓存系统 与Windows注册表编辑器非常相似 其中缓存键是字符串 表示树中到值的路径 可以是原始类型 int string bool double 等 或子树本身 例如 key root x y z w val
  • 创建 C++ Redis 模块 - “不导出 RedisModule_OnLoad() 符号”

    我在加载 Redis 模块时遇到一些问题 我只是复制来自的示例https redis io topics modules intro https redis io topics modules intro 但我把它剥下来了 include

随机推荐

  • 机器学习常识 14: 半监督学习

    摘要 半监督学习强调的是一种学习场景 在该场景下 无标签数据可以协助带标签数据提升预测质量 1 基本概念 监督学习 训练数据都有标签 相应的任务为分类 回归等 无监督学习 训练数据都没有标签 相应的任务为聚类 特征提取 如 PCA 等 半监
  • MySQL索引篇

    目录 MySQL索引 一 怎么知道一条SQL语句有没有使用索引 二 如何排查慢查询 三 索引失效以及为什么失效 四 索引为什么能提高查询性能 五 为何选择B 树而不是B树 六 索引分类 七 什么时候创建以及什么时候不需要索引 八 索引优化
  • Python PyQt5(三)添加控件,绑定简单事件处理函数

    coding utf 8 Author BlueSand Email slxxfl000 163 com Web www lzmath cn Blog https blog csdn net weixin 41810846 Date 201
  • Leetcode 160. 相交链表 解题思路及C++实现

    解题思路 先将两个链表构建成一个环 定义两个快慢指针 当它们相遇时 将fast指针从头结点往后遍历 每次走一步 当这两个指针再次相遇时 该节点就是相交节点 Definition for singly linked list struct L
  • Verilog中forever、repeat、while、for四类循环语句(含Verilog实例)

    当搭建FPGA逻辑时 使用循环语句可以使语句更加简洁易懂 Verilog中存在四类循环语句 如标题 几种循环语句的具体介绍和用法如下 1 forever 连续的执行语句 语法格式 forever
  • 【算法入门】什么是时间复杂度和空间复杂度,最优解

    如何评价算法复杂度 时间复杂度 额外空间复杂度 常数操作 常数操作 常数操作 执行时间固定和数据量没有关系的运算操作 如果和数据量有关就不是常数操作 运算 数组寻址 数组里获取3位置和3000w位置数据时间相等 1 1 和100w 100w
  • unity3D期末作业捕鱼游戏,适合初学者学习使用,包含源程序所有文件

    虚拟现实期末作业捕鱼游戏 免积分下载 点我下载资源 有按钮 背景音乐 可以发射炮弹捕鱼 可以选择难度 可以调节音乐声音大小 有游戏加载进度条 详细情况请看如下动态图 点我下载资源
  • DataFrame添加列名,查看均值等,seaborn

    查看数据 seaborn画图简单好看 看两两特征的关系 对角线是自己和自己 dropna 处理缺失值
  • 设计模式 之 状态模式

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 设计模式 之 状态模式 概念 类的行为基于它的状态而改变 主体思想是将各种具体的状态类抽象出来 也就是会有很多状态类 使用场景 代码中包含大量与对象状态有关的条件语句 行为
  • C#多线程基础(一) PS:阅读C#多线程编程实战第一章总结

    一 基本概念 进程 Process 在操作系统中正在运行的应用程序被视为一个进程 包含着一个运行程序所需要的资源 进程可以包括一个或多个线程 线程 Thread 进程的基本执行单元 是操作系统分配CPU时间的基本单位 在进程入口执行的第一个
  • Git(1)

    步骤1 使用Git Bash 方法1 使用命令行进入Git安装目录的bin文件下 cd Program Files x86 Git bin 这样就可以使用Git Bash了 方法2 相比方法1更简便 步骤2 设置Git 配置email gi
  • ts类型体操 43 - Exclude

    43 Exclude by Zheeeng zheeeng easy built in union Question Implement the built in Exclude
  • Unity之Animation动画

    Unity之Animation动画 Unity之Animation绘制动画 这篇文章做最简单的动画 让一个立方体从左边移动到右边 1 创建一个Unity的新工程 名为TestAnimation 点击Create And Open按键 打开工
  • 机器学习之支持向量机: Support Vector Machines (SVM)

    机器学习之支持向量机 Support Vector Machines SVM 欢迎访问人工智能研究网 课程中心 网址是 http i youku com studyai 本篇博客介绍机器学习算法之一的支持向量机算法 理解支持向量机 Unde
  • 蓝桥杯:优秀的拆分

    蓝桥杯 优秀的拆分https www lanqiao cn problems 801 learning 目录 题目描述 输入描述 输出描述 输入输出样例 输入 输出 输入 输出 题目分析 位运算 AC代码 Java 题目描述 一般来说 一个
  • CSS font-family 中的苹方字体

    苹方提供了六个字重 font family 定义如下 苹方 简 常规体 font family PingFangSC Regular sans serif 苹方 简 极细体 font family PingFangSC Ultralight
  • 【Pytorch】六行代码实现:特征图提取与特征图可视化

    前言 之前记录过特征图的可视化 Pytorch实现特征图可视化 当时是利用IntermediateLayerGetter 实现的 但是有很大缺陷 只能获取到一级的子模块的特征图输出 无法获取内部二级子模块的输出 今天补充另一种Pytorch
  • 微信小程序API——向服务器发送请求

    在微信小程序中 我们可以通过微信的API与服务器进行数据传递 接下来我会详细介绍一下wx request的用法 首先给出前端代码 我们定义一个按钮 绑定点击事件 用于给服务器发送请求 当服务器返回数据后 通过wx for循环出数组中的数据
  • oracle如修改表字段的类型(表中有数据)

    如何在数据表有数据的情况下 修改字段类型 看到如何修改表字段类型 我想大多数人都觉得直接用修改语句 ALTER TABLE 表名 MODIFY 列名 类型 如果是修改多个字段就在后面继续 modify ALTER TABLE 表名 MODI
  • Reactive的方式访问Redis

    前言 本文主要大概介绍一下响应式 反应式编程方式访问 redis 不能解决很多生产问题 只是帮助大家对响应式编程有一个认识 本文是以Reactive 对方式访问 Redis 当然也可以访问mongodb 以及部分关系型数据库 例如 Post