百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Spring Boot 整合 Redis(spring boot整合redis(单机+集群))

wptr33 2025-02-03 15:30 43 浏览

1 Redis 介绍

Redis 是一个开源(BSD许可)的、内存中的数据结构存储系统,它可以用作数据库缓存消息中间件,并提供多种语言的API。

1.1 Redis 优点

  1. 存取速度快:Redis速度非常快,每秒可执行大约110000次的设值操作,或者执行81000次的读取操作。
  2. 支持丰富的数据类型:Redis支持开发人员常用的大多数数据类型,例如列表、集合、排序集和散列等。
  3. 操作具有原子性:所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新后的值。
  4. 提供多种功能:Redis提供了多种功能特性,可用作非关系型数据库、缓存中间件、消息中间件等。

1.2 Redis 的下载安装及连接

【基础篇】一文带你掌握 Redis - 潘志的研发笔记的文章 - 知乎

链接地址:

https://zhuanlan.zhihu.com/p/593697447

这篇文章对 Redis 进行了全面的介绍,涵盖了其基本概念、安装方法、命令行客户端操作、事务与 Lua 脚本操作以及可视化客户端等方面。

2 流程

  1. 创建项目,引入相应的依赖启动器。

使用Spring Initializr的方式构建项目,选择依赖SQL->MyBatis Framework \ MySQL Driver 。

  1. 在pom文件中添加 Spring Data Redis 依赖启动器。

	org.springframework.boot
	spring-boot-starter-data-redis
  1. 编写实体类。

(1)编写实体类Person。

package com.itheima.domain;

import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.index.Indexed;

import java.util.List;

@RedisHash("persons")
// 加上这个注解就会在redis中创建一个名为persons的hash数据结构(存储空间)
public class Person {
    @Id // 用于表示实体类主键
    private String id;

    // 由于我们有可能要根据姓单独查询或者根据名单独插叙,也可能进行组合查询。
    // 针对这种查询情况,要加上@Indexed
    @Indexed // 用于标识该属性会在redis数据库中生成二级索引
    private String firstname;
    @Indexed
    private String lastname;

    private Address address;
    private List familyList;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public List getFamilyList() {
        return familyList;
    }

    public void setFamilyList(List familyList) {
        this.familyList = familyList;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id='" + id + '\'' +
                ", firstname='" + firstname + '\'' +
                ", lastname='" + lastname + '\'' +
                ", address=" + address +
                ", familyList=" + familyList +
                '}';
    }
}

(2)编写实体类Address。

package com.itheima.domain;

import org.springframework.data.redis.core.index.Indexed;

public class Address {
    @Indexed
    private String city;
    @Indexed
    private String country;

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    @Override
    public String toString() {
        return "Address{" +
                "city='" + city + '\'' +
                ", country='" + country + '\'' +
                '}';
    }
}

(3)编写实体类Family。

package com.itheima.domain;

import org.springframework.data.redis.core.index.Indexed;

public class Family {
    @Indexed
    private String type;
    @Indexed
    private String username;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return "Family{" +
                "type='" + type + '\'' +
                ", username='" + username + '\'' +
                '}';
    }
}
  1. 编写Repository接口PersonRepository。
package com.itheima.repository;

import com.itheima.domain.Person;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.domain.Page;

import java.util.List;

// <当前操作实体类,主键数据类型>
public interface PersonRepository extends CrudRepository{

    // 1.根据姓氏查询某人
    List findByLastname(String lastname);
    // 2.根据姓氏查询某人,采用分页的格式。
    Page findPersonByLastname(String lastname, Pageable page);

    // 3.根据姓氏和名字查询某些人
    List findByFirstnameAndLastname(String firstname, String lastname);

    // 4.查询某座城市居住的所有人
    List findByAddress_City(String city);

    // 5.查询所有相同姓氏的人
    List findByFamilyList_Username(String username);
}
  1. 在全局配置文件application.properties中添加Redis数据库连接配置。
spring.data.redis.host=192.268.128.152
spring.data.redis.port=6379
spring.data.redis.password=

:这里是远程连接linux中的redis,没有设置密码的话,
spring.data.redis.password参数的值为空。

  1. 编写单元测试进行接口方法测试以及整合测试。
package com.itheima;

import com.itheima.domain.Address;
import com.itheima.domain.Family;
import com.itheima.domain.Person;
import com.itheima.repository.PersonRepository;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@SpringBootTest
class RedisTest {

