当前位置: 首页 > news >正文

springboo 整合 redis

springBoot 整合 redis

starter启动依赖。—包含自动装配类—完成相应的装配功能。

  1. 引入依赖
<!--引入了redis整合springboot 的依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 修改配置文件
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-idle=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.jedis.timeout=5000
  1. 使用

springboot整合redis时封装了两个工具类:**StringRedisTemplate****RedisTemplate**.
StringRedisTemplate它是RedisTemplate的子类。StringRedisTemplate里面只能存放字符串的内容。

StringRedisTemplate && redisTemplate

**StringRedisTemplate中定义的5中数据结构,其实和redisTemplate一样,只是参数改成了String,两者的使用就看大家的业务场景了。
QQ_1721789573733.png

opsForList()操作list
opsForValue()操作字符串
opsForCluster()集群时使用
opsForGeo()地理位置时使用
opsForHash()操作hash
opsForSet()操作set
opsForZSet()操作有序set

opsForHash()操作命令

QQ_1721818487604.png

  1. put(H var1, HK var2, HV var3)
    :::tips
  • 新增hashMap值
    • var1 为Redis的key
    • var2 为key对应的map值的key
    • var3 为key对应的map值的值
    • var2相同替换var3

image.png
:::

  1. get(H var1, Object var2)
    :::success
    获取key对应的map中,key为var2的map的对应的值
    QQ_1721818086626.png
    :::

  2. entries(H key)

获取key对应的所有map键值对
QQ_1721818474977.png

  1. keys(H key)

**获取key对应的map中所有的键 **
QQ_1721818640786.png

5、values(H key)
:::danger
获取key对应的map中所有的值
QQ_1721818758194.png
:::

  1. hasKey(H key, Object var2)

判断key对应的map中是否有指定的键
QQ_1721818829048.png

  1. size(H key)
    :::info
    获取key对应的map的长度
    QQ_1721818958535.png
    :::

  2. putIfAbsent(H key, HK var2, HV var3)

如何key对应的map不存在,则新增到map中(true),存在则不新增也不覆盖(false)
QQ_1721819068893.png

  1. putAll(H key, Map<? extends HK, ? extends HV> map)
    :::info
    直接以map集合的方式添加key对应的值
    map中key已经存在,覆盖替换
    map中key不存在,新增
    QQ_1721819261479.png
    :::

  2. multiGet(H key, Collection var2)
    :::tips
    以集合的方式获取这些键对应的map
    QQ_1721819501397.png
    :::

  3. lengthOfValue(H key, HK var2)

获取指定key对应的map集合中,指定键对应的值的长度
QQ_1721819617664.png

  1. increment(H key, HK var2, long long1)

使key对应的map中,键var2对应的值以long1自增
QQ_1721819713521.png

  1. increment(H key, HK var2, double d1)

使key对应的map中,键var2对应的值以double类型d1自增
QQ_1721819802355.png

  1. delete(H key, Object… var2)

删除key对应的map中的键值对
QQ_1721819930636.png

opsForValue()

QQ_1721821312247.png

  1. **set(K var1, V var2)**

新增一个字符串类型的值

  • var1是key
  • var2是值
  • key存在就覆盖,不存在新增

QQ_1721821320573.png

  1. **set(K key, V value, timeout, TimeUnit.XXX)**

新增一个字符串类型的值,同时设置过期时间

  • var1是key
  • var2是值
  • key存在就覆盖,不存在新增

QQ_1721821889011.png

  1. **append(K var1, String var2)**

给对应的key追加value,key不存在直接新增 返回增加后的字符串长度
QQ_1721822009057.png

  1. **set(K key1, V v1, long v2)**

将key的 value 从下标 3 往后替换为新的value, key不存在相当于新增
QQ_1721822182262.png

  1. **setIfAbsent(K var1, V var2);**

如果key不存在则新增(true),key存在不做任何操作(false)
QQ_1721822331980.png

  1. **setIfAbsent(K var1, V var2, long var3, TimeUnit var5)**

如果key不存在则新增,同时设置过期时间,key存在不做任何操作。
QQ_1721822421391.png

  1. **setIfPresent(K var1, V var2)**

如果key存在则修改,key不存在不做任何操作
QQ_1721822579140.png

  1. **setIfPresent(K var1, V var2, long var3, TimeUnit var5)**

如果key存在则修改,同时设置过期时间,key不存在不做任何操作。
QQ_1721822628966.png

  1. **getAndSet(K var1, V var2)**

获取key对应的值,如果key存在则修改,不存在则新增
QQ_1721822690547.png

  1. **increment(K var1)**

以增量的方式(默认增量为1)将long值存储在变量中(value为其他类型时报错),返回最新值
QQ_1721822772504.png

  1. **increment(K var1, long var2)**

以指定增量的方式将Long值存储在变量中,返回最新值
QQ_1721822923541.png

  1. **decrement(K var1)**

