You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用Lettuce调用Redis Stream XADD时如何自定义Entry ID

Java Redis Stream自定义Entry ID实现方案

你当前使用的Jedis客户端已原生支持自定义Entry ID,只需调用xadd的重载方法即可,无需额外改造逻辑。

核心修改点

原代码调用的是默认自动生成ID的xadd重载,替换为带ID参数的重载即可,修改后完整代码如下:

public void onTick(Instrument instrument, ITick tick) throws JFException {

        String _streamName = instrument.name() + ":tick";
        long _tickDate = tick.getTime();
        String _sTickDate = Long.toString(_tickDate);

        double _ask = tick.getAsk();
        double _bid = tick.getBid();

        Map<String, String> _messageBody = new HashMap<>();
        _messageBody.put( "ask", Double.toString(_ask) );
        _messageBody.put( "bid", Double.toString(_bid) );

        console.getOut().println("Sending to " + _streamName + " -> " + tick);

        // 新增自定义Entry ID逻辑,格式为「时间戳-序列号」,同毫秒下序列号从0递增
        String customEntryId = _tickDate + "-0";
        this.sync.xadd(_streamName, customEntryId, _messageBody);
    }

注意事项

  • Redis Stream的Entry ID标准格式为{毫秒时间戳}-{序列号},如果同一毫秒内只会产生1条tick数据,后缀固定为-0即可;如果同毫秒有多条数据,需要将序列号按顺序递增,避免ID重复导致写入失败。
  • 默认情况下Redis要求新写入的Entry ID必须大于当前Stream中已存在的最大ID,否则会返回错误。行情tick数据本身按时间递增生成,正常业务场景下不会触发该限制。

内容的提问来源于stack exchange,提问作者Marcello Chiuminatto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 10:54:00