spring boot 整合redis

1.在pom文件中添加spring-boot-starter-data-redis依赖启动器

XML 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

2.编写三个实体类

Person类

java 复制代码
@RedisHash("persons")  // 指定操作实体类对象在Redis数据库中的存储空间
public class Person {

    @Id// 标识实体类主键
    private String id;
    // 标识对应属性在Redis数据库中生成二级索引,索引名就是属性名,可以方便地进行数据条件查询
    @Indexed
    private String firstname;
    @Indexed
    private String lastname;
    private Address address;
    private List<FamilyMember> familyMemberList;

    public Person() {    }

    public Person(String firstname, String lastname) {

        this.firstname = firstname;
        this.lastname = lastname;

    }

    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<FamilyMember> getFamilyMemberList() {
        return familyMemberList;
    }

    public void setFamilyMemberList(List<FamilyMember> familyMemberList) {
        this.familyMemberList = familyMemberList;
    }

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

Address 地址类

java 复制代码
public class Address {

    @Indexed
    private String city;
    @Indexed
    private String country;

    public Address() {

    }

    /**
     *
     * @param city 城市
     * @param country 国家
     */
    public Address(String city, String country) {

        this.city = city;
        this.country = 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 + '\'' +
                '}';
    }
}

FamilyMember 家庭成员类

java 复制代码
public class FamilyMember {

    @Indexed
    private String type;

    @Indexed
    private String username;

    public FamilyMember() {
    }

    public FamilyMember(String type, String username) {
        this.type = type;
        this.username = 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 "FamilyMember{" +
                "type='" + type + '\'' +
                ", username='" + username + '\'' +
                '}';
    }
}

3.编写Repository接口

不需要添加spring-boot-starter-data-jpa这个依赖,即:

XML 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

只要继承CrudRepository即可,如下:

java 复制代码
public interface PersonRepository extends CrudRepository<Person, String> {

    List<Person> findByLastname(String lastname);

    Page<Person> findPersonByLastname(String lastname, Pageable page);

    List<Person> findByFirstnameAndLastname(String firstname, String lastname);

    List<Person> findByAddress_City(String city);

    List<Person> findByFamilyMemberList_Username(String username);

}

4.在全局配置文件application.properties中添加Redis数据库连接配置

复制代码
# Redis服务器地址
spring.redis.host=127.0.0.1

# Redis服务器连接端口
spring.redis.port=6379

# Redis服务器连接密码(默认为空)
spring.redis.password=

5.编写单元测试进行接口方法测试以及整合测试

java 复制代码
@SpringBootTest
class RedisTests {

   @Autowired
    private PersonRepository personRepository;

   @Test
    public void testSave(){

       Person person1 = personRepository.save(new Person("James", "Harden"));
       System.out.println(person1);

       Person person2 = new Person("张", "有才");

       Address address = new Address("北京", "中国");
       person2.setAddress(address);

       //创建并添加家庭成员
       FamilyMember familyMember1 = new FamilyMember("父亲", "张朝阳");
       FamilyMember familyMember2 = new FamilyMember("母亲", "王美美");

       ArrayList<FamilyMember> familyMembers = new ArrayList<>();
       familyMembers.add(familyMember1);
       familyMembers.add(familyMember2);
       person2.setFamilyMemberList(familyMembers);

       System.out.println(personRepository.save(person2));

   }

    @Test
    public void selectPerson() {

        List<Person> list = personRepository.findByAddress_City("北京");
        System.out.println(list);

    }

    @Test
    public void updatePerson() {

        Person person = personRepository.findByFirstnameAndLastname("张","有才").get(0);
        person.setLastname("小明");
        Person update = personRepository.save(person);
        System.out.println(update);

    }

    @Test
    public void deletePerson() {

        Person person = personRepository.findByFirstnameAndLastname("张","小明").get(0);
        personRepository.delete(person);

    }
}
相关推荐
怡人蝶梦34 分钟前
Spring Boot启动慢?Redis缓存击穿?Kafka消费堆积?——Java后端常见问题排查实战
java·jvm·redis·kafka·springboot·prometheus·microservices
纪元A梦1 小时前
Redis最佳实践——安全与稳定性保障之数据持久化详解
数据库·redis·安全
夜影风1 小时前
Redis持久化机制
数据库·redis·缓存
Wilson Chen1 小时前
告别硬编码!用工厂模式优雅构建可扩展的 Spring Boot 应用 [特殊字符]
java·spring boot·spring
Zfox_1 小时前
Redis:功能特性和应用场景
服务器·数据库·redis·缓存·微服务
crud2 小时前
Spring Boot 定时任务全攻略:从入门到实战,一篇文章讲清楚!
spring boot
bing_1582 小时前
当 Redis 作为缓存使用时,如何保证缓存数据与数据库(或其他服务的数据源)之间的一致性?
数据库·redis·缓存
风象南4 小时前
SpringBoot数据转换的4种对象映射方案
java·spring boot·后端
JAdroid4 小时前
spring-boot redis lua脚本实现滑动窗口限流
数据库·spring boot·redis·spring·lua·redisson
Code哈哈笑5 小时前
【基于SpringBoot的图书购买系统】Redis中的数据以分页的形式展示:从配置到前后端交互的完整实现
java·spring boot·redis·后端·spring·交互