SpringBoot整合Redis哨兵模式

news2024/10/7 20:32:35

文章目录

  • 1、Redis哨兵复习
  • 2、整合
  • 3、简单举例
  • 4、RedisTemplate详解
  • 5、补充

1、Redis哨兵复习

在这里插入图片描述

Redis哨兵主要有三点作用:

  • 监控:不断检查master和slave是否正常运行
  • 通知:当被监控的主从服务器发生问题时,向其他哨兵和客户端发送通知
  • 自动故障转移:断开master和slave的连接,选取一个slave做为master,将其他slave连接到新的maser,并导致客户端新的maser地址

关于Redis哨兵模式的搭建和详解,看这篇【CSDN-Redis哨兵模式】

2、整合

  • 在pom.xml文件中添加以下依赖:
<dependencies>
    <!-- Redis依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- Redis哨兵模式 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
</dependencies>
  • 在application.properties文件中添加以下Redis配置:
# Redis连接配置
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=host1:port1,host2:port2,host3:port3

# spring.redis.sentinel.master的值为你的Redis主节点名称
# spring.redis.sentinel.nodes的值为你的Redis哨兵节点列表。
  • 如果项目的配置文件用的yaml文件,则Redis配置的格式用下面这个
# 单哨兵
spring:
  redis:
    sentinel:
      master: mymaster
      nodes: 192.168.43.243:26379
    lettuce:
      pool:
        max-idle: 10
        max-active: 20
        min-idle: 0
        max-wait: 10000ms
# 多哨兵,则nodes用数组格式,也就是横线
spring:
  redis:
    sentinel:
      master: your-redis-master  # 指定Redis的主节点名称
      nodes:  # 指定一个或多个哨兵节点的地址和端口号
        - host: your-sentinel1-host
          port: your-sentinel1-port
        - host: your-sentinel2-host
          port: your-sentinel2-port
        - host: your-sentinel3-host
          port: your-sentinel3-port
    password: your-redis-password
    # 在哨兵模式中,Redis哨兵节点的配置通常与主节点保持一致,因为哨兵节点不存储数据,它们只负责监控节点的可用性。
    # 所以你不需要在哨兵节点的配置中指定用户名和密码,只需要在主节点的配置中指定密码即可

关于连接池的参数:

  • max-active:连接池中最大活跃连接数(默认值为8)。当连接数达到最大活跃连接数时,新的请求将会等待,直到有可用的连接为止。
  • max-idle:连接池中最大空闲连接数(默认值为8)。当空闲连接数超过最大空闲连接数时,多余的空闲连接将被释放。
  • min-idle:连接池中最小空闲连接数(默认值为0)。连接池中保持的最小空闲连接数,当请求连接时,如果空闲连接数不足,则会创建新的连接。
  • max-wait:连接池中获取连接的最大等待时间(默认-1,表示无限等待)。当连接池中的连接都被占用且达到最大活跃连接数时,新的请求会等待一段时间,如果超过最大等待时间,则会抛出异常。
  • test-on-create:在创建新的连接时,是否进行连接的测试验证(默认值为false)。如果设置为true,则在创建连接的时候会执行一次测试命令,确保连接可用。
  • test-on-borrow:在从连接池中借用连接时,是否进行连接的测试验证(默认值为false)。如果设置为true,则在从连接池中获取连接的时候会执行一次测试命令,确保连接可用。
  • test-on-return:在归还连接到连接池时,是否进行连接的测试验证(默认值为false)。如果设置为true,则在归还连接到连接池的时候会执行一次测试命令,确保连接可用。
  • test-while-idle:在连接空闲一段时间后,是否进行连接的测试验证(默认值为true)。如果设置为true,则连接空闲一段时间后会执行一次测试命令,确保连接可用。

最后,如果报错

"NOAUTH HELLO must be called with the client already HELLO" 

表明Redis连接需要进行认证,但是在发起 HELLO 命令之前没有进行认证。可以单独加下哨兵的密码:

spring.redis.sentinel.password=code9527

3、简单举例

  • 使用RedisTemplate或者使用注解的方式来访问Redis。以下是使用RedisTemplate的示例:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    
    @Autowired
    private RedisTemplate redisTemplate;
    
    public void saveUser(String username, String password) {
        redisTemplate.opsForHash().put("users", username, password);
    }
    
    public String findUser(String username) {
        return (String) redisTemplate.opsForHash().get("users", username);
    }
    
}

//RedisTemplate是通过自动装配注入的,可以直接使用来操作Redis
  • 创建一个Controller类来处理请求并调用UserService中的方法
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    
    @Autowired
    private UserService userService;

	@PostMapping("/user/addRedis")
	public void addUserToRedis(String username,String password){
		userService.saveUser(username,password);
	}
    
    @GetMapping("/user/{username}")
    public String getUser(@PathVariable String username) {
        return userService.findUser(username);
    }
    

}

测试一下:
在这里插入图片描述

添加成功:

在这里插入图片描述

查询一下:

在这里插入图片描述

