1

所以我认为我需要扩展 spring-xd 中提供的当前 redis-sink 以写入 redis Capped 列表,而不是创建一个新列表,但不幸的是它似乎变得更糟,因为我将不得不更深入地研究 spring-integration 和进一步回到 spring-data (spring-data-redis),因为整个 redis-sink 似乎基于 redis 上的通用 pub/sub 抽象——或者是否有某种类型的处理程序可以在消息到达后定义通道处理程序?

为了在我推送数据 redis 时具有“上限列表的效果”,我需要执行 redis “push”,然后执行“rtrim”,如此处所述 - http://redis.io/topics/data-类型介绍。如果我要构建一个自定义的 spring-integration / spring-data 模块。我相信我在这里看到了对“ltrim”但不是“rtrim”操作的支持http://docs.spring.io/spring-data/redis/docs/1.7.0.RC1/api/

任何关于如何/从哪里开始或更简单的方法的建议将不胜感激。

4

1 回答 1

0

实际上即使是 Redis 也没有这样的RTRIM 命令。我们不需要它,因为我们使用负索引达到了相同的行为LTRIM

start 和 end 也可以是负数,表示距列表末尾的偏移量,其中 -1 是列表的最后一个元素,-2 是倒数第二个元素,依此类推。

我认为您应该<redis:store-outbound-channel-adapter>在其配置中使用并添加类似的内容:

<int-redis:request-handler-advice-chain>
    <beans:bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
        <beans:property name="onSuccessExpression" value="#redisTemplate.boundListOps(${keyExpression}).trim(1, -1)"/>
    </beans:bean>
</int-redis:request-handler-advice-chain>

删除 Redis 列表中最旧的元素。

于 2016-03-20T18:21:14.157 回答