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

news/2024/11/17 21:14:01/

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.ppmy.cn/news/1547806.html

相关文章

环境贴图选用方式

选择使用 RGBELoader 还是 TextureLoader 加载纹理&#xff0c;主要取决于你的纹理类型和用途。以下是两种加载器的使用场景&#xff1a; new RGBELoader()//设置纹理文件的路径.setPath(/textures/)//加载 HDR 环境贴图.load(royal_esplanade_1k.hdr, (texture) > {//Equir…

利用人工智能提升京东销售效率和用户体验的创新应用

摘要 随着技术的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;正深刻地改变着电商行业的未来。作为中国领先的电商平台之一&#xff0c;京东积极运用AI技术&#xff0c;从购物推荐、会员分类到商品定价&#xff0c;全面提升销售效率和用户体验。本文将深入探讨京东…

D3的竞品有哪些,D3的优势,D3和echarts的对比

D3 的竞品 ECharts: 简介: ECharts 是由百度公司开发的一款开源的 JavaScript 图表库&#xff0c;提供了丰富的图表类型和高度定制化的配置选项。特点: 易于使用&#xff0c;文档详尽&#xff0c;社区活跃&#xff0c;支持多种图表类型&#xff08;如折线图、柱状图、饼图、散点…

任务函数分析

一、页面存储栈 PageStack 1、头文件 #include "ui.h"#define MAX_DEPTH 6typedef long long int StackData_t;typedef struct {StackData_t Data[MAX_DEPTH];uint8_t Top_Point;}user_Stack_T;uint8_t user_Stack_Push(user_Stack_T* stack, StackData_t datain)…

ubontu--cuDNN安装

1. 下载 cuDNN https://developer.nvidia.com/cudnn 2. 拷贝到服务器/home/<username>文件夹下 解压缩到当前文件夹&#xff1a; tar -xvf cudnn-linux-x86_64-9.5.1.17_cuda11-archive.tar.xz复制头文件和库文件到cuda安装目录/usr/local/cuda/ sudo cp /home/usern…

R门 - rust第一课陈天 -内存知识学习笔记

内存 #mermaid-svg-1NFTUW33mcI2cBGB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1NFTUW33mcI2cBGB .error-icon{fill:#552222;}#mermaid-svg-1NFTUW33mcI2cBGB .error-text{fill:#552222;stroke:#552222;}#merm…

#渗透测试#SRC漏洞挖掘#蓝队基础之网络七层杀伤链03

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

每日一题:a替换函数

题目 给定一个字符串ss&#xff0c;编写一个函数&#xff0c;将字符串中的小写字母a替换为"%100"&#xff0c;并返回替换后的字符串。 例如&#xff0c;对于字符串"abcdwa"&#xff0c;所有a字符会被替换为"%100"&#xff0c;最终结果为%100bc…