9.5.1 介绍

Redisson提供了通过映射归纳(MapReduce)编程模式来处理储存在Redis环境里的大量数据的服务。这个想法来至于其他的类似实现方式和谷歌发表的研究。所有 映射(Map)归纳(Reduce) 阶段中的任务都是被分配到各个独立节点(Redisson Node)里并行执行的。以下所有接口均支持映射归纳(MapReduce)功能: RMapRMapCacheRLocalCachedMapRSetRSetCacheRListRSortedSetRScoredSortedSetRQueueRBlockingQueueRDequeRBlockingDequeRPriorityQueueRPriorityDeque

映射归纳(MapReduce)的功能是通过RMapperRCollectionMapperRReducerRCollator 这几个接口实现的。

1. RMapper 映射器接口适用于映射(Map)类,它用来把映射(Map)中的每个元素转换为另一个作为归纳(Reduce)处理用的键值对。

  1. public interface RMapper<KIn, VIn, KOut, VOut> extends Serializable {
  2. void map(KIn key, VIn value, RCollector<KOut, VOut> collector);
  3. }

2. RCollectionMapper 映射器接口仅适用于集合(Collection)类型的对象,它用来把集合(Collection)中的元素转换成一组作为归纳(Reduce)处理用的键值对。

  1. public interface RCollectionMapper<VIn, KOut, VOut> extends Serializable {
  2. void map(VIn value, RCollector<KOut, VOut> collector);
  3. }

3. RReducer 归纳器接口用来将上面这些,由映射器生成的键值对列表进行归纳整理。

  1. public interface RReducer<K, V> extends Serializable {
  2. V reduce(K reducedKey, Iterator<V> values);
  3. }

4. RCollator 收集器接口用来把归纳整理以后的结果化简为单一一个对象。

  1. public interface RCollator<K, V, R> extends Serializable {
  2. R collate(Map<K, V> resultMap);
  3. }

以上每个阶段的任务都可以用@RInject注解的方式来获取RedissonClient实例:

  1. public class WordMapper implements RMapper<String, String, String, Integer> {
  2. @RInject
  3. private RedissonClient redissonClient;
  4. @Override
  5. public void map(String key, String value, RCollector<String, Integer> collector) {
  6. // ...
  7. redissonClient.getAtomicLong("mapInvocations").incrementAndGet();
  8. }
  9. }