Redis配置及数据存放指定db

Redis默认有16个库,默认连接的是 index=0 的那一个。这16个库互相之间是独立的。

 

这里1为db index:

 

spring.redis.shard.1.host2=http://ip:6379/1

spring.redis.shard.1.password = 123456

spring.redis.pool.maxIdle = 300 
spring.redis.pool.maxActive=300
spring.redis.pool.maxTotal = 300 #连接数
 

 

注入ShardedJedisPool:

 1  @Autowired
 2     private Environment env;
 3 
 4 @Bean
 5     @ConfigurationProperties(prefix = "spring.redis.pool")
 6     public JedisPoolConfig getJedisPoolConfig() {
 7         return new JedisPoolConfig();
 8     }
 9 
10 @Bean
11     public ShardedJedisPool getJedisPool() {
12         try {
13             List<JedisShardInfo> shardList = new ArrayList<>();
14                 // 读取host
15                 String host = env.getProperty("spring.redis.shard.1.host2");
16                 JedisShardInfo info = new JedisShardInfo(host);
17                 // 读取password
18                 String password = env.getProperty("spring.redis.shard.1.password");
19                 if (!StringUtils.isEmpty(password)) {
20                     info.setPassword(password);
21                 }
22                 shardList.add(info);
23             if (shardList.isEmpty()) {
24                 // 无法加载redis
25                 throw new IOException();
26             }
27             return new ShardedJedisPool(getJedisPoolConfig(), shardList);
28         } catch (Exception e) {
29             logger.error(LogUtils.getExceptionInfo(e));
30             throw new RedisConfigException("无法加载资源文件!");
31         }
32     }

 

   redis保存key,获取key,删除key,判断key:

   

 1 public <T extends Serializable> void setObjectJosn(String key, T obj, int time) {   #保存对象(json)
 2         ShardedJedis jedis = null;
 3         try {
 4             jedis = shardedJedisPool.getResource();
 5             jedis.set(key, JSON.toJSONString(obj));
 6             if (time > 0) {
 7                 jedis.expire(key, time);
 8             }
 9             logger.info(String.format("redis setObject info:[key:%s,value:%s,outTime:%d]", key, obj.toString(), time));
10         } catch (Exception e) {
11             logger.error(LogUtils.getExceptionInfo(e));
12         } finally {
13             jedis.close();
14         }
15     }


 1 public String getObjectJosn(String key) {   #获取对象(json)
 2         String s = null;
 3         ShardedJedis jedis = null;
 4         try {
 5             jedis = shardedJedisPool.getResource();
 6             s = jedis.get(key);
 7             logger.info(String.format("redis getObject info:[key:%s,value:%s]", key, s == null ? "null" : s.toString()));
 8         } catch (Exception e) {
 9             logger.error(LogUtils.getExceptionInfo(e));
10         } finally {
11             jedis.close();
12         }
13         return s;
14     }

 

 1 public Long delete(String key) {  #根据key删除对象
 2         Long temp = null;
 3         ShardedJedis jedis = null;
 4         try {
 5             jedis = shardedJedisPool.getResource();
 6             // temp = jedis.del(key.getBytes());
 7             temp = jedis.del(key);
 8             logger.info(String.format("redis deleteDate info:[key:%s]", key));
 9         } catch (Exception e) {
10             logger.error(LogUtils.getExceptionInfo(e));
11         } finally {
12             jedis.close();
13         }
14         return temp;
15     }
 1  public boolean isExist(String key) {  #判断是否存在
 2         boolean flag = false;
 3         ShardedJedis jedis = null;
 4         try {
 5             jedis = shardedJedisPool.getResource();
 6             // flag = jedis.exists(key.getBytes());
 7             flag = jedis.exists(key);
 8 
 9             logger.info(String.format("redis isExist info:[key:%s]", key));
10         } catch (Exception e) {
11             logger.error(LogUtils.getExceptionInfo(e));
12         } finally {
13             jedis.close();
14         }
15         return flag;
16     }

 

测试:

 

 1  if (redis.isExist("112e35b563520aed051d7cbf8f477338")) {
 2                 System.out.println("xxxxx:" + redis.getObjectJosn("test"));
 3                 JSONObject json = JSONObject.parseObject(redis.getObjectJosn("test"));
 4                 System.out.println("asdasdasd===:"+json.get("name"));
 5             } else {
 6                 Map<String, String> map = new HashMap<>();
 7                 map.put("name", "yao");
 8                 map.put("age", "20");
 9                 String token= DigestUtils.md2Hex(System.currentTimeMillis()+"test");
10                 redis.setObjectJosn(token,null, map, 86400); // 保存token到redis
11             }

 

  

 

 

相关源码部分:

    JedisPoolConfig:

 1 public class JedisPoolConfig extends GenericObjectPoolConfig {
 2     public JedisPoolConfig() {
 3         this.setTestWhileIdle(true);
 4         this.setMinEvictableIdleTimeMillis(60000L);
 5         this.setTimeBetweenEvictionRunsMillis(30000L);
 6         this.setNumTestsPerEvictionRun(-1);
 7     }
 8 
 9 public class GenericObjectPoolConfig extends BaseObjectPoolConfig {
10     public static final int DEFAULT_MAX_TOTAL = 8;
11     public static final int DEFAULT_MAX_IDLE = 8;
12     public static final int DEFAULT_MIN_IDLE = 0;
13     private int maxTotal = 8;  #我们修改的部分
14     private int maxIdle = 8;   #我们修改的部分
15     private int minIdle = 0;
16 
17     public GenericObjectPoolConfig() {
18     }
19 }

 

JedisShardInfo:

   

public class JedisShardInfo extends ShardInfo<Jedis> {
    private int connectionTimeout;
    private int soTimeout;
    private String host;
    private int port;
    private String password;
    private String name;
    private int db;
    private boolean ssl;
    private SSLSocketFactory sslSocketFactory;
    private SSLParameters sslParameters;
    private HostnameVerifier hostnameVerifier;

    public JedisShardInfo(String host) {  #用的这个构造
        super(1);
        this.password = null;
        this.name = null;
        this.db = 0;
        URI uri = URI.create(host);
        if (JedisURIHelper.isValid(uri)) {
            this.host = uri.getHost();
            this.port = uri.getPort();
            this.password = JedisURIHelper.getPassword(uri);
            this.db = JedisURIHelper.getDBIndex(uri);
            this.ssl = uri.getScheme().equals("rediss");
        } else {
            this.host = host;
            this.port = 6379;
        }

    }
    
    public JedisShardInfo(String host, int port, int timeout, String name) {
        this(host, port, timeout, timeout, 1);
        this.name = name;
    }

    public JedisShardInfo(String host, int port, int timeout, String name, boolean ssl) {
        this(host, port, timeout, timeout, 1);
        this.name = name;
        this.ssl = ssl;
    }

   ........可以看看其他的选择
}

 

ShardedJedisPool:

  

public class ShardedJedisPool extends Pool<ShardedJedis> {
 public ShardedJedisPool(GenericObjectPoolConfig poolConfig, List<JedisShardInfo> shards) {  #参数:1.池配置,2.连接信息
        this(poolConfig, shards, Hashing.MURMUR_HASH);
    }

    public ShardedJedisPool(GenericObjectPoolConfig poolConfig, List<JedisShardInfo> shards, Hashing algo) {
        this(poolConfig, shards, algo, (Pattern)null);
    }
   .....
} 

 

 

   

posted @ 2017-12-14 15:01  wanglittlehandsome  阅读(12930)  评论(0编辑  收藏  举报