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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云解析 DNS,旗舰版 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;
  }
}
相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
3天前
|
NoSQL 算法 Redis
docker高级篇(大厂进阶):安装redis集群
docker高级篇(大厂进阶):安装redis集群
50 24
|
27天前
|
XML Java 数据库连接
Spring高手之路25——深入解析事务管理的切面本质
本篇文章将带你深入解析Spring事务管理的切面本质,通过AOP手动实现 @Transactional 基本功能,并探讨PlatformTransactionManager的设计和事务拦截器TransactionInterceptor的工作原理,结合时序图详细展示事务管理流程,最后引导分析 @Transactional 的代理机制源码,帮助你全面掌握Spring事务管理。
36 2
Spring高手之路25——深入解析事务管理的切面本质
|
16天前
|
存储 NoSQL Java
使用lock4j-redis-template-spring-boot-starter实现redis分布式锁
通过使用 `lock4j-redis-template-spring-boot-starter`,我们可以轻松实现 Redis 分布式锁,从而解决分布式系统中多个实例并发访问共享资源的问题。合理配置和使用分布式锁,可以有效提高系统的稳定性和数据的一致性。希望本文对你在实际项目中使用 Redis 分布式锁有所帮助。
47 5
|
24天前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
52 8
|
21天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
64 2
|
21天前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
40 2
|
22天前
|
前端开发 Java Maven
深入解析:如何用 Spring Boot 实现分页和排序
深入解析:如何用 Spring Boot 实现分页和排序
46 2
|
24天前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
35 4
|
29天前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
56 4