package com.cxy.redisclient.integration.key; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.TreeSet; import com.cxy.redisclient.domain.Node; import com.cxy.redisclient.domain.NodeType; import com.cxy.redisclient.dto.Order; import com.cxy.redisclient.integration.JedisCommand; public abstract class FindContainerKeys extends JedisCommand { protected int db; protected String container; protected String keyPattern; protected List<NodeType> valueTypes; protected Set<Node> keys = new TreeSet<Node>(); protected Order order; public Set<Node> getKeys() { return keys; } public FindContainerKeys(int id, int db, String container, String keyPattern) { super(id); this.db = db; this.container = container; this.keyPattern = keyPattern; this.valueTypes = new ArrayList<NodeType>(); valueTypes.add(NodeType.STRING); valueTypes.add(NodeType.HASH); valueTypes.add(NodeType.LIST); valueTypes.add(NodeType.SET); valueTypes.add(NodeType.SORTEDSET); this.order = Order.Ascend; } public FindContainerKeys(int id, int db, String container, String keyPattern, List<NodeType> valueTypes, boolean forward) { super(id); this.db = db; this.container = container; this.keyPattern = keyPattern; this.valueTypes = valueTypes; if(forward) this.order = Order.Ascend; else this.order = Order.Descend; } @Override public void command() { jedis.select(db); Set<String> nodekeys = getResult(); Iterator<String> it = nodekeys.iterator(); while (it.hasNext()) { String nextKey = it.next(); NodeType valueType = getValueType(nextKey); if(inValueTypes(valueType)){ Node node = new Node(id, db, nextKey, valueType, order); keys.add(node); } } } private boolean inValueTypes(NodeType valueType) { for(NodeType nodeType: valueTypes) { if(valueType == nodeType) return true; } return false; } protected abstract Set<String> getResult(); }