热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot整合Jedis连接Redis和简单使用

首先介绍如何在Windows系统安装Redis环境,然后在SpringBoot项目中集成Redis,最后简单地做了一个使用Jedis操作redis连接

摘要:首先介绍如何在Windows系统安装Redis环境,然后在Spring Boot 项目中集成 Redis,最后简单地做了一个使用Jedis操作redis连接池的测试用例。


§准备Redis环境

??这里介绍如何在 windows 10 系统安装 Redis 5.0.10,希望对没有接触过Redis或刚接触Redis的小伙伴有些许帮助。如果已经安装Redis,请跳过本节。安装包下载地址: https://github.com/tporadowski/redis/releases

技术图片

??安装Redis。下载安装包后右键解压到硬盘某个目录下,我安装的是64位Redis,放在了目录C:\Program Files\redis中:

技术图片

??启动Redis。在命令行窗口进入redis目录后,执行如下命令开启服务:


redis-server.exe redis.windows.conf


??注意加上redis.windows.conf。这个窗口要保持开启,关闭时redis服务会自动关闭。

技术图片

??另外开启一个命令行窗口,进入redis目录下后执行如下命令:


redis-cli.exe -h 127.0.0.1 -p 6379


??IP地址127.0.0.1为redis服务所部署服务器的IP地址。因为是本机安装,故直接使用127.0.0.1启动。Redis默认端口是6379,可以通过编辑文件 redis.windows.conf 修改里面的端口号。

??如果redis设置了密码,可以添加参数-a指定密码,例如:


redis-cli.exe -h 127.0.0.1 -p 6379 -a yourPassword


??向Redis设置键值对:


set myKey abc


??取出键值对:


get myKey


技术图片

??至此,安装、启动和测试完毕。主要就是按照参考文献[1]操作一遍,如果需要在Linux环境安装,就去参考文献[1]瞧瞧吧!

??Redis服务器连接密码默认为空,可以通过在控制台执行命令 auth yourPassword设置密码,其中,yourPassword为你自己的密码,自行更改,设置成功时Redis返回字符串 OK。


§Spring Boot项目集成Redis

??所用软件开发环境如下:

??? java version 13.0.1
??? IntelliJ IDEA 2019.3.2 (Ultimate Edition)
??? Spring Boot 2.3.0.RELEASE
???Redis 5.0.10

??添加Redis依赖:


org.springframework.boot
spring-boot-starter-redis


redis.clients
jedis
3.1.0

??Jedis为我们提供了多种操作Redis的方式:单机单连接方式、单机连接池方式和多机分布式+连接池方式。这里演示使用单个Redis实例的单机连接池方式。在application.properties中新增Jedis的相关配置:

spring.redis.host=127.0.0.1
spring.redis.database=0
spring.redis.port=6379
# 我的redis没有设置密码,故缺省密码
spring.redis.password=
# 连接超时时间 单位 ms(毫秒)
spring.redis.timeout=10
# 连接池中的最大空闲连接,默认值也是8
spring.redis.jedis.pool.max-idle=10
#连接池中的最小空闲连接,默认值也是0
spring.redis.jedis.pool.min-idle=3
# 连接池最大jedis实例个数,如果赋值为-1,则表示不限制;pool如果已经全部分配,则状态变为exhausted(耗尽)。
spring.redis.jedis.pool.max-active=200
# 可用连接的最大等待时间,单位毫秒,默认值为-1,表示永不超时。如果超时,则直接抛出JedisConnectionException
spring.redis.jedis.pool.max-wait=10000

??创建Jedis连接池配置类JedisPoolFactory:

package com.eg.wiener.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
@Configuration
public class JedisPoolFactory {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
@Value("${spring.redis.jedis.pool.max-wait}")
private long maxWaitMillis;
/**
* 初始化Redis连接池
*/
@Bean
public JedisPool generateJedisPoolFactory() {
JedisPoolConfig poolCOnfig= new JedisPoolConfig();
poolConfig.setMaxTotal(maxActive);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setMaxWaitMillis(maxWaitMillis);
// 连接耗尽时是否阻塞, false报异常,true阻塞直到超时, 默认true
poolConfig.setBlockWhenExhausted(Boolean.TRUE);
JedisPool jedisPool = new JedisPool(poolConfig, host, port, timeout);
// 若设置了Redis密码,请调用如下构造函数
// JedisPool jedisPool = new JedisPool(poolConfig, host, port, timeout, password);
return jedisPool;
}
}

??若设置了Redis密码,请调用构造函数 new JedisPool(poolConfig, host, port, timeout, password)。


§案例分析

??创建Redis工具类JedisUtil,由于是测试系统是否成功整合redis,所以在工具类中仅仅添加几个方法:

package com.eg.wiener.utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
@Component
public class JedisUtil {
@Autowired
private JedisPool jedisPool;
/**
* 存储字符串键值对,永久有效
* @param key
* @param value
* @return
* @author hw
* @date 2018年12月14日
*/
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
try {
return jedis.set(key, value);
} catch (Exception e) {
return "-1";
} finally {
// 业务操作完成,将连接归还连接池
jedisPool.returnResource(jedis);
}
}
/**
* 根据传入key获取指定Value
* @param key
* @return
* @author hw
* @date 2018年12月14日
*/
public String get(String key) {
Jedis jedis = jedisPool.getResource();
try {
return jedis.get(key);
} catch (Exception e) {
return "-1";
} finally {
jedis.close();
}
}
/**
* 删除字符串键值对
* @param key
* @return
* @author hw
* @date 2018年12月14日
*/
public Long del(String key) {
Jedis jedis = jedisPool.getResource();
try {
return jedis.del(key);
} catch (Exception e) {
return -1L;
} finally {
jedis.close();
}
}
/**
* 校验Key值是否存在
*/
public Boolean exists(String key) {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
return jedis.exists(key);
} catch (Exception e) {
return false;
} finally {
// 归还连接
jedis.close();
}
}
}

??这里通过连接池来获取Jedis实例。由于连接池资源有限,所以,业务操作结束后要及时把Jedis实例还给连接池。在UserController类中创建测试用例,一个负责向redis写数据,一个负责读,代码如下:

/**
* @author Wiener
*/
@RestController
@RequestMapping("/user")
public class UserController {
private static Logger logger = LoggerFactory.getLogger(UserController.class);

@Autowired
private JedisUtil jedisUtil;

// http://localhost:8087/wiener/user/testRedisSave?id=1090330
@RequestMapping("/testRedisSave")
public Object testRedisSave(Long id) {
jedisUtil.del("userId:"+id);
jedisUtil.set("userId:"+id, "测试地址是 " + UUID.randomUUID().toString());
return null;
}
// http://localhost:8087/wiener/user/testRedisGet?id=1090330
@RequestMapping("/testRedisGet")
public String testRedisGet(Long id) {
String myStr= jedisUtil.get("userId:"+ id);
if(!StringUtils.isEmpty(myStr)) {
return myStr;
}
return null;
}
}

??在浏览器请求写入数据的API后,调用读取testRedisGet函数,执行结果如下图所示,说明配置JedisPool成功:

技术图片


§小结

??关于Spring Boot项目集成Jedis操作Redis连接池就先介绍到这里,如果您觉得本文对您有帮助,请点一下“推荐”按钮,您的【推荐】将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。


§Reference


Spring Boot 整合Jedis连接Redis和简单使用



推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有