Helpex - Trao đổi & giúp đỡ Đăng nhập

Sử dụng Spring Data Redis trong Spring Boot 2.0 để viết một truy vấn tùy chỉnh

Tom lược

  • Redis (Máy chủ từ điển từ xa) là một dự án cấu trúc dữ liệu trong bộ nhớ thực hiện cơ sở dữ liệu khóa-giá trị phân tán, trong bộ nhớ với độ bền tùy chọn. Redis hỗ trợ các loại cấu trúc dữ liệu trừu tượng khác nhau, chẳng hạn như chuỗi, danh sách, bản đồ, tập hợp, tập hợp được sắp xếp, HyperLogLogs, bitmap, luồng và chỉ mục không gian.
  • Spring Boot là giải pháp cấu hình vượt quy ước của Spring để tạo các Ứng dụng dựa trên Spring cấp sản xuất, độc lập mà bạn có thể "chỉ cần chạy". Nó được định cấu hình trước với "quan điểm kiên định" của nhóm Spring về cấu hình tốt nhất và việc sử dụng nền tảng Spring cũng như các thư viện của bên thứ ba để bạn có thể bắt đầu với ít phiền phức nhất. Hầu hết các ứng dụng Spring Boot cần rất ít cấu hình Spring.
  • Khung truy cập dữ liệu của Spring giải quyết những khó khăn chung mà các nhà phát triển gặp phải khi làm việc với cơ sở dữ liệu trong các ứng dụng. Hỗ trợ được cung cấp cho tất cả các khung truy cập dữ liệu phổ biến trong Java: JDBC, iBatis / MyBatis, Hibernate, Java Data Objects (JDO), Java Persistence API (JPA), Oracle TopLink, Apache OJB và Apache Cayenne, trong số những người khác.

Tải xuống và cài đặt Redis

  • Đối với Linux, bạn có thể dễ dàng tải xuống phiên bản mới nhất (5.0) từ đây .
  • Nếu bạn sử dụng Windows 10, bạn có thể hưởng lợi hình ảnh docker, có thể truy cập từ đây .

và sau đó chạy nó:

$ docker run -d --name redis -p 6379:6379 redis

6379 là một cổng mặc định mà bạn có thể thay đổi nó thành bất cứ thứ gì bạn muốn.

  • Nếu bạn sử dụng Windows 7, bạn chỉ có thể sử dụng Redis phiên bản 4.0 trở xuống NHƯNG KHÔNG PHẢI là phiên bản mới nhất (5.0). Có thể tải xuống tệp .msi và tệp zip của Redis phiên bản 4.0.2 từ đây .

Sau khi cài đặt phiên bản .msi, bạn sẽ thấy redis-server và redis-cli, tương ứng sẽ chạy máy chủ và mô-đun khách của Redis.

Dự án khởi động mùa xuân bắt đầu

Để bắt đầu một dự án Spring Boot mới nếu bạn sử dụng maven, bạn chỉ cần một pom.xml như sau:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-spring-boot</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Để có mã rõ ràng, tôi khuyên bạn nên sử dụng Lombok. Để biết thêm thông tin, hãy xem điều này .

<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.18.0</version>
   <optional>true</optional>
</dependency>

Chuẩn bị Dự án cho Redis

Một cách dễ dàng để kết nối dự án Spring Boot của bạn với Redis là sử dụng Spring Data Redis, vì vậy chúng tôi cần thêm nó vào pom.xml:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Chúng tôi có hai tùy chọn làm trình kết nối:

  1. Rau diếp

  2. Jedis

Nếu bạn chọn Diếp cá, bạn không cần thêm bất kỳ phụ thuộc nào khác vào Maven vì Dữ liệu mùa xuân, theo mặc định, sử dụng điều này và nó được nhúng vào phụ thuộc ở trên. Vì vậy, chúng tôi chọn những gì dễ dàng hơn.

Để kích hoạt kho lưu trữ Spring Data Redis, chúng ta cần có một lớp cấu hình phải được chú thích bằng @Configuration và @EnableRedisRepositories.

Trong lớp này, chúng ta phải khai báo bean RedisTemplate, kho lưu trữ CRUD đã sử dụng nó để tích hợp với Redis. Chúng tôi cũng sẽ sử dụng nó để thực hiện các truy vấn tùy chỉnh.

Bạn có thể dễ dàng sử dụng LethalConnectionFactory () để tạo nhà máy hoặc nếu bạn muốn có thêm cấu hình, như chọn địa chỉ máy chủ và cổng, bạn phải sử dụng RedisStandaloneConfiguration () như bên dưới:

@Bean
public LettuceConnectionFactory redisConnectionFactory() {

    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(hostName, port);
    return new LettuceConnectionFactory(redisStandaloneConfiguration);

}

Khi bạn đang tạo restTemplate, bạn có thể định cấu hình tuần tự hóa và giải mã hóa và chúng tôi sử dụng JdkSerializationRedisSerializer cho mục đích này:

@Bean
public RedisTemplate<?, ?> redisTemplate() {

    RedisTemplate<String, Object> template = new RedisTemplate<>();
    RedisSerializer<String> stringSerializer = new StringRedisSerializer();
    JdkSerializationRedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer();

    template.setConnectionFactory(redisConnectionFactory());

    template.setKeySerializer(stringSerializer);
    template.setHashKeySerializer(stringSerializer);

    template.setValueSerializer(jdkSerializationRedisSerializer);
    template.setHashValueSerializer(jdkSerializationRedisSerializer);

    template.setEnableTransactionSupport(true);
    template.afterPropertiesSet();


    return template;

}

Triển khai DAO

Trước hết, chúng ta cần tạo một số lớp thực thể, lớp này sẽ ánh xạ tới cấu trúc dữ liệu của Redis. Với mục đích này, chúng ta cần chú thích lớp bằng @RedisHash.

Ngoài ra, để xác định trường id, chúng tôi sử dụng @Id. Nếu bạn muốn lập chỉ mục một số trường khác ngoài id, bạn có thể chú thích nó bằng @Indexed, đây cũng có thể là một danh sách hoặc bản đồ.

@Data
@NoArgsConstructor
@RedisHash("User")
public class User implements Serializable{

    @Id
    private Long id;

    private String name;
    private String surname;
    private String age;


    public User(Long id, String name, String surname, String age) {

        this.id = id;
        this.name = name;
        this.surname = surname;
        this.age = age;

    }
}

Triển khai Kho lưu trữ

May mắn thay, Spring Data đã triển khai các phương pháp CRUD cho chúng tôi. Chúng ta có thể dễ dàng sử dụng chúng chỉ bằng cách tạo một giao diện, mở rộng CrudRepository.

Bằng cách sử dụng tính năng này của Spring Data, chúng ta cũng có thể khai báo các truy vấn phức tạp hơn findById () hoặc Save ().

Danh sách các từ khóa được hỗ trợ ở đây:
Sử dụng Spring Data Redis trong Spring Boot 2.0 để viết một truy vấn tùy chỉnh

Để biết thêm thông tin, vui lòng xem điều này .

Nếu bạn muốn có nhiều truy vấn tùy chỉnh hơn, bạn có thể tự làm điều đó bằng cách sử dụng redisTemplate, như sau:

@Repository
public class UserDaoImpl implements UserDao {

    @Autowired
    UserRepository userRepository;

    @Autowired
    RedisTemplate redisTemplate;

    private static final String KEY = "user";

    public Boolean saveRule(User user) {
        try {
            Map ruleHash = new ObjectMapper().convertValue(user, Map.class);
            redisTemplate.opsForHash().put(KEY, user.getName(), ruleHash);
            return true;

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public User findByName(String name) {

        Map userMap = (Map) redisTemplate.opsForHash().get(KEY, name);
        User user = new ObjectMapper().convertValue(userMap, User.class);
        return user;
    }

}

Và tất nhiên bộ điều khiển của chúng tôi là một cái gì đó như thế này:

@RestController
@RequestMapping("/api")
public class UserController {


    @Autowired
    AuthorizationService authorizationService;


    @RequestMapping(value = "/addUser", method = RequestMethod.POST)
    public ResponseEntity<String> addUser(@RequestBody User User) {

        ModelMapper modelMapper = new ModelMapper();
        User user = modelMapper.map(User, User.class);


        Boolean result = authorizationService.saveRule(user);
        if (result) {
            return ResponseEntity.ok("A new user is saved!!!");
        } else {
            return ResponseEntity.ok("An error occured!!!");
        }

    }


    @RequestMapping(value = "/findUser", method = RequestMethod.POST)
    public ResponseEntity<User> findUser(@RequestBody User User) {

        ModelMapper modelMapper = new ModelMapper();
        User user = modelMapper.map(User, User.class);

        User result = authorizationService.findByName(user.getName());

        return ResponseEntity.ok(result);


    }

Mã nguồn

Mã nguồn ứng dụng mẫu có sẵn trên GitHub của tôi trong kho lưu trữ này:

https://github.com/omidhaghighatgoo/SpringBoot-SpringData-Redis

12 hữu ích 0 bình luận 50k xem chia sẻ

Có thể bạn quan tâm

loading