当前位置: 首页 > news >正文

中间件:SpringBoot集成Redis

目录

 1.1 Redis简介

1.1.1 基本信息

1.1.2 数据结构

1.1.3 优势

1.2 Redis基本使用

1.2.1 Windows安装

1.2.2 配置

1.2.3 启动

1.2.4 连接

 ​​​​​​编辑

1.2.5 基本操作 

1.3 Jedis操作Redis

1.3.1 基本操作

1.3.2 连接池

1.4 SpringBoot操作Redis

1.4.1 基本操作


中间件是互联网公司支撑高并发业务的必备组件。中间件在分布式架构设计中发挥着至关重要的作用,它能够为应用程序提供各种服务,如数据访问、消息传递、事务处理等。在高并发场景下,中间件能够提升系统性能、保证数据一致性、实现异步通信等功能,是构建稳定、高效、可扩展的互联网业务系统的关键。因此,中间件是互联网公司不可或缺的技术支撑。


 1.1 Redis简介

Redis是一个高性能的key-value数据库,以下是对其的详细介绍:

1.1.1 基本信息

  • 全称:Remote Dictionary Server(远程字典服务器),简称Redis。
  • 开发语言:使用ANSI C语言编写。
  • 特点:支持网络、可基于内存亦可持久化、日志型、Key-Value数据库,提供多种语言的API。

1.1.2 数据结构

Redis支持丰富的数据类型,包括但不限于:

  • String(字符串):可以存储图片或者序列化的对象,值最大存储为512M。
  • Hash(哈希):值本身又是一个键值对(k-v)结构。
  • List(列表):用来存储多个有序的字符串,一个列表最多可以存储2^32-1个元素。
  • Set(集合):用来保存多个的字符串元素,但是不允许重复元素。
  • zset(有序集合):已排序的字符串集合,同时元素不能重复。

此外,Redis还提供了Geospatial、Hyperloglog、Bitmap等特殊的数据结构类型。

1.1.3 优势

  • 基于内存存储:Redis是基于内存存储实现的数据库,相对于数据存在磁盘的数据库(如MySQL),省去了磁盘I/O的消耗。
  • 数据结构丰富:Redis支持多种数据类型,使得它能够满足各种不同的应用场景需求。
  • 高性能:Redis的高性能使得它能够处理高并发的读写操作,保证系统的稳定性和响应速度。

1.2 Redis基本使用

1.2.1 Windows安装

        Redis安装地址

        Redis支持32位和64位,这个需要根据你的系统平台实际情况选择

1.2.2 配置

        安装后,再不配置Redis的情况下,Redis也可以直接启动,因为有一个默认配置文件。在官方发布的版本中一般叫做redis.conf,而在本教程中使用的是windows编译的版本,配置文件改名为叫做redis.windows.conf。这个文件中包含了Redis各方面的配置。

配置:

// 绑定的主机
bind 127.0.0.1// 端口号
port 6379// 请求密码,默认是注释的
requirepass 123456

1.2.3 启动

1.2.4 连接

注意:密码为刚刚配置的redis.windows.conf文件中的requirepass

1.2.5 基本操作 

        使用set、get命令进行数据的简单的读和写

1.3 Jedis操作Redis

Jedis是一个用于Java的Redis客户端库,它提供了一组API,使得Java开发者能够方便地与Redis数据库进行交互,执行Redis命令,并操作Redis数据结构。

1.3.1 基本操作

1.添加jedis依赖

        <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.1.5</version></dependency>

2.编写junit单元测试JedisTester 

public class JedisTester {private Jedis jedis;@BeforeEachpublic void setup(){jedis = new Jedis("127.0.0.1", 6379);// 密码jedis.auth("123456");}
}

 操作字符串

