IntelliJ+SpringBoot项目实战(七)--在SpringBoot中整合Redis

Redis是项目开发中必不可少的缓存工具。所以在SpringBoot项目中必须整合Redis。下面是Redis整合的步骤:

(1)因为目前使用openjweb-sys作为SpringBoot的启动应用,所以在openjweb-sys模块的application-dev.yml中增加配置参数:

spring:

redis:database: 0host: 127.0.0.1port: 63899password: 123456timeout: 1800000jedis:pool:enabled: truemax-active: 8max-idle: 8max-wait: -1msmin-idle: 0lettuce:pool:#max-wait: -1#max-idle: 5min-idle: 0max-active: 20

注意因为yml中已经有了spring顶级标签,增加配置的时候注意将上面spring下的参数配置到spring标签下面,注意要缩进一个空格。上面的相关参数仅是示例参数,生产环境中需要进行调整。

(2)因为项目结构中有独立的redis-openjweb-starter模块,在openjweb-sys中引用这个模块需要加入依赖,所以在openjweb-sys的pom.xml中增加依赖设置:

       

<dependency><groupId>org.openjweb</groupId><artifactId>redis-openjweb-starter</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope>
</dependency>

(3)在redis-openjweb-starter的pom.xml中需要引入redis的依赖和jackson依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.1</version>
</dependency>

(4)在redis-openjweb-starter的org.openjweb.redis.starter.config包下创建Redis配置类

RedisConfig:
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();//创建RedisTemplateredisTemplate.setConnectionFactory(connectionFactory);// // 配置连接工厂,这里还可以自定义链接工厂//配置序列化规则StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();//使用StringRedisSerializer来序列化和反序列化redis的key值redisTemplate.setKeySerializer(stringRedisSerializer);redisTemplate.setHashKeySerializer(stringRedisSerializer);//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)Jackson2JsonRedisSerializer<?> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);ObjectMapper objectMapper = new ObjectMapper();// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和publicobjectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);// 值采用json序列化redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// 设置hash key 和value序列化模式redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;} 

        //为节省篇幅,可从本例的github中下载完成代码,也可以参考另外技术大牛的博客。

}

另外在org.openjweb.redis.starter.util下创建一个工具类RedisUtil,此工具类封装各种常规的redis的get、set操作(详见Github中的项目示例 )。

(5) 接下来在openjweb-sys模块中创建测试API类(RedisDemoApi):

