首页 > 其他分享 >一台服务器上的请求操作,广播到多台服务器同样执行

一台服务器上的请求操作,广播到多台服务器同样执行

时间:2024-12-24 09:53:47浏览次数:3  
标签:org redis springframework 一台 import 服务器 多台 public

有些小量数据并非放在redis这样的缓存里的,因为数据量百万千万时,若是要比对数据,岂不是要让这个小数据和大数据进行百万千万次的交互比对。那就不如把小数据提前加载到本地内存或者缓存,如果小数据需要更新,则可以定时job更新或者手动用接口更新,或者数据发生变化时调用更新。可是如果你的服务部署在两台,三台,四台···服务器上呢,客户端请求过来时,被nginx反向代理等等负载均衡到其中某一台服务器,那么你的本地缓存刷新只会在这一台更新。如果场景等不及每台服务器上的缓存数据被定时任务刷新,那么就需要借助一些广播

其实逃不掉某些东西。不用全局的,就还得用能够全局的东西来告诉各个本地。无论你是用kafka生产者发到topic上,然后每台服务器上监听消费这个topic信息,从而知道某台服务器的内存/缓存刷新了,我们也刷新。或者用redis广播推送,然后各个地方订阅了解到有刷新动向,那就也同步刷新。具体的还要看项目


这里我举例一下redis的情况吧:

引入 Redis 依赖: 在 pom.xml 文件中添加 Redis 依赖:

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

配置 Redis: 在 application.yml 中添加 Redis 配置:

spring:
  redis:
    host: localhost
    port: 6379

创建 Redis 发布者:

import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

@Service
public class RedisPublisherService {
    private final StringRedisTemplate redisTemplate;

    public RedisPublisherService(StringRedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void publishRefreshMessage() {
        redisTemplate.convertAndSend("refreshChannel", "refresh");
    }
}

Redis 订阅者:

import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Service;

@Service
public class RedisSubscriberService implements MessageListener {
    private final ShieldDidAndModelCache shieldDidAndModelCache;

    public RedisSubscriberService(ShieldDidAndModelCache shieldDidAndModelCache) {
        this.shieldDidAndModelCache = shieldDidAndModelCache;
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        String msg = new String(message.getBody());
        if ("refresh".equals(msg)) {
            shieldDidAndModelCache.loadShieldDidCache();
            shieldDidAndModelCache.loadShieldModelCache();
        }
    }
}

配置 Redis 消息监听器: 在配置类中配置 Redis 消息监听器。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;

@Configuration
public class RedisConfig {

    @Bean
    public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
                                                   MessageListenerAdapter listenerAdapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(listenerAdapter, new ChannelTopic("refreshChannel"));
        return container;
    }

    @Bean
    public MessageListenerAdapter listenerAdapter(RedisSubscriberService subscriberService) {
        return new MessageListenerAdapter(subscriberService);
    }
}

在需要刷新时发送消息: 在需要主动刷新时调用 RedisPublisherService 的 publishRefreshMessage 方法。

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.ResponseEntity;

@RestController
public class RefreshController {
    private final RedisPublisherService redisPublisherService;

    public RefreshController(RedisPublisherService redisPublisherService) {
        this.redisPublisherService = redisPublisherService;
    }

    @PostMapping("/refresh")
    public ResponseEntity<String> refresh() {
        redisPublisherService.publishRefreshMessage();
        return ResponseEntity.ok("Refresh message sent");
    }
}

通过以上配置,当你在任意一台服务器上发送刷新请求时,Redis 会将消息广播到所有订阅的服务器,确保每台服务器都执行刷新操作。

标签:org,redis,springframework,一台,import,服务器,多台,public
From: https://www.cnblogs.com/jhfnewstart/p/18626697

