2016-03-20 14 views
1

spring-xdで提供されている現在のredis-sinkを拡張して、新しいリストを作成するのではなく、Redis Cappedリストに書き込む必要があると思いますが、残念ながら私がredis-sink全体がredisの一般的なpub/sub抽象化に基づいているように見えるため、ばね統合(spring-data-redis)に深く入り込む必要があります。メッセージがチャネルハンドラに到着すると定義できる?spring-xd custom redis-sink

データredisをプッシュするときに「キャップされたリストの効果」を得るために、ここで概要を説明したように、私はredisの "push"と "rtrim"の両方を実行する必要があります - http://redis.io/topics/data-types-intro。カスタムのスプリング統合/スプリングデータモジュールを構築する場合私はここで "ltrim"のサポートを見ているが、 "rrim"の操作は見ていないと思う。http://docs.spring.io/spring-data/redis/docs/1.7.0.RC1/api/

どのように開始するか、より簡単なアプローチが評価されるとのアドバイス。

答えて

0

実際には、レディスにはこのようなものはありません。RTRIMcommand

開始と終了も-1の最後の要素であるリストの末尾からのオフセットを示す負の数を指定できます。私たちはLTRIM用負のインデックスと同じ動作に達するので、我々はそれを必要としませんリスト、-2最後から2番目の要素など。

私はあなたが<redis:store-outbound-channel-adapter>を使用して、その設定には、このような何かを追加すべきだと思う:Redisのリストで最も古い要素を削除するには

<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> 

+0

申し訳ありませんが、私は私のLsとRsが混ざっています。私があなたの提案を試してみましょう。カスタムアウトバウンドチャネルアダプタの書き換えを避けるために探していたタイプのものでした。どのように/いつSPEL式を使うのか忘れています。私はここに指示に従います私はhttps://github.com/spring-projects/spring-xd-samples/tree/master/redis-store-sink –

+0

を展開すると思いますので、[RedisQueueOutboundChannelAdapter]のソースを見ると、 (https://github.com/spring-projects/spring-integration/blob/master/spring-integration-redis/src/main/java/org/springframework/integration/redis/outbound/RedisQueueOutboundChannelAdapter.java)私はそれを見るデフォルトのredis操作は "left push" –

+0

そして?それは全く別の話です。そのコンポーネントはまさにキューのような振る舞いのためのものです。そこにも同じltrimを実行することができますが、私はアーキテクチャの観点からの懸念を混ぜるつもりはありません。 –