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;
  }
}
相关文章
|
18天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
13天前
|
自然语言处理 编译器 Linux
|
1天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
10 2
|
17天前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
18天前
|
Prometheus 监控 Cloud Native
实战经验:成功的DevOps实施案例解析
实战经验:成功的DevOps实施案例解析
34 6
|
15天前
|
UED
<大厂实战经验> Flutter&鸿蒙next 中使用 initState 和 mounted 处理异步请求的详细解析
在 Flutter 开发中,处理异步请求是常见需求。本文详细介绍了如何在 `initState` 中触发异步请求,并使用 `mounted` 属性确保在适当时机更新 UI。通过示例代码,展示了如何安全地进行异步操作和处理异常,避免在组件卸载后更新 UI 的问题。希望本文能帮助你更好地理解和应用 Flutter 中的异步处理。
60 3
|
15天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
15天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
93 1
|
20天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
46 5
|
16天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。

推荐镜像

更多