Administrator
2025-12-11 dfd766139d37b0bd038288952cb24df76f4289f9
feat(redis): 添加带延迟的Redis读取方法以提高数据一致性

- 在RedisUtils中新增getWithDelay和getStringWithDelay方法
- 修改CaoZuoServiceImpl和TradeOrderWs中的Redis读取逻辑
- 添加50ms延迟确保Redis数据同步完成
- 优化Redis读取方法的空值处理逻辑
- 重构RedisUtils类中的字符串获取方法
3 files modified
23 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/TradeOrderWs.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/RedisUtils.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/okxNewPrice/celue/CaoZuoServiceImpl.java
@@ -54,7 +54,7 @@
        String state = (String) redisUtils.get(instrumentsStateKey);
        log.info("开始执行操作CaoZuoServiceImpl......{}",state);
        String live = (String) redisUtils.get(TradeOrderWs.ORDERWS_CHANNEL + ":" + CoinEnums.HE_YUE.getCode() + ":state");
        String live = (String) redisUtils.getWithDelay(TradeOrderWs.ORDERWS_CHANNEL + ":" + CoinEnums.HE_YUE.getCode() + ":state");
        if (!CoinEnums.ORDER_LIVE.getCode().equals( live)){
            log.warn("正在下单中,等待下单结束...");
        }
src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/TradeOrderWs.java
@@ -28,7 +28,7 @@
            log.warn("止损了,下次再战...");
            return;
        }
        String live = (String) redisUtils.get(ORDERWS_CHANNEL + ":" + CoinEnums.HE_YUE.getCode() + ":state");
        String live = (String) redisUtils.getWithDelay(ORDERWS_CHANNEL + ":" + CoinEnums.HE_YUE.getCode() + ":state");
        if (!CoinEnums.ORDER_LIVE.getCode().equals( live)){
            log.warn("正在下单中,等待下单结束...");
        }
src/main/java/com/xcong/excoin/utils/RedisUtils.java
@@ -88,6 +88,9 @@
     * @return 值
     */
    public Object get(String key) {
        return key == null ? null : redisTemplate.opsForValue().get(key);
    }
    public Object getWithDelay(String key) {
        // 在读取前添加短暂延迟
        try {
            Thread.sleep(50); // 等待50ms让Redis同步完成
@@ -103,7 +106,7 @@
     * @param key 键
     * @return 值
     */
    public String getString(String key) {
    public String getStringWithDelay(String key) {
        // 在读取前添加短暂延迟
        try {
            Thread.sleep(50); // 等待50ms让Redis同步完成
@@ -117,6 +120,20 @@
        return null;
    }
    /**
     * 普通缓存获取
     * @param key 键
     * @return 值
     */
    public String getString(String key) {
        Object obj = key == null ? null : redisTemplate.opsForValue().get(key);
        if(obj!=null){
            return obj.toString();
        }
        return null;
    }
    /**
     * 普通缓存放入
     * @param key 键