spring—boot(整合redis)
整合redis
第一步导入数据源
<!--redis--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
RedisConfig(默认有RedisTemplate,下面为自定义)
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {// 配置redisTemplateRedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();redisTemplate.setConnectionFactory(redisConnectionFactory);RedisSerializer stringSerializer = new StringRedisSerializer();redisTemplate.setKeySerializer(stringSerializer); // key序列化redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // value序列化redisTemplate.setHashKeySerializer(stringSerializer); // Hash key序列化redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); // Hash value序列化redisTemplate.afterPropertiesSet();return redisTemplate;}
}
编写yml配置文件,对redis进行配置
spring:
redis:
host: 127.0.0.1
port: 6379
password: //最基本的配置到此即可
lettuce:
pool:
max-active: 8 #连接池最大连接数(使用负值表示没有限制)默认为8
max-wait: -1ms #连接池最大阻塞等待时间(使用负值表示没有限制)默认为-1
max-idle: 8 #连接池中的最大空闲连接 默认为8
min-idle: 5 # 连接池中的最小空闲连接 默认为0
创建服务层和实现类
public interface RedisService {
void setObj(String key, Object obj, long timeout);
void setObj(String key, Object obj);
Object getObj(String key);
}
package com.zking.zmall.service.impl;import com.zking.zmall.service.RedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; import java.io.Serializable; import java.util.concurrent.TimeUnit;// 定义一个Redis服务实现类,用于操作Redis数据 @Service("redisService") public class RedisServiceImpl implements RedisService {// 自动注入RedisTemplate,用于执行Redis操作@Autowiredprivate RedisTemplate redisTemplate;/*** 设置一个键值对对象到Redis中,并指定过期时间** @param key Redis中的键* @param obj 要保存的对象* @param timeout 对象的过期时间,单位:秒*/@Overridepublic void setObj(final String key, Object obj, long timeout) {// 获取操作Redis中值的操作对象ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();// 保存对象到Redis,并设置过期时间operations.set(key, obj, timeout, TimeUnit.SECONDS);}/*** 设置一个键值对对象到Redis中,使用默认过期时间** @param key Redis中的键* @param obj 要保存的对象*/@Overridepublic void setObj(String key, Object obj) {// 调用另一个setObj方法,并设置默认过期时间为15分钟setObj(key,obj,60*60*15);}/*** 从Redis中获取指定键的对象** @param key Redis中的键* @return 对应键的对象,如果不存在则返回null*/@Overridepublic Object getObj(final String key) {// 获取操作Redis中值的操作对象,并根据键获取对象Object o = redisTemplate.opsForValue().get(key);return o;} }
创建测试类测试
package com.zking.zmall;import com.zking.zmall.service.RedisService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class RedisTest {@Autowiredprivate RedisService redisService;@Testpublic void testRedisService(){redisService.setObj("name","zhangsan");}
}
测试结果
做了RedisConfig配置 ,后结果(序列化配置)