最后记录下一个我遇到的问题,哨兵拿到master的host时,host是个域名,我本地IDEA启动时不能解析成IP,报错:

在这里插入图片描述

可以先通过修改操作系统的Hosts文件来实现模拟域名和IP的关系:

C:\Windows\System32\drivers\etc

在文件末尾添加一行,格式为 "<IP地址> <域名>"
例如: "127.0.0.1 mydomain.com".

4、RedisTemplate详解

RedisTemplate是Spring Data Redis提供的一个用于与Redis交互的高级工具类。它封装了与Redis服务器通信的底层细节,并提供了许多方便的方法来操作Redis的各种数据结构。

  • RedisTemplate基于Jedis或Lettuce等连接池技术,实现了与Redis服务器的连接和资源管理
  • 类中定义了一系列方法,可处理Redis的各种数据结构和执行各种Redis命令
  • RedisTemplate内部使用序列化器将Java对象转换为字节数组,并将其存储到Redis中。同时,还负责将从Redis中获取的字节数组转换回Java对象
//关于K,V
@Autowired
RedisTemplate<K,V> redisTemplate;

当使用RedisTemplate操作Redis时,K的类型通常是String类型,即键的数据类型为字符串。而V的类型可以是任意类型,取决于你存储的实际数据。RedisTemplate支持多种数据结构,例如字符串、哈希、列表、集合、有序集合等,因此V的类型可以是String、Hash、List、Set、ZSet等。

常用方法:

#1opsForValue()

返回一个用于操作String类型的ValueOperations对象,可以对Redis中的字符串键值对进行操作

#2opsForHash()

返回一个用于操作Hash类型的HashOperations对象,可以对Redis中的哈希数据结构进行操作

#3opsForList()

返回一个用于操作List类型的ListOperations对象,可以对Redis中的列表数据结构进行操作

#4opsForSet()

返回一个用于操作Set类型的SetOperations对象,可以对Redis中的集合数据结构进行操作

#5opsForZSet()

返回一个用于操作Sorted Set类型的ZSetOperations对象,可以对Redis中的有序集合数据结构进行操作


#6execute(RedisCallback)

用于执行自定义的Redis操作,可以通过实现RedisCallback接口来自定义要执行的操作

当你调用RedisTemplate的opsForValue()方法时,返回的实例可以用于操作字符串值;调用opsForHash()方法时,可以操作哈希类型的值;调用opsForList()方法时,可以操作列表类型的值;

总之就是,要操作什么类型的Redis数据,就调opsForxxx()方法获取什么类型的Operations对象,完了用这个对象调用set、get、hget等方法就行。

5、补充

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/717654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当量因子法、InVEST、SolVES模型等多技术融合在生态系统服务功能社会价值评估

第一章 理论基础与研究热点分析 1. 生态系统服务与生态系统服务价值介绍 ​ 2. 生态系统服务价值研究方法 3. 生态系统服务价值研究热点 Citespace文献可视化分析 VOSviewer文献可视化分析 第二章 空间数据来源及预处理 1. 空间数据简介 2. ArcGIS Pro数据采集与分析 数…

直流运算放大器-----四种反馈电路(一)

目录 电压串联负反馈 电路图 计算公式 仿真 电压并联负反馈 电路图 计算公式 仿真 电流串联负反馈 电路图 计算公式 仿真 电流并联负反馈 电路图 计算公式 仿真 电压电流&#xff0c;串联并联反馈区分 电压串联负反馈 电路图 计算公式 仿真 因为是二倍放大&#x…

Spring boot +React集成ChatGPT 智能AI

在这里插入代码片import {Button, Input, Radio,Alert,Modal } from antd; import Marquee from react-fast-marquee; import {ChromeOutlined,WifiOutlined,AimOutlined } from ant-design/icons; import React, {useEffect, useState, useRef} from react; import chatgptPn…

MIT 6.S081 Lab Seven -- 多线程

MIT 6.S081 Lab Seven -- 多线程 引言MultithreadingUthread: switching between threads (moderate)代码解析补充 Using threads (moderate)代码解析 Barrier(moderate)代码解析 引言 本文为 MIT 6.S081 2020 操作系统 实验七解析。 MIT 6.S081课程前置基础参考: 基于RISC-V…

【C++初阶】12. Stack(栈)和Queue(队列)

1. 栈和队列的介绍 栈的介绍 队列的介绍 2. 栈和队列的使用 最小栈 栈的压入、弹出序列 逆波兰表达式求值 拓展&#xff1a;如何从中缀变为后缀 3. 两种设计模式 设计模式目前分为26种&#xff0c;这里就只介绍两种 适配器模式迭代器模式 在日常生活中&#xff0c;我们常…

Vue生态及实践 - Vue Router(1)

目录 路由 Vue-Router Mode Hash Mode HTML5 Mode 代码实操 目标是替换掉原版的vue-router 路由 路由&#xff08;routing&#xff09;就是通过互联的网络把信息从源地址传输到目的地址的活动。 ——wikipedia Vue-Router 传统web开发路由是后端控制的 随着ajax技术的…

