springboo 整合 redis

news2024/9/20 12:38:46

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)

@Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置value的序列化方式json
        redisTemplate.setValueSerializer(redisSerializer());
        //设置key序列化方式String
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置hash key序列化方式String
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        //设置hash value序列化json
        redisTemplate.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

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

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

相关文章

泵浦光与斯托克斯光相遇耦合效应的matlab模拟与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1拉曼散射基础 4.2非线性耦合方程 5.完整程序 1.程序功能描述 泵浦光与斯托克斯光相遇耦合效应的matlab模拟与仿真. 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 &#xff0…

面试场景题系列--(2)短 URL 生成器设计:百亿短 URL 怎样做到无冲突?--xunznux

文章目录 面试场景题&#xff1a;短 URL 生成器设计&#xff1a;百亿短 URL 怎样做到无冲突&#xff1f;1. 需求分析2. 短链接生成算法2.1 自增法2.2 散列函数法2.3 预生成法 3. 部署模型3.1 其他部署方案 4. 设计4.1 重定向响应码4.2 短 URL 预生成文件及预加载4.3 用户自定义…

redis 基础命令

1.数据库命令 select 库名&#xff1b;切换库 flushdb 清空库 flushall 清空所有库 redis支持的数据类型有很多&#xff0c;使用最频繁的有String 字符串类型&#xff0c;List队列&#xff0c;Hash&#xff0c;Zset有序集合&#xff0c;Set集合。 2.字符串类型命令 表示k…

[IMX6ULL]移植NXP Linux Kernel 5.15

移植NXP Linux Kernel 5.15 2024-7-7 hongxi.zhu 1. 下载NXP Linux Kernel 5.15 仓库[nxp-imx/linux-imx] git clone -b lf-5.15.y https://github.com/nxp-imx/linux-imx.git 2. 编译NXP Linux Kernel 5.15 make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- distclean make…

细说MCU用DMA改变DAC输出信号频率和改善输出波形质量的方法

目录 一、参考硬件 二、修改定时器参数改变输出波形频率 三、改善波形质量 四、代码修改 五、查看结果 一、参考硬件 本项目的软件硬件工程参考作者的其他文章&#xff1a;细说MCU用DMA实现DAC输出的方法-CSDN博客 https://wenchm.blog.csdn.net/article/details/14065…

2024暑假友谊赛 2

Problem - 1150B - Codeforces 小C是重度强迫症晚期患者&#xff0c;如果某些图形无法按照他的想法排列&#xff0c;那么他就会迎来他的末日。某天小C来到了心心念念的女神家里&#xff08;绝对不可能是女装大佬&#xff0c;绝对不可能&#xff09;&#xff0c;他发现地砖有两…

醒醒,别睡了...讲《数据分析pandas库》了—/—<2>

废话不多说&#xff0c;直接开讲! 一、 1、pandas变量类型的转换 Pandas 支持的数据类型 &#xff1a; 1、float&#xff1a;浮点型 2、int&#xff1a;整型 3、string&#xff1a;字符串类型 4、bool&#xff1a;布尔类型 5、datetime64[nsr]&#xff1a; 示精确到纳秒的日期…

跨棒距、公法线和齿厚对应关系分析

前面有一期讨论了下滚齿径向进刀量和齿厚的对应关系&#xff1a;《》&#xff0c;有小伙伴又问了&#xff0c;加工时是用跨棒距或者公法线去控制齿厚的&#xff0c;直接给齿厚是无法测量的&#xff0c;如果测一个值再去计算&#xff0c;有点麻烦&#xff0c;有没有他们之间的对…

【操作系统】解析线程安全中的 Synchronized 关键字

目录 synchronized一、互斥性二、可重入性三、synchronized的使用 synchronized synchronized作为确保多线程安全的重要关键字 接下来我们来学习它的特性&#xff1a; 互斥性可重入性 一、互斥性 synchronized会起到互斥效果,某个线程执行到某个对象的synchronized中时,其他…

【详谈】HashMAP深度剖析,全面消化吸收

【万字长文】 还没写完!!还没写完!!!还在码字中,只是先放上,防止又写着没了,自己文件没了… 最近,可以说的上自己博客停更大约有一两个月了,一直在忙于公司中的项目和业务,典型的牛马看了都流泪 今天,自己刚刚优化了一个查询耗时的BUG,在这里我就引入的hashmap作为我存储队列的…

