大二下-企业级信息系统设计与开发笔记18(Spring Boot整合Redis)

零、学习目标

1、熟悉Redis相关概念
2、掌握使用Spring Boot整合Redis

一、Redis概述

1、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)。
2、Redis优点
(1)存取速度快
Redis速度非常快,每秒可执行大约110000次的设值操作,或者执行81000次的读取操作。
(2)数据类型丰富
Redis支持开发人员常用的大多数数据类型,例如列表、集合、排序集和散列等。
(3)操作具有原子性
所有Redis操作都是原子操作,这确保如果两个客户端并发访问,Redis服务器能接收更新后的值。
(4)提供多种功能
Redis提供了多种功能特性,可用作非关系型数据库、缓存中间件、消息中间件等。
3、Redis官网与在线教程
官网:https://redis.io/
中文网站:http://www.redis.cn/
在线教程:https://www.redis.net.cn/tutorial/3502.html

原文链接:https://blog.csdn.net/howard2005/article/details/107972598

二、使用Spring Boot 整合 Redis

(一)搭建Redis环境

1、下载Redis安装压缩包
下载链接:https://pan.baidu.com/s/1x8AV7w1PE6fR7xS7lwAOWg
提取码:j4hq

2、将Redis安装包解压到任意位置
在这里插入图片描述
3、给Redis配置环境变量
在这里插入图片描述
4、启动Redis服务器
启动命令行窗口,键入redis-server命令
在这里插入图片描述
The server is now ready to accept connections on port 6379
服务器准备就绪,在端口6379接受连接
注意:可能会报错
在这里插入图片描述
解决办法:在你redis目录中运行redis-server redis.windows.conf
在这里插入图片描述

5、启动Redis客户端
启动命令行窗口,键入redis-cli命令
在这里插入图片描述
创建键值对,按键获取值
在这里插入图片描述
键入exit命令,退出客户端
在这里插入图片描述

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

1、下载Redis可视化管理工具
下载链接:https://pan.baidu.com/s/1EaCKpkGr04QM8QHu3H-G_g
提取码:oonx

2、安装Redis可视化管理工具
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、启动Redis可视化管理工具
在这里插入图片描述
4、Redis可视化工具连接Redis服务
在命令行窗口,启动Redis服务
在这里插入图片描述
5、打开Redis可视化工具的控制台
在这里插入图片描述
在控制台创建键值对,按键获取值
在这里插入图片描述
可视化查看刚才创建的键值对(注意city是先前利用Redis客户端创建的)
在这里插入图片描述
6、利用可视化工具操作键值对
创建键值对
在这里插入图片描述
修改键值对
在这里插入图片描述
删除键值对
在这里插入图片描述

(三)创建Spring Boot项目RedisDemo

设置项目元数据
在这里插入图片描述
添加项目依赖
在这里插入图片描述
设置项目名称与保存位置
在这里插入图片描述
完成项目初始化工作

(四)创建实体类

1、创建地址实体类Address
在net.zl.lesson08.bean包里创建地址实体类Address
在这里插入图片描述

package net.zl.lesson08.bean;

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

/**
 * 功能:地址实体类
 * 作者:周璐
 * 日期:2021年05月17日
 */
public class Address {
    @Indexed
    private String country; //国家
    @Indexed
    private String city; //城市

    public Address(String country, String city) {
        this.country = country;
        this.city = city;
    }

    public String getCountry() {
        return country;
    }

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

    public String getCity() {
        return city;
    }

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

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

2、创建家庭实体类Family
在net.zl.lesson08.bean包里创建家庭实体类Family
在这里插入图片描述

package net.zl.lesson08.bean;

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

/**
 * 功能:家庭实体类
 * 作者:周璐
 * 日期:2021年05月17日
 */
public class Family {
    @Indexed
    private String type; //成员类型
    @Indexed
    private String name; //成员名

    public Family(String type, String name) {
        this.type = type;
        this.name = name;
    }

