4

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?

1 Answer 1

1

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; 
        }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.