Home > Database > Redis > How to integrate SpringBoot and Redis

How to integrate SpringBoot and Redis

王林
Release: 2023-05-30 12:03:40
forward
801 people have browsed it

Integration of SpringBoot and non-relational database Redis

(1) Add Spring Data Redis dependency starter

How to integrate SpringBoot and Redis

Introduce this dependency to create a project, The following dependencies will appear in the project pom.xml file:

How to integrate SpringBoot and Redis

(2) Write the entity class

Person:

package com.hardy.springbootdataredis.domain;import org.springframework.data.annotation.Id;import org.springframework.data.redis.core.RedisHash;import org.springframework.data.redis.core.index.Indexed;/**
 * @Author: HardyYao
 * @Date: 2021/6/15 */@RedisHash("persons")   // 指定操作实体类对象在Redis数据库中的存储空间public class Person {

    @Id // 标识实体类主键private String id;

    @Indexed // 标识对应属性在Redis数据库中生成二级索引private String firstname;

    @Indexedprivate String lastname;private Address address;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;
    }

    @Overridepublic String toString() {return "Person{" +
                "id='" + id + ''' +
                ", firstname='" + firstname + ''' +
                ", lastname='" + lastname + ''' +
                ", address=" + address +
                '}';
    }
}
Copy after login

Address:

package com.hardy.springbootdataredis.domain;import org.springframework.data.redis.core.index.Indexed;/**
 * @Author: HardyYao
 * @Date: 2021/6/15 */public class Address {

    @Indexedprivate String city;

    @Indexedprivate 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;
    }

    @Overridepublic String toString() {return "Address{" +
                "city='" + city + ''' +
                ", country='" + country + ''' +
                '}';
    }
}
Copy after login

In the above two entity classes, several annotations about data operations of the Redis database are involved:

  • @RedisHash("persons"): used to specify Manipulate the storage space of entity class objects in the Redis database. Here, it means that data operations for the Person entity class are stored in the storage space named persons in the Redis database.

  • @Id: used to identify the primary key of the entity class. In the Redis database, a HashKey in the form of a string is generated by default to represent the unique entity object ID. Of course, the ID can also be manually specified during data storage.

  • @Indexed: Used to specify to generate a secondary index for the corresponding attribute in the Redis database. When this annotation is used, the secondary index corresponding to the attribute will be generated in the database, which will make data query simple. The index name is the same as the attribute name.

(3) Writing the Repository interface

SpringBoot provides automated configuration for some common databases including Redis, which can simplify the data in the database by implementing the Repository interface. Perform operations of adding, deleting, checking and modifying:

package com.hardy.springbootdataredis.repository;import com.hardy.springbootdataredis.domain.Person;import org.springframework.data.repository.CrudRepository;import java.util.List;/**
 * @Author: HardyYao
 * @Date: 2021/6/15 */public interface PersonRepository extends CrudRepository<Person, String> {

    List<Person> findByAddress_City(String City);

}
Copy after login

Note: The Repository interface class written when operating the Redis database needs to inherit the lowest level CrudRepository interface instead of inheriting JpaRepository (JpaRepository is SpringBoot integrated JPA Unique). Of course, you can also import the JPA dependencies and Redis dependencies integrated by SpringBoot into the project pom.xml file at the same time, so that you can write an interface that inherits the JpaRepository interface to operate the Redis database.

(4) Redis database connection configuration

Add the Redis database connection configuration in the project’s global configuration file application.properties. The sample code is as follows:

# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
Copy after login

(5) Write unit test method

package com.hardy.springbootdataredis;import com.hardy.springbootdataredis.domain.Address;import com.hardy.springbootdataredis.domain.Person;import com.hardy.springbootdataredis.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.List;

@SpringBootTestclass SpringbootdataRedisApplicationTests {

    @Autowiredprivate PersonRepository repository;

    @Testpublic void savePerson() {
        Person person = new Person();
        person.setFirstname("张");
        person.setLastname("三");
        Address address = new Address();
        address.setCity("北京");
        address.setCountry("中国");
        person.setAddress(address);// 向Redis数据库添加数据Person save = repository.save(person);
    }

    @Testpublic void selectPerson() {
        List<Person> list = repository.findByAddress_City("北京");for (Person person : list) {
            System.out.println(person);
        }
    }

}
Copy after login

(6) Integration test

Open the Redis client visual management tool, first connect to the local Redis server:

How to integrate SpringBoot and Redis

After the connection is successful, you can see that there is no data in the local Redis database:

How to integrate SpringBoot and Redis

Run the two test methods written above and view the console print results:

How to integrate SpringBoot and Redis

In order to verify that the save() method has indeed written the data to the local Redis database, open the Redis client visual management tool, refresh the data, and you can see that the data is successful. Written:

How to integrate SpringBoot and Redis

# As can be seen from the above figure: the data added by executing the save() method is successfully stored in the Redis database. In addition, a secondary index similar to address.city, firstname, lastname, etc. is formed on the left side of the database list. These secondary indexes are generated by adding the @Indexed annotation to the corresponding attributes when creating the Person class. At the same time, since the secondary index corresponding to the attribute is generated in the Redis database, specific data information can be queried through the secondary index. For example, repository.findByAddress_City ("Beijing") queries the data whose index value is Beijing through the address.city index. information. If the secondary index of the corresponding attribute is not set, the data result queried through the attribute index will be empty.

The above is the detailed content of How to integrate SpringBoot and Redis. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template