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时,采取下面策略:
- volatile-lru :挥发性LRU删除一个过期的键值,首先消除最近没有使用的。
- volatile-ttl:挥发TTL删除一个过期的键值,首先删除键剩余活着时间最短的。
- volatile-random:在已经设置过期日期之中键值随机选择删除。
- allkeys-lru ,类似volatile-lru,但是不但删除符合volatile-lru条件,还删除有设置过期日期的。
- 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>