利用redis提高性能
案例二(结合redis):
package com.zking.zmall.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zking.zmall.pojo.SysUser;
import com.zking.zmall.service.RedisService;
import com.zking.zmall.service.SysUserService;
import com.zking.zmall.mapper.SysUserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.io.Serializable;
/**
* @author lenovo
* @description 针对表【sys_user(用户信息表)】的数据库操作Service实现
* @createDate 2024-11-03 15:24:57
*/
@Service
@Slf4j
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
implements SysUserService {// 注入RedisService用于缓存操作
@Autowired
private RedisService redisService;/**
* 根据用户ID获取用户信息,优先从缓存中获取,若缓存不存在则从数据库中获取并存入缓存
* @param id 用户ID
* @return 用户信息
*/
@Override
public SysUser getById(Serializable id){
// 尝试从缓存中获取用户信息
SysUser sysUser = (SysUser) redisService.getObj("zmall:sys:user:"+id);
if (sysUser==null){
// 若缓存中无数据,记录日志并从数据库中查询
log.info("从数据库查询");
sysUser = getBaseMapper().selectById(id);
// 将从数据库中查询到的数据存入缓存
redisService.setObj("zmall:sys:user:"+id,sysUser);
}
return sysUser;
}
}
提高性能:
减少数据库访问:通过先从Redis缓存中获取用户信息,减少了对数据库的直接访问次数,从而减轻了数据库的负载,提高了系统的响应速度。
快速响应:缓存中的数据访问速度远快于数据库,因此能够快速返回用户信息,提升用户体验。
如何切换连接池
简单了解
Jedis vs Lettuce
Jedis 和 Lettuce 是 Java 操作 Redis 的客户端。在 Spring Boot 1.x 版本默认使用的是 jedis ,而在 Spring Boot 2.x 版本默认使用的就是Lettuce。关于 Jedis 跟 Lettuce 的区别如下:
Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接 Lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问,应为StatefulRedisConnection是线程安全的,所以一个连接实例(StatefulRedisConnection)就可以满足多线程环境下的并发访问,当然这个也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。
Lettuce
上面有
jedis
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>//排除
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
yml
spring:
redis:
host: 127.0.0.1
port: 6379
password:
jedis:
pool:
max-active: 8 #连接池最大连接数(使用负值表示没有限制)默认为8
max-wait: -1ms #连接池最大阻塞等待时间(使用负值表示没有限制)默认为-1
max-idle: 8 #连接池中的最大空闲连接 默认为8
min-idle: 5 # 连接池中的最小空闲连接 默认为0
相关文章:
spring—boot(整合redis)
整合redis 第一步导入数据源 <!--redis--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> RedisConfig(默认有RedisTemplate&#…...
Python 包镜像源
阿里云、清华大学和豆瓣之外,还有许多其他的 Python 包镜像源。下面是更新后的代码,增加了更多常用的镜像源,如华为云、腾讯云等 import tkinter as tk from tkinter import messagebox import os# 定义 pip 配置文件路径 pip_config_file …...
Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行电源阻抗仿真分析操作指导(一)-无电容
Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行电源阻抗仿真分析操作指导(一)-无电容 Sigrity Power Ground Noise Simulation模式同样可以用来观测电源网络的自阻抗,以下图为例进行说明 2D 视图 3D view 本例要观测的是U17端口处的自阻抗࿰…...
Unity3D ASTC贴图压缩格式详解
一、技术详解 ASTC(Adaptive Scalable Texture Compression)是一种先进的纹理压缩格式,特别适用于OpenGL ES 3.0及更高版本。ASTC在2012年推出,自那以后已经成为游戏开发中重要的纹理压缩技术。它不仅在iOS设备上得到广泛应用&am…...
Docker的轻量级可视化工具Portainer
docker目录 1 Portainer官方链接2 是什么?3 下载安装4 跑通一次5 后记 1 Portainer官方链接 这里给出portainer的官方链接:https://www.portainer.io/ portainer安装的官方链接:https://docs.portainer.io/start/install-ce/server/docker/l…...
udp丢包问题
udp或者tcp丢包问题监测方式: netstat -su 问题分析: 1. 内存 2. cpu 3. 发送接收缓存 动画图解 socket 缓冲区的那些事儿-CSDN博客...
儿童安全座椅行业全面深入分析
儿童安全座椅就是一种专为不同体重(或年龄段)的儿童设计,将孩子束缚在安全座椅内,能有效提高儿童乘车安全的座椅。欧洲强制性执行标准ECE R44/03的定义是:能够固定到机动车辆上,带有ISOFIX接口、LATCH接口的…...
【笔记】扩散模型(九):Imagen 理论与实现
论文链接:Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding 非官方实现:lucidrains/imagen-pytorch Imagen 是 Google Research 的文生图工作,这个工作并没有沿用 Stable Diffusion 的架构,而是级…...
05 SQL炼金术:深入探索与实战优化
文章目录 SQL炼金术:深入探索与实战优化一、SQL解析与执行计划1.1 获取执行计划1.2 解读执行计划 二、统计信息与执行上下文2.1 收集统计信息2.2 执行上下文 三、SQL优化工具与实战3.1 SQL Profile3.2 Hint3.3 Plan Baselines3.4 实战优化示例 SQL炼金术:…...
Linux用lvm格式挂载磁盘
Linux用lvm格式挂载磁盘 本次目标是将磁盘/dev/sdd以lvm格式挂载到/backup目录作为备份盘来用 1、查看当前磁盘 [rootquentin ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 300G 0 disk ├─sda1 8:1 0 1G…...
Xshell,Shell的相关介绍与Linux中的权限问题
目录 XShell的介绍 Shell的运行原理 Linux当中的权限问题 Linux权限的概念 Linux权限管理 文件访问者的分类(人) 文件类型和访问权限(事物属性) 文件权限值的表示方法 文件访问权限的相关设置方法 如何改变文件的访问权限…...
考研要求掌握的C语言(选择排序)
选择排序的特点 每次进行一趟排序后,就确定一个数据的最终位置 选择排序的原理 就是假设你是最小(最大数据)的下标,然后和其他进行比较,若发现还有比你还小(或还大)的数据,就更新…...
达梦8数据库适配ORACLE的8个参数
目录 1、概述 1.1 概述 1.2 实验环境 2、参数简介 3、实验部分 3.1 参数BLANK_PAD_MODE 3.2 参数COMPATIBLE_MODE 3.3 参数ORDER_BY_NULLS_FLAG 3.4 参数DATETIME_FMT_MODE 3.5 参数PL_SQLCODE_COMPATIBLE 3.6 参数CALC_AS_DECIMAL 3.7 参数ENABLE_PL_SYNONYM 3.8…...
CSS实现文字渐变效果
效果图: 代码: h1 {font-size: 100px;color:linear-gradient(gold,deeppink);background-image:linear-gradient( -gold, deeppink); /*春意盎然*///背景被裁剪成文字的前景色。background-clip:text;/*兼容内核版本较低的浏览器*/-webkit-background-c…...
3. Redis的通用命令介绍
Redis作为一个高效的键值对存储系统,不仅支持多种数据结构,还提供了丰富的通用命令,这些命令适用于各种场景。本文将详细介绍Redis的常用通用命令,并结合具体应用场景,帮助你理解这些命令的功能与使用时机。 1. 键(key…...
[spark面试]spark与mapreduce的区别---在DAG方面
1、spark中的task是以线程实现的,而mapreduce中是以进程实现的。 进程的频繁启动和停止会增加资源的消耗。 2、spark中支持DAG,而mapreduce不支持DAG DAG的使用:为什么支持DAG会更加高效 1)、在DAG图中,会将一个job…...
tomcat启动失败和缓存清理办法
tomcat只在学校接触过并且是在window xp和win7的电脑上配置过(中途升级过电脑系统),只记得在windows系统上可以将其设置成服务管理。但我已毕业10多年了,学的知识早就不知道丢哪里了。这次为了修改一个07,08年的项目&a…...
【软件测试】需求的概念和常见模型(瀑布、螺旋、增量、迭代)
1. 什么是需求 在企业中,经常会听到:用户需求和软件需求 用户需求:没用经过合理的评估,通常就是一句话(开发一个五彩斑斓的黑)软件需求:开发人员和测试人员执行工作的依据 1.2 软件需求 在工…...
Python爬虫如何处理验证码与登录
Python爬虫如何处理验证码与登录 Python 爬虫在抓取需要登录的网站数据时,通常会遇到两个主要问题:登录验证和验证码处理。这些机制是网站用来防止自动化程序过度抓取数据的主要手段。本文将详细讲解如何使用 Python 处理登录与验证码,以便进…...
QT添加资源文件
QT添加资源文件 1.概述 这篇文章介绍为QT项目添加资源文件,例如项目中使用到的图片、音视频文件等等 2.添加资源文件 拷贝资源文件到项目中 在项目mainwindow.app文件上右键选择show in Finder 打开项目所在目录。 将图片文件夹复制到该目录中 创建资源文件结…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
