文章目录
一、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()
查找“唐雨涵”
版权归原作者 梁辰兴 所有, 如有侵权,请联系我们删除。