Linux 某进程 CPU 高问题,用 Shell 脚本发现处理

发现高CPU使用率进程 首先&#xff0c;我们需要编写一个Shell脚本来发现系统中CPU使用率最高的进程。以下是一个简单的脚本示例&#xff1a; #!/bin/bash# 设置 CPU 使用率的阈值,一般设置90&#xff1b;这里是demo&#xff0c;所以用30 CPU_THRESHOLD30# 获取占用 CPU 最高的…

学习笔记 韩顺平 零基础30天学会Java(2024.7.24)

P416 匿名内部类本质 IA tiger new IA(){//IA是一个接口 //重写 System.out.println(“老虎叫唤。。。”); } P417 匿名内部类使用 基于类的匿名内部类 Father father new father(“jack”){};//不带大括号运行类型是Father&#xff0c;带大括号就是匿名内部类,相当于是匿名…

【深度学习入门】安装conda/miniconda、所需包类、CUDA与conda/Miniconda间的关系

深度学习入门 须知 本教程跟随李沐老师课程随笔&#xff0c;课程链接点击此处。 CUDA和Anaconda的关系 CUDA Toolkit是由Nvidia官方提供的完整工具包&#xff0c;其中提供了Nvidia驱动程序、开发CUDA程序相关的开发工具包等。 Anaconda在安装Pytorch等会用到的CUDA的框架时…

操作系统(三)中断----软中断

软中断与硬中断很像 软中断是纯软件实现的&#xff0c;宏观效果看上去和中断差不多的一种方式。 什么叫宏观效果呢&#xff1f;意思就是说&#xff0c;中断在宏观层面看来&#xff0c;就是打断当前正在运行的程序&#xff0c;转而去执行中断处理程序&#xff0c;执行完之后再返…

【Python机器学习】使用Matplotlib注解绘制树形图

通过数据集可以创建树&#xff0c;但是字典的表示形式非常不易于理解&#xff0c;而且直接绘制图形也比较困难。但是通过Matplotlib库可以绘制树形图。 决策树的主要优点就是直观、易于理解&#xff0c;如果不能将其直观的显示出来&#xff0c;就无法发挥其优势。 Matplotlib…

y=λsin(πx)分岔的研究

使用如下的迭代格式&#xff0c;λ为可变的参数 用如下代码对收敛的λ的值进行探究&#xff0c;这里的r代表λ %通过观察是否凝聚在同一个点来判断是否收敛 clear;clf; axis([0,4,0,4]); grid; hold on for r0:0.3:3.9x[0.1];for i2:150x(i)r*sin(pi*x(i-1));endpause(0.5);fo…

心动小站Ⅶ--人工智能的虚假承诺

前言 1770 年&#xff0c;匈牙利作家兼发明家 Wolfgang von Kempelen 推出了一款名为“土耳其机器人”的自动国际象棋机器。该机器在欧洲各地展示了其自动化国际象棋大师技能&#xff0c;在与人类对手的比赛中频频获胜。据说它甚至击败了拿破仑和本杰明富兰克林等著名人物。土…

Prometheus之数据类型和函数

前言&#xff1a; 在了解Prometheus数据类型前&#xff0c;我们先了解下面几个统计学名词概念&#xff1a; 平均数&#xff08;Mean&#xff09;&#xff1a; 平均数是所有数据加起来除以数据个数得到的结果。它表示数据的中心趋势。 最大值&#xff08;Maximum&#xff09…

Hadoop集群安装配置

文章目录 Hadoop部署配置集群配置历史服务器配置日志的聚集分发Hadoop群起集群Hadoop群起脚本 准备工作&#xff1a;需要3台虚拟机&#xff0c;每台虚拟机搭建好JDK并配置环境变量 Hadoop部署 1&#xff09;集群部署规划 注意&#xff1a;NameNode和SecondaryNameNode不要安…

Vue中el的两种写法

大家好我是前端寄术区博主PleaSure乐事。今天了解到了Vue当中有关el的两种写法&#xff0c;记录下来与大家分享&#xff0c;希望对大家有所帮助。 方法一 解释 第一种方法我们直接用new创建并初始化一个新的 Vue 实例&#xff0c;并定义了 Vue 实例的数据对象&#xff0c;在给…