    @Testpublic void testString(){jedis.set("name", "lqw");String name = jedis.get("name");System.out.println(name);jedis.append("name","czkt");System.out.println(jedis.get("name"));jedis.del("name");System.out.println(jedis.get("name"));// 设置多个健值对jedis.mset("name","lqw","age","25","add","郴州");jedis.incr("age");System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get("add"));}

1.3.2 连接池

public final class RedisPool {// Redis服务器IPprivate static String ADDR = "127.0.0.1";// Redis的端口号private static int PORT = 6379;// 访问密码private static String AUTH = "luoqiangwu";// 可用连接实例的最大数目,默认值为8;// 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。private static int MAX_ACTIVE = 1024;// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。private static int MAX_IDLE = 200;// 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;private static int MAX_WAIT = 10000;private static int TIMEOUT = 10000;// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;private static boolean TEST_ON_BORROW = true;private static JedisPool jedisPool = null;/*** 初始化Redis连接池*/static {try {// 创建一个JedisPoolConfig实例JedisPoolConfig config = new JedisPoolConfig();// 设置连接池的最大总连接数config.setMaxTotal(MAX_ACTIVE);// 设置连接池的最大空闲连接数config.setMaxIdle( MAX_IDLE);// 设置连接池的最大等待时间config.setMaxWaitMillis(MAX_WAIT);// 设置是否在从池中获取连接前进行检验config.setTestOnBorrow(TEST_ON_BORROW);// 使用配置好的config对象创建Jedis连接池jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);} catch (Exception e) {// 打印异常堆栈跟踪e.printStackTrace();}}/*** 获取Jedis实例** @return*/public synchronized static Jedis getJedis(){try {if (jedisPool!= null){return jedisPool.getResource();}else {return null;}}catch (Exception e){e.printStackTrace();return null;}}/*** 释放Jedis资源** @param jedis*/public static void returnResource(final Jedis jedis){if (jedis!=null){jedisPool.returnResource(jedis);}}
}

工具类

public class RedisUtil {/*** 设置key的有效时间,单位是秒** @param key* @param exTime* @return*/public static Long expire(String key, int exTime) {// 创建 Jedis 对象,用于执行 Redis 操作Jedis jedis = null;// 定义一个变量 result,用来存储操作结果,默认为 nullLong result = null;try {// 从连接池中获取一个 Jedis 实例jedis = RedisPool.getJedis();// 设置 key 的过期时间为 exTime 秒result = jedis.expire(key, exTime);} catch (Exception e) {// 打印异常堆栈跟踪e.printStackTrace();} finally {// 释放 Redis 连接资源RedisPool.returnResource(jedis);}// 返回过期时间设置操作的结果return result;}// exTime单位是秒// 设置key-value并设置过期时间public static String setEx(String key, String value, int exTime) {Jedis jedis = null;String result = null;try {// 从Redis连接池中获取一个Jedis对象jedis = RedisPool.getJedis();result = jedis.setex(key, exTime, value);} catch (Exception e) {e.printStackTrace();return result;} finally {RedisPool.returnResource(jedis);}return result;}public static String set(String key, String value) {Jedis jedis = null;String result = null;try {jedis = RedisPool.getJedis();result = jedis.set(key, value);} catch (Exception e) {e.printStackTrace();return result;} finally {RedisPool.returnResource(jedis);}return result;}public static String get(String key) {Jedis jedis = null;String result = null;try {jedis = RedisPool.getJedis();result = jedis.get(key);} catch (Exception e) {e.printStackTrace();return result;} finally {RedisPool.returnResource(jedis);}return result;}public static Long del(String key) {Jedis jedis = null;Long result = null;try {jedis = RedisPool.getJedis();result = jedis.del(key);} catch (Exception e) {e.printStackTrace();return result;} finally {RedisPool.returnResource(jedis);}return result;}}

1.4 SpringBoot操作Redis

1.4.1 基本操作

1.添加依赖

        <!-- 引入SpringBoot对Redis的支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 引入SpringBoot对Redis的支持 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>

2.application.yml 配置相关信息

spring:data:#Redis配置redis:# Redis 数据库索引,默认为 0database: 0# Redis 服务器主机地址,默认为 localhosthost: localhost# Redis 服务器端口号,默认为 6379port: 6379# Redis 服务器密码password: luoqiangwu# Redis 的 lettuce 客户端连接池配置lettuce:pool:# 连接池最大活动连接数,默认为 8max-active: 8# 连接池最大阻塞等待时间,-1 表示无限等待max-wait: -1# 连接池中的最大空闲连接数,默认为 8max-idle: 8# 连接池中最小空闲连接数,默认为 0min-idle: 0

3.测试使用

@SpringBootTest
public class RedisTemplateTester {@Resourceprivate StringRedisTemplate stringRedisTemplate; // 操作字符串数据@Resourceprivate RedisTemplate redisTemplate; // 操作其他数据类型@Testpublic void testString() {stringRedisTemplate.opsForValue().set("name", "lqw");Assert.assertEquals("lqw", stringRedisTemplate.opsForValue().get("name"));}
}


http://www.mrgr.cn/news/48125.html

相关文章:

  • 数据结构-c++
  • YOLOv9-0.1部分代码阅读笔记-loss.py
  • java 对ElasticSearch数据库操作封装工具类(对你是否适用嘞)
  • 直流有刷电机多环控制(PID闭环死区和积分分离)
  • 《Java 与 OpenAI 协同:开启智能编程新范式》
  • 什么是 DevOps 自动化?
  • FLBOOK一款强大的电子产品图册制作工具
  • springboot健康管理平台-计算机毕业设计源码38430
  • 【unity框架开发9】序列化字典,场景,vector,color,Quaternion
  • 孤独相伴 - 结婚十七年
  • 从数据到洞察:ChatGPT如何革新Python数据分析流程
  • 跟着深度学习好书实践tensorflow神经网络
  • NRF24L01原子HAl库学习
  • cuda实现gemm
  • numpy学习
  • 上门服务系统|上门服务小程序|上门服务系统成品
  • 2024系统分析师---试题四:论数据分片技术及其应用
  • 如何找到I2c设备的地址以及读写寄存器
  • AI核身-金融场景凭证篡改检测Baseline实践
  • 1 线性系统性能分析方法1——时域分析法
  • AI-MO x Numina | 工具集成的数学推理
  • gradle build --offline idea怎么配置 打包命令使用gradle build --offline进行打包怎么操作
  • Redis的基础篇
  • makefile与gdb的使用
  • 如何挑选Axure元件库? Axure原型赏析
  • 【Java】类型转换与类型提升