微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Spring Boot 集成 Redis

简介: 本文介绍了在Spring Boot中集成Redis的方法,包括依赖导入、Redis配置及常用API的使用。通过导入`spring-boot-starter-data-redis`依赖和配置`application.yml`文件,可轻松实现Redis集成。文中详细讲解了StringRedisTemplate的使用,适用于字符串操作,并结合FastJSON将实体类转换为JSON存储。还展示了Redis的string、hash和list类型的操作示例。最后总结了Redis在缓存和高并发场景中的应用价值,并提供课程源代码下载链接。

3. Spring Boot 集成 Redis

3.1 依赖导入

Spring Boot 集成 redis 很方便,只需要导入一个 redis 的 starter 依赖即可。如下:

<dependency>

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

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

</dependency>

<!--阿里巴巴fastjson -->

<dependency>

   <groupId>com.alibaba</groupId>

   <artifactId>fastjson</artifactId>

   <version>1.2.35</version>

</dependency>

这里也导入阿里巴巴的 fastjson 是为了在后面我们要存一个实体,为了方便把实体转换成 json 字符串存进去。

3.2 Redis 配置

导入了依赖之后,我们在 application.yml 文件里配置 redis:

server:

 port: 8080

spring:

 #redis相关配置

 redis:

   database: 5

   # 配置redis的主机地址,需要修改成自己的

   host: 192.168.48.190

   port: 6379

   password: 123456

   timeout: 5000

   jedis:

     pool:

       # 连接池中的最大空闲连接,默认值也是8。

       max-idle: 500

       # 连接池中的最小空闲连接,默认值也是0。

       min-idle: 50

       # 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)

       max-active: 1000

       # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException

       max-wait: 2000

3.3 常用 api 介绍

Spring Boot 对 redis 的支持已经非常完善了,丰富的 api 已经足够我们日常的开发,这里我介绍几个最常用的供大家学习,其他 api 希望大家自己多学习,多研究。用到会去查即可。

有两个 redis 模板:RedisTemplate 和 StringRedisTemplate。我们不使用 RedisTemplate,RedisTemplate 提供给我们操作对象,操作对象的时候,我们通常是以 json 格式存储,但在存储的时候,会使用 Redis 默认的内部序列化器;导致我们存进里面的是乱码之类的东西。当然了,我们可以自己定义序列化,但是比较麻烦,所以使用 StringRedisTemplate 模板。StringRedisTemplate 主要给我们提供字符串操作,我们可以将实体类等转成 json 字符串即可,在取出来后,也可以转成相应的对象,这就是上面我导入了阿里 fastjson 的原因。

3.3.1 redis:string 类型

新建一个 RedisService,注入 StringRedisTemplate,使用 stringRedisTemplate.opsForValue() 可以获取 ValueOperations<String, String> 对象,通过该对象即可读写 redis 数据库了。如下:

public class RedisService {


   @Resource

   private StringRedisTemplate stringRedisTemplate;


   /**

    * set redis: string类型

    * @param key key

    * @param value value

    */

   public void setString(String key, String value){

       ValueOperations<String, String> valueOperations = stringRedisTemplate.opsForValue();

       valueOperations.set(key, value);

   }


   /**

    * get redis: string类型

    * @param key key

    * @return

    */

   public String getString(String key){

       return stringRedisTemplate.opsForValue().get(key);

   }

该对象操作的是 string,我们也可以存实体类,只需要将实体类转换成 json 字符串即可。下面来测试一下:

@RunWith(SpringRunner.class)

@SpringBootTest

public class Course14ApplicationTests {


   private static final Logger logger = LoggerFactory.getLogger(Course14ApplicationTests.class);


@Resource

private RedisService redisService;


@Test

public void contextLoads() {

       //测试redis的string类型

       redisService.setString("weichat","程序员私房菜");

       logger.info("我的微信公众号为:{}", redisService.getString("weichat"));


       // 如果是个实体,我们可以使用json工具转成json字符串,

       User user = new User("CSDN", "123456");

       redisService.setString("userInfo", JSON.toJSONString(user));

       logger.info("用户信息:{}", redisService.getString("userInfo"));

   }

}

先启动 redis,然后运行这个测试用例,观察控制台打印的日志如下:

我的微信公众号为:程序员私房菜

用户信息:{"password":"123456","username":"CSDN"}

3.3.2 redis:hash 类型

hash 类型其实原理和 string 一样的,但是有两个 key,使用 stringRedisTemplate.opsForHash() 可以获取 HashOperations<String, Object, Object> 对象。比如我们要存储订单信息,所有订单信息都放在 order 下,针对不同用户的订单实体,可以通过用户的 id 来区分,这就相当于两个 key 了。

@Service

public class RedisService {


   @Resource

   private StringRedisTemplate stringRedisTemplate;


   /**

    * set redis: hash类型

    * @param key key

    * @param filedKey filedkey

    * @param value value

    */

   public void setHash(String key, String filedKey, String value){

       HashOperations<String, Object, Object> hashOperations = stringRedisTemplate.opsForHash();

       hashOperations.put(key,filedKey, value);

   }


   /**

    * get redis: hash类型

    * @param key key

    * @param filedkey filedkey

    * @return

    */

   public String getHash(String key, String filedkey){

       return (String) stringRedisTemplate.opsForHash().get(key, filedkey);

   }

}

可以看出,hash 和 string 没啥两样,只不过多了个参数,Spring Boot 中操作 redis 非常简单方便。来测试一下:

@SpringBootTest

public class Course14ApplicationTests {


