Spring Boot中Redis的安装和解析与实战(附源码 超详细)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
全局流量管理 GTM,标准版 1个月
简介: Spring Boot中Redis的安装和解析与实战(附源码 超详细)

创作不易 觉得有帮助请点赞关注收藏~~~

一、Redis简介

Redis是一个开源的使用ANSIC语言编写,支持网络,可基于内存亦可持久化的日志型,key-value数据库,并提供多种语言的API。它支持多种数据类型。

但是在Redis在内存中存储数据,因此,存放在Redis中的数据不应该大于内存容量,否则回导致操作系统性能降低

二、安装Redis

1:下载Redis

https://github.com/MSOpenTech/redis/tags

2:启动Redis服务

使用redis-server-windows.conf命令行启动Redis服务

进入Redis解压目录 执行设置服务命令

redis-server--service-install redis.windows-service.conf--loglevel verbose 设置成windows下的服务

常用的Redis服务命令如下

卸载服务 redis-server --service-uninstall
开启服务 redis-server --service-start
停止服务 redis-server --service-stop

3:操作测试Redis

启动服务后 可以使用如下命令创建一个数据库服务

redis-cli.exe-h 127.0.0.1-p 6379
set key value保存数据
get key 获取数据

三、Spring Boot整合Redis

Spring对Redis的支持是通过Spring Data Redis来实现的,提供了RedisTemplate和StringRedisTemplate两个模板来进行数据操作。

序列化

当数据从存储到Redis时,键值都是通过Spring提供的Serializer序列化到数据的。

在Spring Boot应用中 只要引入spring-boot-starter-data-redis依赖就可以使用默认配置的Redis进行数据操作

实战在Spring Boot应用中使用StringRedisTemplate和RedisTmeplate模板访问操作Redis数据库

1:创建Spring Boot Web应用时记得引入上文所说依赖

2:application.properties不用配置

3:创建实体类

创建名为com.ch.ch6_9.entity的包 并创建Student类 代码如下

package com.ch.ch6_9.entity;
import java.io.Serializable;
public class Student implements Serializable{
  private static final long serialVersionUID = 1L;
  private String sno;
  private String sname;
  private Integer sage;
  public Student() {
    super();
  }
  public Student(String sno, String sname, Integer sage) {
    super();
    this.sno = sno;
    this.sname = sname;
    this.sage = sage;
  }
  public String getSno() {
    return sno;
  }
  public void setSno(String sno) {
    this.sno = sno;
  }
  public String getSname() {
    return sname;
  }
  public void setSname(String sname) {
    this.sname = sname;
  }
  public Integer getSage() {
    return sage;
  }
  public void setSage(Integer sage) {
    this.sage = sage;
  }
}

4:创建数据访问层

package com.ch.ch6_9.repository;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Repository;
import com.ch.ch6_9.entity.Student;
@Repository
public class StudentRepository {
  @SuppressWarnings("unused")
  @Autowired
  private StringRedisTemplate stringRedisTemplate;
  @SuppressWarnings("unused")
  @Autowired
  private RedisTemplate<Object, Object> redisTemplate;
  /**
   * 使用@Resource注解指定stringRedisTemplate,可注入基于字符串的简单属性操作方法
   * ValueOperations<String, String> valueOpsStr = stringRedisTemplate.opsForValue();
   */
  @Resource(name="stringRedisTemplate")
  ValueOperations<String, String> valueOpsStr;
  /**
   * 使用@Resource注解指定redisTemplate,可注入基于对象的简单属性操作方法
   * ValueOperations<Object, Object> valueOpsObject = redisTemplate.opsForValue();
   */
  @Resource(name="redisTemplate")
  ValueOperations<Object, Object> valueOpsObject;
  /**
   * 保存字符串到redis
   */
  public void saveString(String key, String value) {
    valueOpsStr.set(key, value);
  }
  /**
   * 保存对象到redis
   */
  public void saveStudent(Student stu) {
    valueOpsObject.set(stu.getSno(), stu);
  }
  /**
   * 保存List数据到redis
   */
  public void saveMultiStudents(Object key, List<Student> stus) {
    valueOpsObject.set(key, stus);
  }
  /**
   * 从redis中获得字符串数据
   */
  public String getString(String key) {
    return valueOpsStr.get(key);
  }
  /**
   * 从redis中获得对象数据
   */
  public Object getObject(Object key) {
    return valueOpsObject.get(key);
  }
}

5:创建控制器层

package com.ch.ch6_9.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ch.ch6_9.entity.Student;
import com.ch.ch6_9.repository.StudentRepository;
@RestController
public class TestRedisController {
  @Autowired
  private StudentRepository studentRepository;
  @RequestMapping("/save")
  public void save() {
    studentRepository.saveString("uname", "陈恒");
    Student s1 = new Student("111","陈恒1",77);
    studentRepository.saveStudent(s1);
    Student s2 = new Student("222","陈恒2",88);
    Student s3 = new Student("333","陈恒3",99);
    List<Student>  stus = new ArrayList<Student>();
    stus.add(s2);
    stus.add(s3);
    studentRepository.saveMultiStudents("mutilStus",stus);
  }
  @RequestMapping("/getUname")
  @Cacheable(value = "myuname")
  public String getUname(String key) {
    System.out.println("测试缓存");
    return studentRepository.getString(key);
  }
  @RequestMapping("/getStudent")
  public Student getStudent(String key) {
    return (Student)studentRepository.getObject(key);
  }
  @SuppressWarnings("unchecked")
  @RequestMapping("/getMultiStus")
  public List<Student> getMultiStus(String key) {
    return (List<Student>)studentRepository.getObject(key);
  }
}