    @Autowired
    private PersonRepository personRepository;

    @Test
    public void savePerson(){
        Person person = new Person();
        person.setFirstname("三三");
        person.setLastname("张");

        Address address = new Address();
        address.setCity("北京");

        person.setAddress(address);

        Family family1 = new Family();
        family1.setType("父亲");
        family1.setUsername("张二");

        Family family2 = new Family();
        family2.setType("母亲");
        family2.setUsername("李一");

        ArrayList families = new ArrayList<>();
        families.add(family1);
        families.add(family2);

        person.setFamilyList(families);

        // 保存数据
        personRepository.save(person);

    }
    }
  1. redis储存数据展示如下图。

相关推荐

[常用工具] git基础学习笔记_git工具有哪些

添加推送信息,-m=messagegitcommit-m“添加注释”查看状态...

centos7安装部署gitlab_centos7安装git服务器

一、Gitlab介1.1gitlab信息GitLab是利用RubyonRails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。...

太高效了!玩了这么久的Linux,居然不知道这7个终端快捷键

作为Linux用户,大家肯定在Linux终端下敲过无数的命令。有的命令很短,比如:ls、cd、pwd之类,这种命令大家毫无压力。但是,有些命令就比较长了,比如:...

提高开发速度还能保证质量的10个小窍门

养成坏习惯真是分分钟的事儿,而养成好习惯却很难。我发现,把那些对我有用的习惯写下来,能让我坚持住已经花心思养成的好习惯。...

版本管理最好用的工具,你懂多少?

版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。...

Git回退到某个版本_git回退到某个版本详细步骤

在开发过程,有时会遇到合并代码或者合并主分支代码导致自己分支代码冲突等问题,这时我们需要回退到某个commit_id版本1,查看所有历史版本,获取git的某个历史版本id...

Kubernetes + Jenkins + Harbor 全景实战手册

Kubernetes+Jenkins+Harbor全景实战手册在现代企业级DevOps体系中,Kubernetes(K8s)、Jenkins和Harbor组成的CI/CD流水...

git常用命令整理_git常见命令

一、Git仓库完整迁移完整迁移,就是指,不仅将所有代码移植到新的仓库,而且要保留所有的commit记录1.随便找个文件夹,从原地址克隆一份裸版本库...

第三章:Git分支管理(多人协作基础)

3.1分支基本概念分支是Git最强大的功能之一,它允许你在主线之外创建独立的开发线路,互不干扰。理解分支的工作原理是掌握Git的关键。核心概念:HEAD:指向当前分支的指针...

云效Codeup怎么创建分支并进行分支管理

云效Codeup怎么创建分支并进行分支管理,分支是为了将修改记录分叉备份保存,不受其他分支的影响,所以在同一个代码库里可以同时进行多个修改。创建仓库时,会自动创建Master分支作为默认分支,后续...

git 如何删除本地和远程分支?_git怎么删除远程仓库

Git分支对于开发人员来说是一项强大的功能,但要维护干净的存储库,就需要知道如何删除过时的分支。本指南涵盖了您需要了解的有关本地和远程删除Git分支的所有信息。了解Git分支...

git 实现一份代码push到两个git地址上

一直以来想把自己的博客代码托管到github和coding上想一次更改一次push两个地址一起更新今天有空查资料实践了下本博客的github地址coding的git地址如果是Gi...

git操作:cherry-pick和rebase_git cherry-pick bad object

在编码中经常涉及到分支之间的代码同步问题,那就需要cherry-pick和rebase命令问题:如何将某个分支的多个commit合并到另一个分支,并在另一个分支只保留一个commit记录解答:假设有两...

模型文件硬塞进 Git,GitHub 直接打回原形:使用Git-LFS管理大文件

前言最近接手了一个计算机视觉项目代码是屎山就不说了,反正我也不看代码主要就是构建一下docker镜像,测试一下部署的兼容性这本来不难但是,国内服务器的网络环境实在是恶劣,需要配置各种镜像(dock...

防弹少年团田柾国《Euphoria》2周年 获世界实时趋势榜1位 恭喜呀

当天韩国时间凌晨3时左右,该曲在Twitter上以“2YearsWithEuphoria”的HashTag登上了世界趋势1位。在韩国推特实时趋势中,从上午开始到现在“Euphoria2岁”的Has...