当前位置: 首页 > news >正文

信息发布网站有哪些微信微商软件

信息发布网站有哪些,微信微商软件,企业建设网站例文,wordpress 指定审核人1. Redis存储设计 我们需要在 Redis 中存储以下信息&#xff1a; 配置列表&#xff08;List<Config>&#xff09;&#xff1a;存储所有配置项。总权重&#xff1a;存储所有配置的总权重。当前轮询状态&#xff1a;存储当前的轮询状态&#xff08;如当前随机值或索引&am…
1. Redis存储设计

我们需要在 Redis 中存储以下信息:

  • 配置列表(List<Config>):存储所有配置项。
  • 总权重:存储所有配置的总权重。
  • 当前轮询状态:存储当前的轮询状态(如当前随机值或索引)。

2. 实现加权轮询

以下是改进后的代码,使用 Redis 来存储和管理状态。

WeightedConfigSelector
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Random;@Service
public class WeightedConfigSelector {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Autowiredprivate NebulaProperties nebulaProperties;private static final String CONFIG_LIST_KEY = "nebula:config_list";private static final String TOTAL_WEIGHT_KEY = "nebula:total_weight";/*** 初始化配置到 Redis 中*/public void initialize() {List<NebulaProperties.Config> configs = nebulaProperties.getConfig();// 将配置列表存储到 Redis 中  redisTemplate.delete(CONFIG_LIST_KEY); // 清空旧数据  configs.forEach(config -> redisTemplate.opsForList().rightPush(CONFIG_LIST_KEY, config));// 计算总权重并存储  int totalWeight = configs.stream().mapToInt(NebulaProperties.Config::getWeight).sum();redisTemplate.opsForValue().set(TOTAL_WEIGHT_KEY, totalWeight);}/*** 根据权重从 Redis 中选择配置*/public NebulaProperties.Config selectConfig() {if (Boolean.FALSE.equals(redisTemplate.hasKey(CONFIG_LIST_KEY))) {initialize();}// 获取总权重  Integer totalWeight = (Integer) redisTemplate.opsForValue().get(TOTAL_WEIGHT_KEY);if (totalWeight == null || totalWeight == 0) {throw new RuntimeException("Total weight is zero or not initialized.");}// 随机生成一个值  int rand = new Random().nextInt(totalWeight);// 遍历配置列表,根据权重选择配置  List<Object> configList = redisTemplate.opsForList().range(CONFIG_LIST_KEY, 0, -1);if (configList == null || configList.isEmpty()) {throw new RuntimeException("No configs available in Redis.");}for (Object obj : configList) {NebulaProperties.Config config = (NebulaProperties.Config) obj;rand -= config.getWeight();if (rand < 0) {return config;}}return null; // 不应该到达这里  }
}

3. 控制器使用示例

在控制器中调用 WeightedConfigSelectorselectConfig 方法来获取加权选择的配置。

ConfigController
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConfigController {@Autowiredprivate WeightedConfigSelector weightedConfigSelector;@GetMapping("/getConfig")public NebulaProperties.Config getConfig() {return weightedConfigSelector.selectConfig();}
}

4. 注意事项

  1. 性能优化
    • 如果配置列表较大,可以将配置列表缓存到本地内存中,并定期从 Redis 同步更新。
  2. 配置变更
    • 如果配置发生变更(如新增或删除配置),需要重新调用 initialize 方法将最新配置同步到 Redis。
  3. 线程安全
    • Redis 的操作是线程安全的,因此可以放心在多线程环境中使用。

5. 总结

通过将配置列表和状态存储在 Redis 中,我们实现了一个支持分布式系统的加权轮询算法。Redis 的高性能和分布式特性确保了多个实例之间的状态一致性,同时 Spring Data Redis 提供了便捷的操作接口,简化了开发流程。

http://www.yayakq.cn/news/362157/

相关文章:

  • 做网站app需要懂些什么网络营销是什么专业类别
  • 中国免费企业建站wordpress 修改目录权限设置
  • 济南制作网站的公司哪家好ppt代写平台
  • 营销型网站如何策划云主机挂游戏
  • 推荐 网站空间wordpress半透明二次元
  • 哪个网站能把图片拼凑起来做gif的公众号制作多少钱
  • 深圳网站建设-新奇网络中级网络工程师含金量
  • 做详情页到那个网站找模特素材网站建设教程在线
  • 网站外链分析工具哈尔滨公司网站开发
  • 《网站建设验收报告》厦门好的网站设计
  • 个体户网站建设国外开源商城系统
  • 网站质量度桂林 网站 制作
  • 个人网站 备案 攻略上海专业网站建设费
  • 自己的网站怎么做模板网页设计程序
  • 泽州网站设计手机免费代理ip
  • 小学校园文化建设网站网站开发所需配置
  • 网站建设的投资必要性网站建设评估体系
  • 温州哪里做网站比较好扁平化网站导航ui模板
  • 建设电子票务系统的网站需要多少钱如何做网站授权网址
  • 建设银行网站能买手机app软件开发制作公司电话
  • 好建设网站如何做微网站平台
  • 自己动手创建一个公司网站中国域名是
  • 珠海网站建设方案报价wordpress文章存在哪个数据库中
  • 品牌网站建设网站开发一般用什么数据库
  • flash 网站a0000网站建设
  • 做黑帽需不需要搭建网站网站开发实训结果分析及其心得体会
  • 做的好微信商城网站吗品牌网站建站公司
  • vue做视频网站小程序网站开发怎么样
  • 公司网站应该怎么做线上线下购物商城系统
  • 兰州网站建设论坛fview网站开发