6:修改配置类

因为Redis默认使用序列化数据,这对使用Redis Client查看数据很不直观,所以我们自己配置并且定义Serializer

package com.ch.ch6_9;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
@EnableCaching
@SpringBootApplication
public class Ch69Application {
  public static void main(String[] args) {
    SpringApplication.run(Ch69Application.class, args);
  }
  @Bean
  public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
    RedisTemplate<Object, Object> rTemplate = new RedisTemplate<Object, Object>();
    rTemplate.setConnectionFactory(redisConnectionFactory);
    @SuppressWarnings({ "unchecked", "rawtypes" })
    Jackson2JsonRedisSerializer<Object>  jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper om = new ObjectMapper();
    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    jackson2JsonRedisSerializer.setObjectMapper(om);
    //设置值的序列化采用Jackson2JsonRedisSerializer
    rTemplate.setValueSerializer(jackson2JsonRedisSerializer);
    //设置键的序列化采用StringRedisSerializer
    rTemplate.setKeySerializer(new StringRedisSerializer());
    return rTemplate;
  }
}
相关文章
|
19天前
|
Java 对象存储 开发者
解析Spring Cloud与Netflix OSS:微服务架构中的左右手如何协同作战
Spring Cloud与Netflix OSS不仅是现代微服务架构中不可或缺的一部分,它们还通过不断的技术创新和社区贡献推动了整个行业的发展。无论是对于初创企业还是大型组织来说,掌握并合理运用这两套工具,都能极大地提升软件系统的灵活性、可扩展性以及整体性能。随着云计算和容器化技术的进一步普及,Spring Cloud与Netflix OSS将继续引领微服务技术的发展潮流。
32 0
|
2天前
|
存储 前端开发 Java
springboot整合最新版minio和minio的安装(完整教程,新人必看)
本文详细介绍了如何使用Docker安装配置最新版的MinIO,并展示了如何在Spring Boot应用中整合MinIO以及如何通过前端进行文件上传测试。
14 3
springboot整合最新版minio和minio的安装(完整教程,新人必看)
|
1天前
|
人工智能 缓存 Java
深入解析Spring AI框架:在Java应用中实现智能化交互的关键
【10月更文挑战第12天】Spring AI 是 Spring 框架家族的新成员,旨在满足 Java 应用程序对人工智能集成的需求。它支持自然语言处理、图像识别等多种 AI 技术,并提供与云服务(如 OpenAI、Azure Cognitive Services)及本地模型的无缝集成。通过简单的配置和编码,开发者可轻松实现 AI 功能,同时应对模型切换、数据安全及性能优化等挑战。
|
2天前
|
Java 数据库连接 Spring
【2021Spring编程实战笔记】Spring开发分享~(下)
【2021Spring编程实战笔记】Spring开发分享~(下)
8 1
|
3天前
|
设计模式 JavaScript Java
Spring 事件监听机制源码
Spring 提供了事件发布订阅机制,广泛应用于项目中。本文介绍了如何通过自定义事件类、订阅类和发布类实现这一机制,并展示了如何监听 SpringBoot 启动过程中的多个事件(如 `ApplicationStartingEvent`、`ApplicationEnvironmentPreparedEvent` 等)。通过掌握这些事件,可以更好地理解 SpringBoot 的启动流程。示例代码展示了从事件发布到接收的完整过程。
|
3天前
|
缓存 Java Spring
源码解读:Spring如何解决构造器注入的循环依赖?
本文详细探讨了Spring框架中的循环依赖问题,包括构造器注入和字段注入两种情况,并重点分析了构造器注入循环依赖的解决方案。文章通过具体示例展示了循环依赖的错误信息及常见场景,提出了三种解决方法:重构代码、使用字段依赖注入以及使用`@Lazy`注解。其中,`@Lazy`注解通过延迟初始化和动态代理机制有效解决了循环依赖问题。作者建议优先使用`@Lazy`注解,并提供了详细的源码解析和调试截图,帮助读者深入理解其实现机制。
12 1
|
5天前
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
8 0
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
|
14天前
|
缓存 Java Spring
手写Spring Ioc 循环依赖底层源码剖析
在Spring框架中,IoC(控制反转)是一个核心特性,它通过依赖注入(DI)实现了对象间的解耦。然而,在实际开发中,循环依赖是一个常见的问题。
27 4
|
16天前
|
存储 缓存 Java
在Spring Boot中使用缓存的技术解析
通过利用Spring Boot中的缓存支持,开发者可以轻松地实现高效和可扩展的缓存策略,进而提升应用的性能和用户体验。Spring Boot的声明式缓存抽象和对多种缓存技术的支持,使得集成和使用缓存变得前所未有的简单。无论是在开发新应用还是优化现有应用,合理地使用缓存都是提高性能的有效手段。
17 1
|
2天前
|
XML Java 数据库连接
【2020Spring编程实战笔记】Spring开发分享~(上)
【2020Spring编程实战笔记】Spring开发分享~
12 0

热门文章

最新文章

推荐镜像

更多