以递减的方式(默认为1)将long值存储在变量中(value为其他类型时报错,Double也不行,只能为Long),返回最新值
QQ_1721822964173.png

  1. **decrement(K var1, long var2)**

以指定递减量递减的方式将long值存储在变量中(value为其他类型时报错,Double也不行,只能为Long),返回最新值
QQ_1721823014143.png

  1. **size(K var1)**

获取指定key对应值的长度
QQ_1721823045497.png

  1. **get(Object var1)**

获取指定的key对应的值
QQ_1721823089843.png

  1. **get(K var1, long var2, long var4)**

获取key指定下标之间对应的值
QQ_1721823118912.png

  1. **multiSet(Map<? extends K, ? extends V> var1)**

将map中的key分别作为不同的key存到Redis中(见截图)

  • 若某个key已经存在则替换为新值,其他不存在的则新增
  • map中5个key,3个存在Redis中,2个没有,结果就是3个值被修改,2个新增

QQ_1721823172801.png

在使用 redis 时要注意

如果使用RedisTemplate每次都需要人为指定key和value的序列化
注意导包
**FastJson**

//指定key的序列化方式。
redisTemplate.setKeySerializer(new StringRedisSerializer());
//指定value的序列化方式
redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));

直接写一个序列化配置类

后面再使用时候直接自动注入就行不用再序列化了(省略 8.6.2)

@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);//设置value的序列化方式jsonredisTemplate.setValueSerializer(redisSerializer());//设置key序列化方式StringredisTemplate.setKeySerializer(new StringRedisSerializer());//设置hash key序列化方式StringredisTemplate.setHashKeySerializer(new StringRedisSerializer());//设置hash value序列化jsonredisTemplate.setHashValueSerializer(redisSerializer());redisTemplate.afterPropertiesSet();return redisTemplate;}public RedisSerializer<Object> redisSerializer() {//创建JSON序列化器ObjectMapper objectMapper = new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);//必须设置,否则无法序列化实体类对象objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);return new GenericJackson2JsonRedisSerializer(objectMapper);}

集群模式

只需要修改配置文件

#集群模式
spring.data.redis.cluster.nodes=47.121.143.123:7001,47.121.143.123:7002,47.121.143.123:7003,47.121.143.123:7004,47.121.143.123:7005,47.121.143.123:7006

相关文章:

springboo 整合 redis

springBoot 整合 redis starter启动依赖。—包含自动装配类—完成相应的装配功能。 引入依赖 <!--引入了redis整合springboot 的依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis&…...

dpdk编译安装以及接收udp报文(基于ubuntu)

目录 1、编译 2、设置运行环境 3、使用dpdk接收udp报文 3.1、设置发送端arp信息 3.2、测试 3.3、代码 4、其他 1、编译 代码下载&#xff1a; DPDK 下载版本&#xff1a;DPDK 19.08.2 export RTE_SDK/root/dpdk-stable-19.08.2/ export RTE_TARGETx86_64-native-li…...

【计算机网络】OSPF单区域实验

一&#xff1a;实验目的 1&#xff1a;掌握在路由器上配置OSPF单区域。 2&#xff1a;学习OSPF协议的原理&#xff0c;及其网络拓扑结构改变后的变化。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a;RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。…...

Java聚合快递小程序对接云洋系统程序app源码

​一场物流效率的革命 引言&#xff1a;物流新时代的序章 在数字化浪潮席卷各行各业的今天&#xff0c;物流行业也迎来了前所未有的变革。为了进一步提升物流效率&#xff0c;优化用户体验&#xff0c;聚合快递系统与云洋系统小程序的对接成为了行业内外关注的焦点。这一创新…...

【React】详解组件通信:从基础到进阶的全面指南

文章目录 一、父组件向子组件传递数据1. 基本概念2. 示例代码3. 详解定义子组件 Son定义父组件 App导出父组件 App数据流props 的内容 二、子组件向父组件传递数据1. 基本概念2. 示例代码3. 详解引入React库和useState钩子定义子组件 Son定义父组件 App导出父组件 App数据流 三…...

【vluhub】zabbix漏洞

介绍&#xff1a; zabbix是对服务器资源状态例如、内存空间、CPU、程序运行状态进行检测、设置预警值、短信设置等功能等一款开源工具。配置不当存在未授权,SQL注入漏洞 弱口令 nameadmin&passwordzabbix nameguest&password POST /index.php HTTP/1.1 Host: 192.1…...

openGauss触发器详解

openGauss 是一款开源关系型数据库管理系统&#xff0c;广泛应用于企业级应用中。随着数据量的增长和业务逻辑的复杂化&#xff0c;数据库管理和操作的自动化需求越来越高。触发器&#xff08;Triggers&#xff09;作为数据库中重要的编程工具&#xff0c;能够极大地简化复杂操…...

抄作业-跟着《React通关秘籍》捣鼓React-playground-上集

