0


Spring Boot整合Redis

文章目录


一、Redis概述

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

Redis支持多种类型的数据结构,如 字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)与范围查询、bitmaps、 hyperloglogs 和 地理空间(geospatial)、索引半径查询。

Redis 内置了复制(replication),LUA脚本(Lua scripting),LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

Redis官网与在线教程

官网:https://redis.io/
中文网站:http://www.redis.cn/
在线教程:https://www.redis.net.cn/tutorial/3502.html

二、使用Spring Boot 整合 Redis

(一)搭建Redis环境

请参考《Redis和Redis可视化管理工具的下载和安装》

(二)下载和安装Redis可视化管理工具

请参考《Redis和Redis可视化管理工具的下载和安装》

(三)创建Spring Boot项目RedisDemo

设置项目配置
在这里插入图片描述

添加项目依赖
在这里插入图片描述
完成项目初始化
在这里插入图片描述

(四)创建实体类

在net.army.boot包里创建bean子包
在这里插入图片描述

1、创建地址实体类 - Address

在net.army.boot.bean包里创建地址实体类Address
在这里插入图片描述

packagenet.army.boot.bean;importorg.springframework.data.redis.core.index.Indexed;/**
 * 功能:地址实体类
 * 日期:2023年06月16日
 * 作者:梁辰兴
 */publicclassAddress{@IndexedprivateString country;//国家@IndexedprivateString city;//城市publicAddress(String country,String city){this.country = country;this.city = city;}publicStringgetCountry(){return country;}publicvoidsetCountry(String country){this.country = country;}publicStringgetCity(){return city;}publicvoidsetCity(String city){this.city = city;}@OverridepublicStringtoString(){return"Address{"+"country='"+ country +'\''+", city='"+ city +'\''+'}';}}

注意:索引类Indexed不要导入错误 - import org.springframework.data.redis.core.index.Indexed;

2、创建家庭实体类 - Family

在net.army.boot.bean包里创建家庭实体类Family
在这里插入图片描述

packagenet.army.boot.bean;importorg.springframework.data.redis.core.index.Indexed;/**
 * 功能:家庭实体类
 * 日期:2023年06月16日
 * 作者:梁辰兴
 */publicclassFamily{@IndexedprivateString type;//成员类型@IndexedprivateString name;//成员名publicFamily(String type,String name){this.type = type;this.name = name;}publicStringgetType(){return type;}publicvoidsetType(String type){this.type = type;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}@OverridepublicStringtoString(){return"Family{"+"type='"+ type +'\''+", name='"+ name +'\''+'}';}}

3、创建个人实体类 - Person

在net.army.boot.bean包里创建个人实体类Person
在这里插入图片描述

packagenet.army.boot.bean;importorg.springframework.data.annotation.Id;importorg.springframework.data.redis.core.RedisHash;importorg.springframework.data.redis.core.index.Indexed;importjava.util.List;/**
 * 功能:个人实体类
 * 日期:2023年06月16日
 * 作者:梁辰兴
 */@RedisHash("persons")publicclassPerson{@Id//主键privateString id;//生成二级索引,方便查询@IndexedprivateString firstName;//名@IndexedprivateString lastName;//姓privateAddress address;//家庭地址privateList<Family> familyList;//家庭成员publicPerson(String id,String firstName,String lastName,Address address,List<Family> familyList){this.id = id;this.firstName = firstName;this.lastName = lastName;this.address = address;this.familyList = familyList;}publicStringgetId(){return id;}publicvoidsetId(String id){this.id = id;}publicStringgetFirstName(){return firstName;}publicvoidsetFirstName(String firstName){this.firstName = firstName;}publicStringgetLastName(){return lastName;}publicvoidsetLastName(String lastName){this.lastName = lastName;}publicAddressgetAddress(){return address;}publicvoidsetAddress(Address address){this.address = address;}publicList<Family>getFamilyList(){return familyList;}publicvoidsetFamilyList(List<Family> familyList){this.familyList = familyList;}@OverridepublicStringtoString(){return"Person{"+"id='"+ id +'\''+", firstName='"+ firstName +'\''+", lastName='"+ lastName +'\''+", address="+ address +", familyList="+ familyList +'}';}}

说明:注解@RedisHash(“persons”),表明在redis数据库中开启一个persons的内存空间,所有person操作相关的数据均保存在此空间(redis是内存数据库)。

(五)创建仓库接口 - PersonRepository

在net.army.boot包里创建repository子包,再在子包下创建PersonRepository接口
在这里插入图片描述

packagenet.army.boot.repository;importnet.army.boot.bean.Person;importorg.springframework.data.repository.CrudRepository;/**
 * 功能:个人仓库接口
 * 日期:2023年06月16日
 * 作者:梁辰兴
 */publicinterfacePersonRepositoryextendsCrudRepository<Person,String>{}

(六)在全局配置文件配置Redis属性

在这里插入图片描述

spring.redis.port=6379
spring.redis.host=127.0.0.1
spring.redis.password=

(七)在测试类里编写测试方法

点开测试类RedisDemoApplicationTests
在这里插入图片描述
注入PersonRepository实例
在这里插入图片描述

@Autowired// 注入个人仓库privatePersonRepository personRepository;

1、创建测试方法testAddPerson()

@TestpublicvoidtestAddPerson(){// 添加第一个人                                                                                                 Address address =newAddress("中国","泸州");Family family1 =newFamily("儿子","张晓刚");Family family2 =newFamily("女儿","张晓霞");List<Family> familyList =newArrayList<Family>();                                                        
    familyList.add(family1);                                                                                  
    familyList.add(family2);Person person =newPerson("1","无忌","张", address, familyList);                                          
    personRepository.save(person);// 添加第二个人                                                                                                 
    address =newAddress("中国","上海");                                                                        
    family1 =newFamily("儿子","李功晨");                                                                        
    family2 =newFamily("女儿","李晓丽");                                                                        
    familyList =newArrayList<Family>();                                                                     
    familyList.add(family1);                                                                                  
    familyList.add(family2);                                                                                  
    person =newPerson("2","承鹏","李", address, familyList);                                                 
    personRepository.save(person);// 添加第三个人                                                                                                 
    address =newAddress("中国","北京");                                                                        
    family1 =newFamily("儿子","唐玉海");                                                                        
    family2 =newFamily("女儿","唐雨涵");                                                                        
    familyList =newArrayList<Family>();                                                                     
    familyList.add(family1);                                                                                  
    familyList.add(family2);                                                                                  
    person =newPerson("3","大明","唐", address, familyList);                                                 
    personRepository.save(person);// 添加第四个人                                                                                                 
    address =newAddress("中国","北京");                                                                        
    family1 =newFamily("儿子","张大明");                                                                        
    family2 =newFamily("女儿","张丽丽");                                                                        
    familyList =newArrayList<Family>();                                                                     
    familyList.add(family1);                                                                                  
    familyList.add(family2);                                                                                  
    person =newPerson("4","文勇","张", address, familyList);                                                 
    personRepository.save(person);System.out.println("成功地添加了4条记录~");}

运行测试方法,查看结果
在这里插入图片描述
打开Redis可视化工具查看
在这里插入图片描述
在这里插入图片描述

2、创建测试方法testFindAll()

@TestpublicvoidtestFindAll(){Iterable<Person> persons = personRepository.findAll();
    persons.forEach(person ->System.out.println(person));}

运行测试方法,查看结果
在这里插入图片描述

3、测试personRespository的其它方法

在这里插入图片描述
创建测试方法testFindById()

@TestpublicvoidtestFindById(){Optional<Person> person = personRepository.findById("2");System.out.println(person);}

运行测试方法,查看结果
在这里插入图片描述

(八)测试自定义个性化查询方法

1、在PersonRepository接口定义方法

packagenet.army.boot.repository;importnet.army.boot.bean.Person;importorg.springframework.data.domain.Page;importorg.springframework.data.domain.Pageable;importorg.springframework.data.repository.CrudRepository;importjava.util.List;/**
 * 功能:个人仓库接口
 * 日期:2023年06月16日
 * 作者:梁辰兴
 */publicinterfacePersonRepositoryextendsCrudRepository<Person,String>{//自定义个性化查询,方法名需要符合特定的规范List<Person>findByLastName(String lastName);Page<Person>findPersonByLastName(String lastName,Pageable pageable);List<Person>findPersonByLastNameAndFirstName(String lastName,String firstName);List<Person>findByAddress_City(String city);List<Person>findByFamilyList_Name(String name);}

2、在测试类创建测试方法testFindPersonByLastName()

@TestpublicvoidtestFindPersonByLastName(){// 降序排序                                                                  Sort.Direction sort =Sort.Direction.DESC;// 创建分页器                                                                 Pageable pageable =PageRequest.of(0,2, sort,"id");// 获取页面                                                                  Page<Person> page = personRepository.findPersonByLastName("张", pageable);// 输出页面内容                                                                for(Person person : page.getContent()){System.out.println(person);}}

运行测试方法,查看结果
在这里插入图片描述

三、练习

任务1、在测试类创建测试方法testFindByLastName()

查找姓“张”的记录
在这里插入图片描述

任务2、在测试类创建测试方法testFindPersonByLastNameAndFirstName()

查找lastName为“唐”,firstName为“大明”的记录
在这里插入图片描述

任务3、在测试类创建测试方法testFindByAddress_City()

查找“北京”的记录
在这里插入图片描述

任务4、在测试类创建测试方法testFindByFamilyList_Name()

查找“唐雨涵”
在这里插入图片描述

标签: redis spring boot java

本文转载自: https://blog.csdn.net/m0_62617719/article/details/131223032
版权归原作者 梁辰兴 所有, 如有侵权,请联系我们删除。

“Spring Boot整合Redis”的评论:

还没有评论