    public String getType() {
        return type;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Family{" +
                "type='" + type + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
 }

3、创建人实体类Person
在net.zl.lesson08.bean包里创建人实体类Person
在这里插入图片描述

package net.zl.lesson08.bean;

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;

/**
 * 功能:人实体类
 * 作者:周璐
 * 日期:2021年05月17日
 */
@RedisHash("persons")
public class Person {
    @Id  //主键
    private String id;
    //生成二级索引,方便查询
    @Indexed
    private String firstName; //名
    @Indexed
    private String lastName; //姓
    private Address address; //家庭地址
    private List<Family> familyList; //家庭成员

    public Person(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;
    }

    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<Family> getFamilyList() {
        return familyList;
    }

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

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

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

(五)创建自定义Repository接口

在net.zl.lesson08包里创建repository子包
在net.zl.lesson08.repository包里创建PersonRepository接口
在这里插入图片描述

package net.zl.lesson08.repository;

import net.zl.lesson08.bean.Person;
import org.springframework.data.repository.CrudRepository;

/**
 * 功能:人仓库接口
 * 作者:周璐
 * 日期:2021年05月17日
 */
public interface PersonRepository extends CrudRepository<Person,String> {
}

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

在这里插入图片描述

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

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

注入PersonRepository实例
在这里插入图片描述
1、创建测试方法testAddPerson()
在这里插入图片描述

 @Test
    public void testAddPerson(){
        //添加第一个人
        Address address=new Address("中国","泸州");
        Family family1=new Family("儿子","张晓刚");
        Family family2=new Family("女儿","张晓霞");
        List<Family> familyList=new ArrayList<Family>();
        familyList.add(family1);
        familyList.add(family2);
        Person person=new Person("1","无忌","张",address,familyList);
        personRepository.save(person);

        // 添加第二个人
        address = new Address("中国", "上海");
        family1 = new Family("儿子", "李功晨");
        family2 = new Family("女儿", "李晓丽");
        familyList = new ArrayList<Family>();
        familyList.add(family1);
        familyList.add(family2);
        person = new Person("2", "承鹏", "李", address, familyList);
        personRepository.save(person);

        // 添加第三个人
        address = new Address("中国", "北京");
        family1 = new Family("儿子", "唐玉海");
        family2 = new Family("女儿", "唐雨涵");
        familyList = new ArrayList<Family>();
        familyList.add(family1);
        familyList.add(family2);
        person = new Person("3", "大明", "唐", address, familyList);
        personRepository.save(person);

        // 添加第四个人
        address = new Address("中国", "北京");
        family1 = new Family("儿子", "张大明");
        family2 = new Family("女儿", "张丽丽");
        familyList = new ArrayList<Family>();
        familyList.add(family1);
        familyList.add(family2);
        person = new Person("4", "文勇", "张", address, familyList);
        personRepository.save(person);

        System.out.println("成功地添加了4条记录~");
     }

说明:在这个测试方法里,测试了personRepository的save()方法

运行测试方法,查看结果
在这里插入图片描述
在命令行窗口启动redis服务
在这里插入图片描述
运行测试方法,查看结果
在这里插入图片描述
打开Redis可视化工具查看
在这里插入图片描述
在这里插入图片描述
2、创建测试方法testFindAll()
在这里插入图片描述
运行测试方法,查看结果
在这里插入图片描述
3、测试personRespository的其它方法
创建测试方法testFindById()
在这里插入图片描述
运行测试方法,查看结果
在这里插入图片描述

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

1、在PersonRepository接口定义方法

package net.zl.lesson08.repository;

import net.zl.lesson08.bean.Person;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

/**
 * 功能:人仓库接口
 * 作者:周璐
 * 日期:2021年05月17日
 */
public interface PersonRepository extends CrudRepository<Person,String> {
    //自定义个性化查询,方法名需要符合特定的规范
    public List<Person> findByLastName(String lastName);
    public Page<Person> findPersonByLastName(String lastName, Pageable pageable);
    public List<Person> findPersonByLastNameAndFirstName(String lastName, String firstName);
    List<Person> findByAddress_City(String city);
    List<Person> findByFamilyList_Name(String name);
 }

2、在测试类创建测试方法testFindPersonByLastName()
在这里插入图片描述

@Test
    public void testFindPersonByLastName(){
        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()
查找“唐雨涵”
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值