【代理服务器】Squid 反向代理与Nginx缓存代理

目录 一、Squid 反向代理1.1工作机制1.2反向代理实验1.3清空iptables规则&#xff0c;关闭防火墙1.4验证 二、使用Nginx做反向代理缓存服务器三CDN简介3.1什么是CDN3.1CDN工作原理 一、Squid 反向代理 如果 Squid 反向代理服务器中缓存了该请求的资源&#xff0c;则将该请求的…

基于Surprise协同过滤实现短视频推荐

前言 前面一文介绍了通过基础的web项目结构实现简单的内容推荐&#xff0c;与其说那个是推荐不如说是一个排序算法。因为热度计算方式虽然解决了内容的时效质量动态化。但是相对用户而言&#xff0c;大家看到的都是几乎一致的内容&#xff08;不一样也可能只是某时间里某视频的…

准确率 99.9% 的离线IP地址定位库

Ip2region 是一个离线 IP 地址定位库&#xff0c;准确率高达 99.9%&#xff0c;搜索性能为 0.0x 毫秒。DB 文件只有几兆字节&#xff0c;其中存储了所有 IP 地址。 支持 Java、PHP、C、Python、Nodejs、Golang、C#、lua 等查询绑定。查询算法使用二叉树、B树和内存搜索算法。 …

基于Java乡镇篮球队管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

探索小程序的世界(专栏导读、基础理论)

文章导读 一、为什么要学习小程序开发1.1 低门槛1.2 市场需求1.3 创业机会1.4 技术发展趋势 二、专栏导读2.1 实战系列2.2 工具系列2.3 游戏系列2.4 插件系列 三、基础理论3.1 微信小程序简易教程框架组件API工具 开发者工具项目结构 3.2 app.json配置pageswindowtabbar 3.3 Ap…

Android Studio实现内容丰富的安卓自行车租赁平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号105 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.查…

Linux centos7.6下查看下线指定用户(实操)

Linux系统是一个多用户多任务的分时操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪&#xff0c;并控制他们对系统…

【源码】为什么UWB定位技术可用于室内定位?

UWB室内人员定位原理 UWB室内人员定位技术只是属于无线定位技术的一种。流行的无线定位技术包括GPS定位、北斗定位、蓝牙定位、WIFI定位、RFID定位等&#xff0c;其中GPS、北斗主要用在室外定位&#xff0c;蓝牙定位、WIFI定位、RFID定位、UWB定位主要用于室内定位。UWB定位和…

《软件测试开发》概念篇

目录 一.什么是测试 二.测试与开发之间的区别1.工作内容上的区别 2.技能要求上的区别 3.发展前景 测试与调试之间的区别 三.优秀的测试人员所应具备的素质 四.需求 需求的概念 需求的产生&#xff0c;需求是怎么来的&#xff1f; 测试人员眼中的需求 需求的重要性 测…

论文阅读 (94):Substructure Aware Graph Neural Networks (SAGNN, AAAI2023)

文章目录 1 要点1.1 概述1.2 一些概念1.3 代码1.4 引用 2 基础知识2.1 符号2.2 信息传递神经网络 (MPNN) 3 方法3.1 子图提取3.1.1 基于节点的策略3.1.2 基于图的策略 3.2 随机游走返回概率编码3.3 子图信息注入的信息传递 1 要点 1.1 概述 题目&#xff1a;子结构感知图神经…

《YOLOv5/YOLOv7魔术师》专栏介绍 CSDN独家改进创新实战专栏目录

&#x1f4a1;&#x1f4a1;&#x1f4a1;YOLOv5/YOLOv7魔术师&#xff0c;独家首发创新&#xff08;原创&#xff09;&#xff0c;持续更新&#xff0c;最终完结篇数≥100&#xff0c;适用于Yolov5、Yolov7、Yolov8等各个Yolo系列&#xff0c;专栏文章提供每一步步骤和源码&am…

测试员眼中的____是____

- 1 - 测试员眼中的开发是淘气的孩子 只有靠哄、豁、骗 才能让其完成“作业” - 2 - 测试员眼中的产品经理是女票 不管大小事&#xff0c;只要意见有出入 都得与其商量&#xff0c;才能最终拍板 - 3 - 测试员眼中的UI是艺术家 每天都操着画板&#xff08;苹果显示器&#xff…

解除网页禁止复制,复制粘贴没烦恼。

参考 解除网页禁止复制&#xff0c;复制粘贴没烦恼。 https://zhuanlan.zhihu.com/p/344419634 安装SuperCopy插件

游戏出海长期向好趋势未改,茄子科技助力企业把握出海机遇

在中国游戏出海成为更多企业的必选题之时&#xff0c;如何把握出海机遇&#xff0c;在激烈竞争中实现增长&#xff0c;成为中国游戏厂商的着力点。秉承着红海将至的市场发展背景&#xff0c;出海全球化、本地化的战略已经成为企业大势所趋&#xff0c;越来越多的游戏厂商开始挑…