NoSQL专题

apache camel和 redis

幂等仓储

  幂等的术语是用来在数学上描述产生相同的结果的功能,如果将它应用到消息,无论是一次或多次收到一条消息都具有相同的效果,在这个概念骆驼camel使用IdempotentConsumer类 。根据某个消息ID,到RedisIdempotentRepository  仓储中寻找这个ID,如果存在表示被消费过,否则加入。Redis这里作为消息的存储。


<bean id="idempotentRepository" class="org.apache.camel.component.redis.processor.idempotent.RedisIdempotentRepository">
<constructor-arg value="test-repo"/>
</bean>

<route>
<from uri="direct:start"/>
<idempotentConsumer messageIdRepositoryRef="idempotentRepository">
<simple>${in.body.id}</simple>
<to uri="mock:result"/>
</idempotentConsumer>
</route>

缓存

  Redis的主要用途之一是LRU缓存。它可以将数据存储在内存如同Memcached,可存储数据到日志文件,如果节点重启可以重播,当内存大小达到maxmemory时,采取下面策略:

  1. volatile-lru :挥发性LRU删除一个过期的键值,首先消除最近没有使用的。
  2. volatile-ttl:挥发TTL删除一个过期的键值,首先删除键剩余活着时间最短的。
  3. volatile-random:在已经设置过期日期之中键值随机选择删除。
  4. allkeys-lru ,类似volatile-lru,但是不但删除符合volatile-lru条件,还删除有设置过期日期的。
  5. allkeys-random:将删除所有类型的按键,无论是正常的密钥和密钥过期设置。

一旦Redis 服务器运行,只需要set或get了。

<?xml version="1.0" encoding="UTF-8"?>
<route>
<from uri="direct:start"/>
<setHeader headerName="CamelRedis.Command">
<constant>SET</constant>
</setHeader>
<setHeader headerName="CamelRedis.Key">
<constant>keyOne</constant>
</setHeader>
<setHeader headerName="CamelRedis.Value">
<constant>valueOne</constant>
</setHeader>
<to uri="redis://localhost:6379"/>
</route>