百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

SpringBoot整合Redis(springboot整合redis配置连接池)

mhr18 2024-11-01 12:21 21 浏览 0 评论

1. 概述

随着互联网技术的发展,对技术要求也越来越高,所以在当期情况下项目的开发中对数据访问的效率也有了很高的要求,所以在项目开发中缓存技术使用的也越来越多,因为它可以极大的提高系统的访问速度,关于缓存的框架也种类繁多,比如 Redis、Ehchahe、JBoss Cache、Voldemort、Cacheonix 等等,今天主要介绍的是使用现在非常流行的 NoSQL 数据库(Redis)来实现我们的缓存需求。

2. SpringBoot 简介

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

主要特点:

1. 创建独立的 Spring 应用程序

2. 嵌入的 Tomcat,无需部署 WAR 文件

3. 简化 Maven 配置

4. 自动配置 Spring

5. 提供生产就绪型功能,如指标,健康检查和外部配置

6. 绝对没有代码生成和对 XML 没有要求配置

3. 简介

Redis 是一个开源(BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件,Redis 的优势包括它的速度、支持丰富的数据类型、操作原子

性,以及它的通用性。

4. 下面就是 SpringBoot 整合 Redis 具体实现步骤

4.1 在 Maven 的 pom.xml文件中加入Redis 包

<!—配置 redis 依赖-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-redis</artifactId>

<version>${boot.version}</version>

</dependency>

4.2 SpringBoot 配置文件中配置 Redis 连接

spring:

application:

name: spring-boot-redis redis:
host: 192.168.12.62

port: 6379

timeout: 20000 pool:
max-active: 8

min-idle: 0

max-idle: 8
max-wait: -1

4.3 Redis 配置类

@Configuration

public class RedisApplication {

@Bean

public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFact

ory) {

RedisTemplate<Object, Object> template = new RedisTemplate<>();

template.setConnectionFactory(connectionFactory);

//使用 Jackson2JsonRedisSerializer 来序列化和反序列化 redis 的 value 值

Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

ObjectMapper mapper = new ObjectMapper();

mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

serializer.setObjectMapper(mapper);

template.setValueSerializer(serializer);

//使用 StringRedisSerializer 来序列化和反序列化redis 的 key 值

template.setKeySerializer(new StringRedisSerializer());

template.afterPropertiesSet();

return template;

}
}

4.4 Service 层应用缓存

@Service