相关文章

  • 实践项目-Ansible+Playbook自动化部署服务器上线
    (241223)环境系统ip主机名域名debian12.8192.168.100.6ansible-mainansible-main.example.comdebian12.8192.168.100.12ansible-node1ansible-node1.example.comdebian12.8192.168.100.15ansible-node2ansible-node2.example.comdebian12.8192.168.......
  • 自建Anki服务器,并用AnkiDroid连接,解决error sending request for url()或用户名或密码
    说明参考:https://www.gerenbiji.com/blog/2024年/自建Anki同步服务器/官方文档:https://docs.ankiweb.net/sync-server.html环境:RockyLinuxx86平台方案:使用官方桌面客户端自带的服务器1.下载官方客户端https://apps.ankiweb.net/2.运行命令SYNC_USER1=[用户名1]:[明......
  • 如何在服务器上克隆、pull、push GitHub私有项目
    诸神缄默不语-个人CSDN博文目录情况是这样的,我直接用gitclone命令后,会提示让我输入GitHub账号密码,我输入后它还是显示克隆失败,并显示:Cloninginto'folder_name'...Usernamefor'https://github.com':user_namePasswordfor'https://user_name@github.com':remote......
  • 哪里有200多IP站群服务器?
    寻找拥有200多个独立公网出口IP的站群服务器?地区选择香港:香港站群服务器在亚洲、欧洲和美国的使用速度都非常快,适合企业部署全球产品和服务。香港网际互联网发展迅速,是世界上重要的互联网中心枢纽节点,已经部署了直接连线大陆的cn2专线频宽。此外,香港站群服务器的频......
  • 惊!香港服务器租用托管,超乎想象的性价比之选
    香港服务器租用与托管确实以其优越的地理位置、丰富的带宽资源、以及稳定可靠的网络环境,成为了许多企业和个人用户的性价比之选。一、香港服务器租用定义与特点香港服务器租用是指用户通过支付租金,获得一台或多台服务器的使用权。租用的服务器通常包含较高品质的硬件配置,如高......
  • 香港站群服务器的卓越特性与优势
    香港站群服务器,特别是指那些坐落于香港TKO数据中心的服务器设备,是专为托管众多网站或子网站而精心设计的。这些服务器不仅功能强大,还非常适合大型网站或企业使用,因为它们能够为用户提供卓越的稳定性和访问速度。以下是对香港站群服务器几大核心优势的深入剖析:一、得天独厚的地理......
  • 我的世界服务器搭建教程 兼容Paper核心 兼容Spigot核心
    注意:该服务器是基于Paper1.20.1核心进行初始化,默认兼容spigot插件。一、配置JDK环境二、服务器核心配置三、服务器启动四、加入游戏现在搭建出来的是原版生存服务器,接下来需要进行安装各种插件,包含登录认证;经济;商店;圈地;传送;多地图等可玩性插件。具体内容请看下一章。......
  • uvicorn:ASGI服务器的极速之选
    嗨,小伙伴们好!今天我要给大家介绍一个超级好用的PythonASGI服务器——uvicorn。它就像是给你的Web应用装上了一个超级引擎,让你的应用跑得又快又稳。不管是开发环境还是生产环境,uvicorn都能帮你轻松应对高并发场景。如果你正在用FastAPI或者其他ASGI框架,uvicorn绝对是你的最佳......
  • 国标GB28181视频平台EasyCVR关于服务器端如何配置以支持更好的RTSP流传输?
    在现代视频监控系统中,RTSP流传输因其实时性和高效性被广泛应用于各种场景。然而,为了确保服务器端能够支持更好的RTSP流传输,并在Web端实现流畅播放,需要进行一系列的配置和优化。本文将详细介绍服务器端配置的最佳实践,以及如何利用EasyCVR平台解决RTSP在Web端的播放问题。一、服务......
  • CentOS7下的vsftpd服务器和客户端
    目录1、安装vsftpd服务器和ftp客户端;2、配置vsftpd服务器,允许普通用户登录、下载、上传文件;3、配置vsftpd服务器,允许anonymous用户登录、下载、上传文件;4、配置vsftpd服务器,允许root用户登录、下载、上传文件;5、只允许IP地址为192.168.98.1(Windows主机)和192.168.98.33(Linu......