   private static final Logger logger = LoggerFactory.getLogger(Course14ApplicationTests.class);


@Resource

private RedisService redisService;


@Test

public void contextLoads() {

       //测试redis的hash类型

       redisService.setHash("user", "name", JSON.toJSONString(user));

       logger.info("用户姓名:{}", redisService.getHash("user","name"));

   }

}

3.3.3 redis:list 类型

使用 stringRedisTemplate.opsForList() 可以获取 ListOperations<String, String> listOperations  redis 列表对象,该列表是个简单的字符串列表,可以支持从左侧添加,也可以支持从右侧添加,一个列表最多包含 2 ^ 32 -1 个元素。

@Service

public class RedisService {


   @Resource

   private StringRedisTemplate stringRedisTemplate;


   /**

    * set redis:list类型

    * @param key key

    * @param value value

    * @return

    */

   public long setList(String key, String value){

       ListOperations<String, String> listOperations = stringRedisTemplate.opsForList();

       return listOperations.leftPush(key, value);

   }


   /**

    * get redis:list类型

    * @param key key

    * @param start start

    * @param end end

    * @return

    */

   public List<String> getList(String key, long start, long end){

       return stringRedisTemplate.opsForList().range(key, start, end);

   }

}

可以看出,这些 api 都是一样的形式,方便记忆也方便使用。具体的 api 细节我就不展开了,大家可以自己看 api 文档。其实,这些 api 根据参数和返回值也能知道它们是做什么用的。来测试一下:

@RunWith(SpringRunner.class)

@SpringBootTest

public class Course14ApplicationTests {


   private static final Logger logger = LoggerFactory.getLogger(Course14ApplicationTests.class);


@Resource

private RedisService redisService;


@Test

public void contextLoads() {

       //测试redis的list类型

       redisService.setList("list", "football");

       redisService.setList("list", "basketball");

       List<String> valList = redisService.getList("list",0,-1);

       for(String value :valList){

           logger.info("list中有:{}", value);

       }

   }

}

4. 总结

本节主要介绍了 redis 的使用场景、安装过程,以及 Spring Boot 中集成 redis 的详细步骤。在实际项目中,通常都用 redis 作为缓存,在查询数据库的时候,会先从 redis 中查找,如果有信息,则从 redis 中取;如果没有,则从数据库中查,并且同步到 redis 中,下次 redis 中就有了。更新和删除也是如此,都需要同步到 redis。redis 在高并发场景下运用的很多。

课程源代码下载地址:戳我下载

目录
相关文章
|
14天前
|
NoSQL 安全 Java
深入理解 RedisConnectionFactory:Spring Data Redis 的核心组件
在 Spring Data Redis 中,`RedisConnectionFactory` 是核心组件,负责创建和管理与 Redis 的连接。它支持单机、集群及哨兵等多种模式,为上层组件(如 `RedisTemplate`)提供连接抽象。Spring 提供了 Lettuce 和 Jedis 两种主要实现,其中 Lettuce 因其线程安全和高性能特性被广泛推荐。通过手动配置或 Spring Boot 自动化配置,开发者可轻松集成 Redis,提升应用性能与扩展性。本文深入解析其作用、实现方式及常见问题解决方法,助你高效使用 Redis。
91 4
|
1月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
76 0
|
1月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
85 0
|
23天前
|
前端开发 Java Maven
Spring 和 Spring Boot 之间的比较
本文对比了标准Spring框架与Spring Boot的区别,重点分析两者在模块使用(如MVC、Security)上的差异。Spring提供全面的Java开发基础设施支持,包含依赖注入和多种开箱即用的模块;而Spring Boot作为Spring的扩展,通过自动配置、嵌入式服务器等功能简化开发流程。文章还探讨了两者的Maven依赖、Mvc配置、模板引擎配置、启动方式及打包部署等方面的异同,展示了Spring Boot如何通过减少样板代码和配置提升开发效率。总结指出,Spring Boot是Spring的增强版,使应用开发、测试与部署更加便捷高效。
196 10
|
1月前
|
消息中间件 存储 Java
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——ActiveMQ安装
本教程介绍ActiveMQ的安装与基本使用。首先从官网下载apache-activemq-5.15.3版本,解压后即可完成安装,非常便捷。启动时进入解压目录下的bin文件夹,根据系统选择win32或win64,运行activemq.bat启动服务。通过浏览器访问`http://127.0.0.1:8161/admin/`可进入管理界面,默认用户名密码为admin/admin。ActiveMQ支持两种消息模式:点对点(Queue)和发布/订阅(Topic)。前者确保每条消息仅被一个消费者消费,后者允许多个消费者同时接收相同消息。
67 0
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——ActiveMQ安装
|
1月前
|
消息中间件 Java 微服务
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——发布/订阅消息的生产和消费
本文详细讲解了Spring Boot中ActiveMQ的发布/订阅消息机制,包括消息生产和消费的具体实现方式。生产端通过`sendMessage`方法发送订阅消息,消费端则需配置`application.yml`或自定义工厂以支持topic消息监听。为解决点对点与发布/订阅消息兼容问题,可通过设置`containerFactory`实现两者共存。最后,文章还提供了测试方法及总结,帮助读者掌握ActiveMQ在异步消息处理中的应用。
85 0
|
1月前
|
消息中间件 网络协议 Java
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——ActiveMQ集成
本文介绍了在 Spring Boot 中集成 ActiveMQ 的详细步骤。首先通过引入 `spring-boot-starter-activemq` 依赖并配置 `application.yml` 文件实现基本设置。接着,创建 Queue 和 Topic 消息类型,分别使用 `ActiveMQQueue` 和 `ActiveMQTopic` 类完成配置。随后,利用 `JmsMessagingTemplate` 实现消息发送功能,并通过 Controller 和监听器实现点对点消息的生产和消费。最后,通过浏览器访问测试接口验证消息传递的成功性。
45 0
|
6月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
5月前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
213 0
|
9月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
382 6

热门文章

最新文章