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

spring boot 整合redis教程

添加Redis依赖

pom.xml文件中添加Spring Boot的Redis starter依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置Redis连接

application.propertiesapplication.yml中配置Redis连接信息:

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=yourpassword
spring.redis.database=0

创建Redis配置类

自定义RedisTemplate配置,优化序列化方式:

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 使用Jackson2JsonRedisSerializer序列化valueJackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);ObjectMapper mapper = new ObjectMapper();mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);mapper.activateDefaultTyping(mapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);serializer.setObjectMapper(mapper);// 使用StringRedisSerializer序列化keytemplate.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(serializer);template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(serializer);template.afterPropertiesSet();return template;}
}

封装Redis工具类

创建常用Redis操作的封装类:

@Component
public class RedisUtil {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void set(String key, Object value) {redisTemplate.opsForValue().set(key, value);}public Object get(String key) {return redisTemplate.opsForValue().get(key);}public void expire(String key, long timeout) {redisTemplate.expire(key, timeout, TimeUnit.SECONDS);}public void delete(String key) {redisTemplate.delete(key);}
}

使用Redis缓存

在Service层使用Spring Cache注解实现缓存:

@Service
public class UserServiceImpl implements UserService {@Cacheable(value = "user", key = "#id")public User getUserById(Long id) {// 数据库查询逻辑return userRepository.findById(id).orElse(null);}@CachePut(value = "user", key = "#user.id")public User updateUser(User user) {// 更新数据库逻辑return userRepository.save(user);}@CacheEvict(value = "user", key = "#id")public void deleteUser(Long id) {// 删除数据库记录userRepository.deleteById(id);}
}

测试Redis功能

编写测试类验证Redis功能:

@SpringBootTest
public class RedisTest {@Autowiredprivate RedisUtil redisUtil;@Testpublic void testRedis() {String key = "testKey";String value = "testValue";redisUtil.set(key, value);assertEquals(value, redisUtil.get(key));redisUtil.delete(key);assertNull(redisUtil.get(key));}
}

分布式锁实现

使用Redis实现简单的分布式锁:

public boolean tryLock(String lockKey, long expireTime) {return redisTemplate.opsForValue().setIfAbsent(lockKey, "locked", expireTime, TimeUnit.SECONDS);
}public void unlock(String lockKey) {redisTemplate.delete(lockKey);
}

http://www.lryc.cn/news/617447.html

相关文章:

  • 带简易后台管理的米表系统 域名出售系统 自适应页面
  • 帝国理工学院团队研发:Missense3D-PTMdb—— 解析遗传变异与翻译后修饰的交互式工具
  • 计算机网络---交换机
  • 套接字技术、视频加载技术、断点续传技术
  • Horse3D引擎研发笔记(四):在QtOpenGL下仿three.js,封装EBO绘制四边形
  • 2025 年国内可用 Docker 镜像加速器地址
  • Rust面试题及详细答案120道(19-26)-- 所有权与借用
  • 《基于Pytorch实现的声音分类 :网页解读》
  • YOLOv8 训练报错:PyTorch 2.6+ 模型加载兼容性问题解决
  • 【JavaEE】(12) 创建一个 Sring Boot 项目
  • 第二届机电一体化、机器人与控制系统国际会议(MRCS 2025)
  • 34-Hive SQL DML语法之查询数据-3
  • 2025世界机器人大会,多形态机器人开启商业化落地浪潮
  • [4.2-2] NCCL新版本的register如何实现的?
  • GAI 与 Tesla 机器人的具体联动机制
  • 记录一下通过STC的ISP软件修改stc32的EEPROM值大小
  • VoxCraft-生数科技推出的免费3D模型AI生成工具
  • uni-app app端安卓和ios如何申请麦克风权限,唤起提醒弹框
  • 设计模式笔记_结构型_组合模式
  • 5G NTN 卫星测试产品
  • 5G NR 非地面网络 (NTN) 5G、太空和统一网络
  • 用Python实现Excel转PDF并去除Spire.XLS水印
  • 深度剖析 Linux 信号:从基础概念到高级应用,全面解析其在进程管理与系统交互中的核心作用与底层运行机制
  • 电力仿真系统:技术革新与市场格局的深度解析
  • 【CV 目标检测】①——目标检测概述
  • 【Oracle】如何使用DBCA工具删除数据库?
  • 低延迟RTSP|RTMP视频链路在AI驱动无人机与机器人操控中的架构实践与性能优化
  • 排序与查找,简略版
  • 简单清晰的讲解一下RNN神经网络
  • 常用设计模式系列(十九)- 状态模式