2013-07-16 89 views
4

当我使用redis池时,如何更改redb命令(select)。如何更改redis数据库,redis客户端来自redis池

我想写主机,并从不同的数据库读主机。

例如:

刚才我只有一个Redis的服务器,所以readWriteHosts = readOnlyHosts

pool = RedisDao.CreateManager(hostIp, hostIp); 

public static PooledRedisClientManager CreateManager(string[] readWriteHosts, string[] readOnlyHosts) 
    { 
     return new PooledRedisClientManager(readWriteHosts, readOnlyHosts, new RedisClientManagerConfig 
     { 
      MaxWritePoolSize = 50,// 
      MaxReadPoolSize = 5,// 
      AutoStart = true, 
     }); 
    } 

    public RedisDB ReadRedisForModel(String ID) 
    { 

//这里我想用DB号是白天%15

 using (var redis = pool.GetClient()) 
     { 
      RedisDB model = new RedisDB(); 
      Dictionary<string, string> dic = redis.GetAllEntriesFromHash(keyPrefix + ID); 
      model.ID = ID;//Int32.Parse(ids[i]);   
      return model; 
     }   
    } 

    public void WriteRedis(RedisDB model) 
    { 

//这里我想用的DB号是(day-1)%15

  using (var redis = pool.GetClient()) 
      { 

编辑:

我找到一种方法来设置不同的数据库,但我觉得这个解决方案不是最好的办法。

   if(redis is RedisClient) 
       { 
         long db = redis.DB;//db always = 0; 
         ((RedisClient)redis).ChangeDB((day-1)%15); 
       } 

是否需要锁定线程?当我读或写redis时。 恐怕,我在多线程中获得了相同的redis客户端。那么Redis DB是?

编辑结束

   int time = DateTimeUtil.ConvertDateTimeInt(DateTime.Now); 
       model.ID = time + redis.Increment(incrementKey, 1) + "";//.Incr("ID");     
       using (var pip = redis.CreatePipeline()) 
       { 
        pip.QueueCommand(r => r.AddItemToList(primaryKey, model.ID + "")); 
        pip.Flush(); 
       }; 

      };       
    } 

我redisClient从池,但redisClient不具有changeDB的功能。

因此,任何人如何设置它?

回答

1

例如:

//write 
    bool IsNeedChangeDB=true; 
    int WriteDBNumber=3 
     public static PooledRedisClientManager pool = RedisDao.CreateManager(hostIp, hostIp); 
     using (var redis = pool.GetClient()) 
        { 
         if (redis is RedisClient && IsNeedChangeDB) 
         { 
          if (redis.Db != this.WriteDBNumber) 
           { 
            ((RedisClient)redis).ChangeDb(this.WriteDBNumber); 
           } 
           else 
           { 
            Trace.WriteLine("it is a test" + redis.Host); 
           } 
         } 
         redis.Set<string>("key","value"); 
        } 

int ReadDBNumber=3; 
//read 
protected IRedisClient GetRedisClient() 
     { 
      var redis = pool.GetClient(); 

      if (redis is RedisClient && IsNeedChangeDB) 
      {     
       if (redis.Db != this.ReadDBNumber) 
        ((RedisClient)redis).ChangeDb(this.ReadDBNumber); 
      } 

      return redis; 
     }