public class TestService {

@Autowired

private PersonRepo personRepo;

/**

*	@Cacheable 应用到读取数据的方法上,先从缓存中读取,如果没有再从 DB 获取数据,然后

把数据添加到缓存中

*	unless 表示条件表达式成立的话不放入缓存

*/

@Cacheable(value = "user", key = "#root.targetClass + #username", unless = "#result eq null")

public Person getPersonByName(String username) {

Person person = personRepo.getPersonByName(username);

return person;

}

/**

*	@CachePut 应用到写数据的方法上,如新增/修改方法,调用方法时会自动把相应的数据放入缓

存	*/

@CachePut(value = "user", key = "#root.targetClass + #result.username", unless = "#person e

q null")

          public Person savePerson(Person person) { return personRepo.savePerson(person);
}

/**

* @CacheEvict 应用到删除数据的方法上,调用方法时会从缓存中删除对应 key 的数据

*/

@CacheEvict(value = "user", key = "#root.targetClass + #username", condition = "#result eq tr ue")
public boolean removePersonByName(String username) { return personRepo.removePersonByName(username) > 0;
}

public boolean isExistPersonName(Person person) { return personRepo.existPersonName(person) > 

4.5 数据访问资源类

@Component @Path("personMgr")
public class PersonMgrResource {

@Autowired
private PersonService personService;

@GET

@Path("getPersonByName")

@Produces(MediaType.APPLICATION_JSON)

public JsonResp getPersonByName(@QueryParam("username") String username) {

Person person = personService.getPersonByName(username);

return JsonResp.success(person);

}

@POST

@Path("removePersonByName")

@Produces(MediaType.APPLICATION_JSON)

public JsonResp removePersonByName(@QueryParam("username") String username) {

if (personService.removePersonByName(username)) {

return JsonResp.success();

}

return JsonResp.fail("系统错误!");

}

@POST

@Path("savePerson")

@Produces(MediaType.APPLICATION_JSON)

public JsonResp savePerson(Person person) {

if (personService.isExistPersonName(person)) {

  return JsonResp.fail("用户名已存在!");

}

if (personService.savePerson(person).getId() > 0) { return JsonResp.success();
}

return JsonResp.fail("系统错误!");

}

}

5. 通过 postman 工具来测试缓存是否生效

第一次访问查找用户:

第一次通过用户名称来查找用户可以看到是从库中查询的数据,我们可以通过RedisClient 工具来查看数据已放入了缓存。

第二次查找用户:发现服务端并未打印任何数据库查询日志,可以知道第二次查询是从缓存中查询得到的数据。

总结

本文介绍如何通过 SpringBoot 来一步步集成 Redis 缓存,关于 Redis 的使用它不仅可以用作缓存,还可以用来构建队列系统,Pub/Sub 实时消息系统,分布式系统的的计数器应用,关于 Redis 更多的介绍,请前往官网查阅。

相关推荐

MySQL数据库中,数据量越来越大,有什么具体的优化方案么?

个人的观点,这种大表的优化,不一定上来就要分库分表,因为表一旦被拆分,开发、运维的复杂度会直线上升,而大多数公司和开发人员是欠缺这种能力的。所以MySQL中几百万甚至小几千万的表,先考虑做单表的优化。...

Redis的Bitmap(位图):签到打卡、用户在线状态,用它一目了然

你是不是每天打开APP,第一时间就是去“签到打卡”?或者在社交软件里,看到你的朋友头像旁边亮着“在线”的绿灯?这些看似简单的功能背后,都隐藏着一个有趣而高效的数据结构。如果让你来设计一个签到系统:用户...

想知道有多少人看了你的文章?Redis HyperLogLog几KB就搞定!

作为一名内容创作者,你每天最期待的,除了文章阅读量蹭蹭上涨,是不是还特别想知道,到底有多少个“独立用户”阅读了你的文章?这个数字,我们通常称为“UV”(UniqueVisitors),它比总阅读量更...

Redis的“HyperLogLog”:统计网站日活用户,省内存又高效的神器

你可能从未听过这个拗口的名字——“HyperLogLog”,它听起来就像是某个高深莫测的数学公式。但请相信我,理解它的核心思想并不难,而且一旦你掌握了它,你会发现它在处理大数据统计问题时,简直就是“救...

阿里云国际站:为什么我的云服务器运行缓慢?

本文由【云老大】TG@yunlaoda360撰写一、网络性能瓶颈带宽不足现象:上传/下载速度慢,远程连接卡顿。排查:通过阿里云控制台查看网络流量峰值是否接近带宽上限34。解决:升级带宽(如从1M提...

Java 近期新闻:Jakarta EE 11和Spring AI更新、WildFly 36.0 Beta、Infinispan

作者|MichaelRedlich译者|明知山策划|丁晓昀OpenJDKJEP503(移除32位x86移植版本)已从“ProposedtoTarget”状态进入到“T...

腾讯云国际站:怎样设置自动伸缩应对流量高峰?

云计算平台服务以阿里云为例:开通服务与创建伸缩组:登录阿里云控制台,找到弹性伸缩服务并开通。创建伸缩组时,选择地域与可用区,定义伸缩组内最小/最大实例数,绑定已有VPC虚拟交换机。实例模板需...

【案例分享】如何利用京东云建设高可用业务架构

本文以2022年一个实际项目为基础,来演示在京东云上构建高可用业务的整个过程。公有云及私有云客户可通过使用京东云的弹性IAAS、PAAS服务,创建高可用、高弹性、高可扩展、高安全的云上业务环境,提升业...

Spring Security在前后端分离项目中的使用

1文章导读SpringSecurity是Spring家族中的一个安全管理框架,可以和SpringBoot项目很方便的集成。SpringSecurity框架的两大核心功能:认证和授权认证:...

Redis与Java集成的最佳实践

Redis与Java集成的最佳实践在当今互联网飞速发展的时代,缓存技术的重要性毋庸置疑。Redis作为一款高性能的分布式缓存数据库,与Java语言的结合更是如虎添翼。今天,我们就来聊聊Redis与Ja...

Redis在Java项目中的应用与数据持久化

Redis在Java项目中的应用与数据持久化Redis简介:为什么我们需要它?在Java项目中,Redis就像一位不知疲倦的快跑选手,总能在关键时刻挺身而出。作为一个内存数据库,它在处理高并发请求时表...

Redis 集群最大节点个数是多少?

Redis集群最大节点个数取决于Redis的哈希槽数量,因为每个节点可以负责多个哈希槽。在Redis3.0之前,Redis集群最多支持16384个哈希槽,因此最大节点数为16384个。但是在Redi...

Java开发岗面试宝典:分布式相关问答详解

今天千锋广州Java小编就给大家分享一些就业面试宝典之分布式相关问题,一起来看看吧!1.Redis和Memcache的区别?1、存储方式Memecache把数据全部存在内存之中,断电后会挂掉,数据不...

当Redis内存不足时,除了加内存,还有哪些曲线救国的办法?

作为“速度之王”的Redis,其高性能的秘密武器之一就是将数据存储在内存中。然而,内存资源是有限且昂贵的。当你的Redis实例开始告警“内存不足”,或者写入请求被阻塞时,最直接的解决方案似乎就是“加内...

商品详情页那么多信息,Redis的“哈希”如何优雅存储?

你每天网购时,无论是打开淘宝、京东还是拼多多,看到的商品详情页都琳琅满目:商品名称、价格、库存、图片、描述、评价数量、销量。这些信息加起来,多的惊人。那么问题来了:这些海量的商品信息,程序是去哪里取出...

取消回复欢迎 发表评论: