专业的编程技术博客社区

网站首页 > 博客文章 正文

springboot 将mysql 同步数据 到redis 里

baijin 2024-08-26 10:18:16 博客文章 5 ℃ 0 评论

大家好,今天给分享下关于Mysql 数据库中数据写入到redis中的例子。

要实现将 MySQL 数据库表中的用户数据修改同步到 Redis 中,你可以在 Spring Boot 的项目中使用数据库事件监听器(如 Spring Data JPA 的 @EventListener)来捕获数据库表数据的修改事件,然后在事件监听方法中执行相应的 Redis 更新操作。以下是一个简单示例的代码:

首先,你需要在项目中引入 Redis 和 MySQL 的相关依赖。在 Maven 项目的 pom.xml 文件中添加如下依赖(如果已经添加过,则无需重复添加):

<dependencies>
    <!-- Redis 相关依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
    </dependency>

    <!-- MySQL 相关依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>

接着,在 Spring Boot 的配置文件(application.properties 或 application.yml)中配置 Redis 和 MySQL 的连接信息,与之前的示例保持一致。

然后,创建一个 UserModifyListener 类用于监听用户数据的修改事件和执行 Redis 的更新操作,示例如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class UserModifyListener {
    @Autowired
    private RedisTemplate<String, User> redisTemplate;

    @EventListener
    public void handleUserModifyEvent(UserModifyEvent event) {
        User user = event.getUser();
        redisTemplate.opsForValue().set("user:" + user.getId(), user);
    }
}

在上述代码中,UserModifyEvent 是一个自定义的事件类,用于封装用户数据修改事件的相关信息,其中包括修改后的用户对象。RedisTemplate 用于操作 Redis 的模板类。

接下来,你需要定义一个 UserModifyEvent 类作为用户数据修改事件的实体类。示例代码如下:

import org.springframework.context.ApplicationEvent;

public class UserModifyEvent extends ApplicationEvent {
    private User user;

    public UserModifyEvent(Object source, User user) {
        super(source);
        this.user = user;
    }

    public User getUser() {
        return user;
    }
}

最后,在修改用户数据的方法中,你需要触发 UserModifyEvent 事件,并传递修改后的用户对象。示例代码如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
  
    @Autowired
    private ApplicationEventPublisher eventPublisher;

    public User updateUser(User user) {
        // 更新用户数据到数据库
        User updatedUser = userRepository.save(user);

        // 触发用户数据修改事件
        eventPublisher.publishEvent(new UserModifyEvent(this, updatedUser));

        return updatedUser;
    }
}

在上述代码中,ApplicationEventPublisher 负责发布事件,UserRepository 是用于操作 MySQL 中的用户表的接口。

当你调用 updateUser 方法来更新用户数据时,会先将数据更新到数据库中,然后触发 UserModifyEvent 事件,并传递修改后的用户对象。UserModifyListener 中的事件监听方法就会捕获到该事件,将修改后的用户数据同步更新到 Redis 中。

请注意,以上只是一个简单示例,你可以根据实际需求进行更复杂的逻辑处理和错误处理。另外,需要确保在更新用户数据时,ApplicationEventPublisher 能够正确注入,否则事件发布可能会失败。

谢谢,给与支持,分享,点赞!!!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表