9.5.1 介绍
Redisson提供了通过映射归纳(MapReduce)编程模式来处理储存在Redis环境里的大量数据的服务。这个想法来至于其他的类似实现方式和谷歌发表的研究。所有 映射(Map) 和 归纳(Reduce) 阶段中的任务都是被分配到各个独立节点(Redisson Node)里并行执行的。以下所有接口均支持映射归纳(MapReduce)功能: RMap
、 RMapCache
、 RLocalCachedMap
、 RSet
、 RSetCache
、 RList
、 RSortedSet
、 RScoredSortedSet
、 RQueue
、 RBlockingQueue
、 RDeque
、 RBlockingDeque
、 RPriorityQueue
和 RPriorityDeque
映射归纳(MapReduce)的功能是通过RMapper
、 RCollectionMapper
、 RReducer
和 RCollator
这几个接口实现的。
1. RMapper
映射器接口适用于映射(Map)类,它用来把映射(Map)中的每个元素转换为另一个作为归纳(Reduce)处理用的键值对。
public interface RMapper<KIn, VIn, KOut, VOut> extends Serializable {
void map(KIn key, VIn value, RCollector<KOut, VOut> collector);
}
2. RCollectionMapper
映射器接口仅适用于集合(Collection)类型的对象,它用来把集合(Collection)中的元素转换成一组作为归纳(Reduce)处理用的键值对。
public interface RCollectionMapper<VIn, KOut, VOut> extends Serializable {
void map(VIn value, RCollector<KOut, VOut> collector);
}
3. RReducer
归纳器接口用来将上面这些,由映射器生成的键值对列表进行归纳整理。
public interface RReducer<K, V> extends Serializable {
V reduce(K reducedKey, Iterator<V> values);
}
4. RCollator
收集器接口用来把归纳整理以后的结果化简为单一一个对象。
public interface RCollator<K, V, R> extends Serializable {
R collate(Map<K, V> resultMap);
}
以上每个阶段的任务都可以用@RInject
注解的方式来获取RedissonClient
实例:
public class WordMapper implements RMapper<String, String, String, Integer> {
@RInject
private RedissonClient redissonClient;
@Override
public void map(String key, String value, RCollector<String, Integer> collector) {
// ...
redissonClient.getAtomicLong("mapInvocations").incrementAndGet();
}
}