001package gu.dtalk.redis; 002 003import static com.google.common.base.Preconditions.checkNotNull; 004 005import java.net.URI; 006import java.util.Collections; 007import java.util.Map; 008 009import com.google.common.base.MoreObjects; 010import com.google.common.base.Predicates; 011import com.google.common.collect.ImmutableMap; 012import com.google.common.collect.Maps; 013 014import gu.simplemq.redis.JedisPoolLazy.PropName; 015 016/** 017 * 自定义配置默认实现 018 * @author guyadong 019 * 020 */ 021public class DefaultCustomRedisConfigProvider implements RedisConfigProvider { 022 023 private static final Map<PropName, Object> redisParameters = Maps.newHashMap(); 024 025 public DefaultCustomRedisConfigProvider() { 026 } 027 028 @Override 029 public String getHost() { 030 return (String) redisParameters.get(PropName.host); 031 } 032 033 @Override 034 public void setHost(String host) { 035 redisParameters.put(PropName.host, host); 036 } 037 038 @Override 039 public int getPort() { 040 return (int) MoreObjects.firstNonNull(redisParameters.get(PropName.port),0); 041 } 042 043 @Override 044 public void setPort(int port) { 045 redisParameters.put(PropName.port, port); 046 } 047 048 @Override 049 public String getPassword() { 050 return (String) redisParameters.get(PropName.password); 051 } 052 053 @Override 054 public void setPassword(String password) { 055 redisParameters.put(PropName.password, password); 056 } 057 058 @Override 059 public int getDatabase() { 060 return (int) MoreObjects.firstNonNull(redisParameters.get(PropName.database),0); 061 } 062 063 @Override 064 public void setDatabase(int database) { 065 redisParameters.put(PropName.database, database); 066 } 067 068 @Override 069 public int getTimeout() { 070 return (int) MoreObjects.firstNonNull(redisParameters.get(PropName.timeout),0); 071 } 072 073 @Override 074 public void setTimeout(int timeout) { 075 redisParameters.put(PropName.timeout, timeout); 076 } 077 078 @Override 079 public URI getURI() { 080 return (URI) redisParameters.get(PropName.uri); 081 } 082 083 @Override 084 public void setURI(URI uri) { 085 redisParameters.put(PropName.uri, uri); 086 } 087 088 @Override 089 public final RedisConfigType type() { 090 return RedisConfigType.CUSTOM; 091 } 092 093 /** 094 * 初始化redis参数 095 * @param redisParameters redis参数 096 */ 097 public static void initredisParameters(Map<PropName, Object> redisParameters){ 098 redisParameters = MoreObjects.firstNonNull(redisParameters, Collections.<PropName, Object>emptyMap()); 099 DefaultCustomRedisConfigProvider.redisParameters.clear(); 100 DefaultCustomRedisConfigProvider.redisParameters.putAll(redisParameters); 101 } 102 /** 103 * 设置redis的访问地址<br> 104 * 调用此方法后才能使用{@link RedisConfigType#CUSTOM}实例的方法 105 * @param redisLocation 106 */ 107 public static void setRedisLocation(URI redisLocation) { 108 initredisParameters(ImmutableMap.of(PropName.uri,checkNotNull((Object)redisLocation,"redisLocation is null"))); 109 } 110 /** 111 * @return redisparameters 112 */ 113 public static Map<PropName, Object> readRedisparameters() { 114 return Maps.filterValues(redisParameters, Predicates.notNull()); 115 } 116}