摘要:首先介绍如何在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

  在《使用批处理脚本在win10系统启动Redis 5.0.10》中,小编介绍了如何快速使用批处理文件启动Redis,需要的小伙伴赶快去围观吧!

  至此,安装、启动和测试完毕。主要就是按照参考文献[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依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>

  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=3200
# 连接池中的最大空闲连接,默认值也是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=210
# 可用连接的最大等待时间,单位毫秒,默认值为-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和简单使用的更多相关文章

  1. Spring Boot整合JPA、Redis和Swagger2

    好久没有总结了,最近也一直在学习.今天就把spring boot与其它技术的整合做个小总结,主要是jpa.redis和swagger2.公司里有用到这些,整合起来也很简单. 首先,新建一个Spring ...

  2. Spring Boot 整合Junit和redis

    14. Spring Boot整合-Junit 目标:在Spring Boot项目中使用Junit进行单元测试UserService的方法 分析: 添加启动器依赖spring-boot-starter ...

  3. SpringBoot入门系列(七)Spring Boot整合Redis缓存

    前面介绍了Spring Boot 中的整合Mybatis并实现增删改查,.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/ ...

  4. spring boot 整合 redis

    自己开发环境需要安装 redis 服务,百度一下很多,下面主要说明Springboot 集成 redis 讲解 我的版本 java8 + redis3.0 + springboot 1.5.9. Sp ...

  5. Spring Boot2 系列教程(二十九)Spring Boot 整合 Redis

    经过 Spring Boot 的整合封装与自动化配置,在 Spring Boot 中整合Redis 已经变得非常容易了,开发者只需要引入 Spring Data Redis 依赖,然后简单配下 red ...

  6. Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

    本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...

  7. spring boot整合redis多实例

    最近项目中遇到需要连接两个redis实例的情况,于是就在spring boot原先的基础上修改了一点. 首先,添加所需的依赖 <dependency> <groupId>org ...

  8. Spring Boot 整合 Redis 和 JavaMailSender 实现邮箱注册功能

    Spring Boot 整合 Redis 和 JavaMailSender 实现邮箱注册功能 开篇 现在的网站基本都有邮件注册功能,毕竟可以通过邮件定期的给用户发送一些 垃圾邮件 精选推荐

  9. Spring Boot 整合多点套路,少走点弯路~

    持续原创输出,点击上方蓝字关注我 个人原创博客+1,点击前往,查看更多 目录 前言 Spring Boot 版本 找到自动配置类 注意@Conditionalxxx注解 注意EnableConfigu ...

  10. Spring Boot初识(4)- Spring Boot整合JWT

    一.本文介绍 上篇文章讲到Spring Boot整合Swagger的时候其实我就在思考关于接口安全的问题了,在这篇文章了我整合了JWT用来保证接口的安全性.我会先简单介绍一下JWT然后在上篇文章的基础 ...

随机推荐

  1. 通用C++ Makefile

    点击查看代码 ///////////////////////////////////////////// CC = g++ CFLAGS=-Wall -O2 TARGET = main SRCS := ...

  2. 【Python-Json】自定义类输入json序列化、json的读取与写入

    AI 问答 Question json支持numpy数组么 Answer 不幸的是,标准的 JSON格式 不直接支持 NumPy 数组.JSON是一种用于存储和交换数据的文本格式,它有限的数据类型只包 ...

  3. 五大股票金融数据API接口推荐:从实时行情到历史数据全覆盖

    摘要:本文将介绍五大主流的股票金融数据API接口,涵盖实时行情.历史数据.技术指标等功能,帮助开发者快速构建金融数据应用.(本文由deepseek生成) 一.StockTV API 1. 核心优势 全 ...

  4. WEBGL 笔记

    目录 前言 h2 { text-align: center } 前言 WebGL 是一个在浏览器里使用的高效渲染二维和三维图形的 javascript API,于 2006 年起源,该技术基于 Ope ...

  5. RabbitMQ集群部署(一)——单机模式部署

    本文分享自天翼云开发者社区<RabbitMQ集群部署(一)--单机模式部署>,作者:芋泥麻薯 RabbitMQ是一种开源消息队列系统,是AMQP的标准实现,用erlang语言开发.Rabb ...

  6. pdf和图片的处理一记

    python是非常好用的一门语言,因为它有很多别人封装好底层逻辑的库,我们只需要用简单的函数调用或者经过并不复杂的初始化过程即可.最近要投递简历,所以在处理简历的时候遇到一个问题,就是生成了一份pdf ...

  7. springboot和jdk的版本对应关系

    spring-boot和jdk的版本对应关系 SpringBoot Versions JDK Versions 0.0 -1.1 6+(6 or higher) 1.2 - 1.5 6 - 7 2.0 ...

  8. mybatis-plus之配置安全

    1. 环境 SpringBoot 2.6.x 2. 介绍 MyBatis-Plus 从3.3.2版本开始提供了数据安全保护功能,MyBatis-Plus 支持通过加密配置来增强数据库的安全性. 3. ...

  9. centos7防火墙启动关闭

    1. 查看防火墙状态 systemctl status firewalld.service 2. 查看对外开放的端口号 firewall-cmd --list-ports 3. 添加端口号 firew ...

  10. MySQL 中 VARCHAR(100) 和 VARCHAR(10) 的区别是什么?

    在MySQL中,VARCHAR(100) 和 VARCHAR(10) 都是变长字符串类型,但它们的主要区别在于能够存储的最大字符长度不同: 1. 存储长度 VARCHAR(100):表示该字段可以存储 ...