package org.openjweb.sys.api;import lombok.extern.slf4j.Slf4j;
import org.openjweb.redis.starter.util.RedisUtil;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;//测试:http://localhost:8001/demo/api/redis/set?key=name&value=abao
//测试:http://localhost:8001/api/redis/get?key=name
//测试:http://localhost:8001/api/redis/get2?key=name@Slf4j
@RequestMapping("/demo/api/redis")
@RestController
public class RedisDemoApi {@Resourceprivate RedisUtil redisUtil;@Resourceprivate StringRedisTemplate stringRedisTemplate;@Resourceprivate RedisTemplate redisTemplate;@RequestMapping("set")public boolean redisset(String key, String value){log.info("传入的key和value:"+key+"--"+value);//默认秒数//return redisUtil.set(key,value);//指定秒数boolean bool = redisUtil.set(key,value,60);//设置1分钟有效时长return bool;}@RequestMapping("get")public Object redisget(String key){log.info("传入的key:");log.info(key);log.info(String.valueOf(redisUtil.get(key)));return redisUtil.get(key);}@RequestMapping("get2")public Object redisget2(String key){String value = stringRedisTemplate.opsForValue().get(key);log.info("使用stringRedisTemplate获取:");log.info(value);//这个返回带引号的value = String.valueOf(redisTemplate.opsForValue().get(key));log.info("使用redisTemplate获取:");log.info(value);//这个返回带引号的return value;}@RequestMapping("expire")public boolean expire(String key,long ExpireTime){return redisUtil.expire(key,ExpireTime);}}

其中http://localhost:8001/demo/api/redis/set?key=name&value=abao  设置redis key为name,值为abao

http://localhost:8001/api/redis/get?key=name 是根据key为name获取key的值为abao

这两个接口的方法都是使用的RedisUtil封装的方法,如果不只用RedisUtil封装的方法,也可以直接引用RedisTemplate方法,在上面的代码中,使用@Resource注入了RedisTemplate和StringRedisTemplate:

@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private RedisTemplate redisTemplate;

然后在 redisget2 方法中分别使用了

String value = stringRedisTemplate.opsForValue().get(key);
value = String.valueOf(redisTemplate.opsForValue().get(key));

两种方法获取key的值。

测试链接:

http://localhost:8001/api/redis/get2?key=name

注意:如果项目应用到生产环境,请删掉或注释掉掉类顶部的

@RequestMapping("/demo/api/redis") 注解。

项目完整代码见:GitHub - openjweb/cloud at masterOpenJWeb is a java bases low code platform. Contribute to openjweb/cloud development by creating an account on GitHub.icon-default.png?t=O83Ahttps://github.com/openjweb/cloud/tree/master

       

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

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

相关文章

【UGUI】Unity 游戏开发:背包系统初始化道具教程

在游戏开发中&#xff0c;背包系统是一个非常常见的功能模块。它允许玩家收集、管理和使用各种道具。今天&#xff0c;我们将通过一个简单的示例来学习如何在 Unity 中初始化一个背包系统。我们将使用 Unity 2021.3.7 版本&#xff0c;并结合 C# 脚本来实现这一功能。 1. 场景…

AI工业大模型报告:体系架构、关键技术与典型应用

研究意义 随着新一代人工智能的发展, 大模型&#xff08;如 GPT-4o 等&#xff09;凭借大规模训练数据、网络参数和算 力涌现出强大的生成能力、泛化能力和自然交互能力, 展现出改变工业世界的巨大潜力. 尽管大模型 已在自然语言等多个领域取得突破性进展, 但其在工业应用中的…

电子电气架构 --- 电动汽车 800V 高压系统

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

shell编程之变量与引用

目录 深入认识变量什么是变量变量的名称变量数据类型变量的定义自定义变量环境变量位置变量 变量赋值和作用域赋值&#xff1a;变量名变量值read从键盘读入变量值变量和引号变量的作用域变量的运算 深入认识变量 什么是变量 变量是在程序中保存用户数据的一段内存存储空间&am…

UE5 材质里面画圆锯齿严重的问题

直接这么画圆会带来锯齿&#xff0c;我们对锯齿位置进行模糊 可以用smoothstep&#xff0c;做值的平滑过渡&#xff08;虽然不是模糊&#xff0c;但是类似&#xff09;

鸿蒙HarmonyOS开发:一次开发,多端部署(工程级)三层工程架构

文章目录 一、工程创建1、先创建出最基本的项目工程。2、新建common、features、 products 目录 二、工程结构三、依赖关系1、oh-package.json52、配置ohpm包依赖 四、引用ohpm包中的代码1、定义共享资源2、在common模块index文件中导出3、在phone模块oh-package.json5文件中引…

【笔记】关于git和GitHub和git bash

如何推送更新的代码到github仓库 如何在此项目已经提交在别的远程仓库的基础上更改远程仓库地址&#xff08;也就是换一个远程仓库提交&#xff09; 如何删除github中的一个文件 第二版 删除github上的一个仓库或者仓库里面的某个文件_github仓库删除一个文件好麻烦-CSDN博客 …

20241112-Pycharm使用托管的Anaconda的Jupyter Notebook

Pycharm使用托管的Anaconda的Jupyter Notebook 要求 不要每次使用 Pycharm 运行 Jupyter 文件时都要手动打开 Anaconda 的 Jupyter Notebook 正文 pycharm中配置好会自动安装的&#xff0c;有的要自己配置 Pycharm中配置 文件 ——> 设置 ——> 语言和框架……&am…

集合的介绍与比较器的应用

1.集合&#xff1a; 是一种容器&#xff0c;一种变量类型&#xff0c;跟数组很像 数组的缺点&#xff1a; A.数组的空间长度固定&#xff0c;一旦确定不可以更改。多了浪费&#xff0c;少了报错。 B.使用数组 操作数据的时候&#xff0c;【删除&#xff0c;增加】效率比较低。…

动态规划---解决多段图问题

ok 小伙伴们&#xff0c;我现在有点小小的红温&#xff0c;有点毛躁。 怎么解决多段图问题呢&#xff1f;求取最短路径有多种方法可取。 家人们&#xff0c;毫无思绪可言……………………………… 要实现动态规划&#xff0c;条件&#xff1a;子问题重叠度较高&#xff0c;并…

基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

cMake编译github中源码

https://github.com/gflags/gflags 记录一下防止遗忘&#xff0c;本次编译为gflags库 1.下载CMake-gui https://cmake.org/ 安装时&#xff0c;选择自动创建环境变量&#xff0c;安装完输入&#xff0c;查看是否安装成功 cmake --version 2.下载源码&#xff0c;解压打开文…

web——upload-labs——第四关——.htaccess文件绕过

先尝试直接上传一个普通的一句话木马 显示此文件不允许上传&#xff0c;这道题并没有提示不允许上传什么后缀的文件&#xff0c;经过尝试&#xff0c;基本上所有后缀能够被解析为php语句执行的文件都不能成功上传。试试正常的图片能不能上传&#xff1a; 我们再来试试图片马能不…

Gitcode文件历史记录查看和还原

文件历史记录 文件历史记录用于记录代码文件的更改历史&#xff0c;它允许用户查看文件的不同版本&#xff0c;了解每个版本的修改内容、作者和提交消息。这对于跟踪文件演进、恢复错误更改、审查代码以及了解项目进展都非常有用。 文件历史记录功能提供了以下核心功能&#…

前端神经网络入门(二):如何利用 WebGPU 进行数值计算,实现大规模数据的计算加速?- 边读边按下F12跑代码吧

在 Web 应用开发中&#xff0c;JavaScript 是前端开发者们最常用的语言。然而&#xff0c;当面对大规模数据处理和计算任务时&#xff0c;JavaScript 在浏览器中的执行往往会受到诸多性能瓶颈的限制。幸运的是&#xff0c;WebGPU 的出现&#xff0c;为我们提供了在前端实现高性…

新手教学系列——善用 VSCode 工作区,让开发更高效

引言 作为一名开发者,你是否曾经在项目中频繁地切换不同文件夹,打开无数个 VSCode 窗口?特别是当你同时参与多个项目或者处理多个模块时,这种情况更是家常便饭。很快,你的任务栏上挤满了 VSCode 的小图标,切换起来手忙脚乱,工作效率直线下降。这时候,你可能会问:“有…

Oracle故障处理:ora-12514 与 ora-28547

目录 项目场景 问题分析 问题总结 项目场景 现场同事求助说&#xff1a;有个刚刚部署在Windows上的Oracle11gR2数据库&#xff08;单机单实例&#xff09;&#xff0c;使用PLSQL工具连接不上。帮忙查看后&#xff0c;发现未装Oracle client&#xff0c;指导其安装完Oracle客…

【miniMax开放平台-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

26-ES集群搭建、身份认证配置

虚机搭建 添加es用户 elasticsearch 默认不允许root用户启动&#xff0c;所以需要创建es用户 useradd elasticsearch passwd elasticsearch 解压安装包 #解压es tar -xvzf elasticsearch-7.14.2-linux-x86_64.tar.gz 将文件夹赋予es用户权限 #将文件夹赋予es用户权限 sud…

OpenHarmony的公共事件

OpenHarmony的公共事件 公共事件简介 CES&#xff08;Common Event Service&#xff0c;公共事件服务&#xff09;为应用程序提供订阅、发布、退订公共事件的能力。 公共事件分类 公共事件从系统角度可分为&#xff1a;系统公共事件和自定义公共事件。 系统公共事件&#…