文章目录 前言1. 搭建react 开发环境2、react hooks 知识3. 目标&#xff1a;跟着小册实现 react-playground3.1 整体布局初始化项目使用Alloment 来实现左右分屏的拖拉功能 3.2 代码编辑器Monaco Editor 3.3 实现了多文件的切换用 useContext 来共享数据。优化 tab的样式&…...

80后最后的书信 年代

当时11亿人口只有1.8万部固定电话 中国几千年来 鱼传尺素 雁寄鸿书 写信最后要写 亲啓 如有照片&#xff0c;封面要写内有照片&#xff0c;请勿折叠 信的开头应该是 见字如面&#xff0c;展信舒颜 如果拜托别人做事情&#xff0c;最后要写为盼 最后要写 某某草 书未尽…...

软考-软件设计师(4)-计算机网络与安全:OSI七层、子网划分、网络安全控制技术、网络安全协议、网络安全威胁、对称与非对称加密等高频考点

场景 软考-软件设计师-计算机网络与信息安全模块高频考点整理。 以下为高频考点、知识点汇总,不代表该模块所有知识点覆盖,请以官方教程提纲为准。 注: 博客:霸道流氓气质-CSDN博客 实现 知识点 OSI/RM七层模型 注意各层的主要功能,特别是表示层负责数据的加密、压…...

Unity横板动作游戏 -为什么我又开始学习Unity,而不是Godot。

Readme 最近开始学习Unity制作2D动作游戏&#xff0c;由于一些操作第一次接触&#xff0c;为了加深印象&#xff0c;准备写这样一篇同步教程的笔记。 之前也接触过Unity&#xff0c;用 Unity 制作过一个非常简单的小游戏 Flappy Bird&#xff0c;并且魔改成了泰拉瑞亚的版本。…...

什么是NIO

NIO&#xff08;New Input/Output&#xff09;&#xff0c;也称为Java非阻塞IO&#xff0c;是从Java 1.4版本开始引入的一个新的IO API&#xff0c;旨在提供一种比传统的阻塞IO更高效、更灵活的IO操作方式。 一 NIO用法的详细介绍 NIO支持面向缓冲区的、基于通道的IO操作&…...

PHP switch 替代品 match

match 是 PHP 8 中引入的新特性。在 PHP 8 中&#xff0c;match 用作新的类型安全的替代 switch 语句。它提供了更清晰、更简洁的语法&#xff0c;同时还支持表达式作为条件&#xff0c;可以更轻松地处理复杂的条件逻辑。 在 match 表达式中&#xff0c;每个分支都是一个条件和…...

FastAPI(七十四)实战开发《在线课程学习系统》接口开发-- 删除留言

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 之前文章FastAPI&#xff08;七十三&#xff09;实战开发《在线课程学习系统》接口开发-- 回复留言&#xff0c;那么我们这次分享删除留言接口的开发…...

面试重点---快速排序

快排单趟 快速排序是我们面试中的重点&#xff0c;这个知识点也很抽象&#xff0c;需要我们很好的掌握&#xff0c;而且快速排序的代码也是非常重要&#xff0c;需要我们懂了还不行&#xff0c;必须要手撕代码&#xff0c;学的透彻。 在研究快速排序之前&#xff0c;我们首先…...

[MIT6.5840]MapReduce

MapReduce Lab 地址 https://pdos.csail.mit.edu/6.824/labs/lab-mr.html 论文地址 https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/mapreduce-osdi04.pdf 工作原理 简单来讲&#xff0c;MapReduce是一种分布式框架&#xff0c;可以用来处理…...

【系统架构设计师】计算机组成与体系结构 ⑯ ( 奇偶校验码 | CRC 循环冗余码 | 海明码 | 模 2 除法 )

文章目录 一、校验码1、校验码由来2、奇偶校验码3、CRC 循环冗余码 ( 重点考点 )4、海明码校验 ( 软考不经常考到 ) 二、CRC 循环冗余码 ( 重点考点 )1、模 2 除法概念2、模 2 除法步骤3、模 2 除法示例4、CRC 循环冗余码示例 15、CRC 循环冗余码示例 2 参考之前的博客 : 【计…...

springboot,service 层统一异常抛出时,throws Exception写在接口上还是实现类上

springboot,service 层统一异常抛出时&#xff0c;throws Exception写在实现接口上&#xff0c;不是直接写在实现类上...

深度学习高效性网络

为了减轻Transformer笨重的计算成本&#xff0c;一系列工作重点开发了高效的Vision Transformer&#xff0c;如Swin Transformer、PVT、Twins、CoAtNet和MobileViT。 1、字节TRT-ViT 兼具CNN的速度、Transformer精度的模型 TRT-ViT&#xff08;Transformer-based Vision Tra…...

PyQt ERROR:ModuleNotFoundError: No module named ‘matplotlib‘

Solution:打开cmd输入指令下载malplotlib pip install matplotlib...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...