zt9788
zt9788

Reputation: 958

How to change redis DB that the redis client is from redis pool

How can I changedb(redis command select), when I used the pool of redis.

I want write host and read host from different DB.

for example:

just now I only have one redis server,so the 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)
    {

//here I want to use DB number is day%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)
    {

//here I want to use DB number is (day-1)%15

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

EDIT:

I find a way to set different DB,But I feel this solution is not best way.

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

Is it need to lock thread? when i am read or write to redis. I am afraid, I got the same redis client in mutil-thread . then the redis DB is ?

Edit end

                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();
                };

            };                         
    }

I got redisClient from pool, but redisClient is not have the function of changeDB.

So anybody kowns how to set it?

Upvotes: 4

Views: 3669

Answers (1)

Arnold
Arnold

Reputation: 98

for example:

//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; 
        }

Upvotes: 1

Related Questions