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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 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月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
198 5
|
2月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
206 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
4月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
555 2
|
6月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
237 32
|
5月前
|
机器学习/深度学习 数据采集 人机交互
springboot+redis互联网医院智能导诊系统源码,基于医疗大模型、知识图谱、人机交互方式实现
智能导诊系统基于医疗大模型、知识图谱与人机交互技术,解决患者“知症不知病”“挂错号”等问题。通过多模态交互(语音、文字、图片等)收集病情信息,结合医学知识图谱和深度推理,实现精准的科室推荐和分级诊疗引导。系统支持基于规则模板和数据模型两种开发原理:前者依赖人工设定症状-科室规则,后者通过机器学习或深度学习分析问诊数据。其特点包括快速病情收集、智能病症关联推理、最佳就医推荐、分级导流以及与院内平台联动,提升患者就诊效率和服务体验。技术架构采用 SpringBoot+Redis+MyBatis Plus+MySQL+RocketMQ,确保高效稳定运行。
416 0
|
SQL NoSQL Java
Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
Redis学习---大数据技术之Redis(NoSQL简介、Redis简介、Redis安装、五大数据类型、相关配置、持久化)
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
1740 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
存储 NoSQL 关系型数据库
Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)
Redis系列学习文章分享---第一篇(Redis快速入门之初始Redis--NoSql+安装redis+客户端+常用命令)
311 1
|
存储 消息中间件 缓存
Redis 学习 | Redis 初识与安装
Redis 学习 | Redis 初识与安装
219 0
|
存储 NoSQL Linux
【Redis 系列】redis 学习二,redis 的特性,安装方式,及为什么 redis 会这么快
【Redis 系列】redis 学习二,redis 的特性,安装方式,及为什么 redis 会这么快
212 0

推荐镜像

更多
  • DNS
  • 下一篇
    oss云网关配置