code: func Open(cfg *config.Config) (*Ledis, error) {
  	if len(cfg.DataDir) == 0 {
  		cfg.DataDir = config.DefaultDataDir
  	}
  
  	if cfg.Databases == 0 {
  		cfg.Databases = 16
  	} else if cfg.Databases > MaxDatabases {
  		cfg.Databases = MaxDatabases
  	}
  
  	os.MkdirAll(cfg.DataDir, 0755)
  
  	var err error
  
  	l := new(Ledis)
  	l.cfg = cfg
  
  	if l.lock, err = filelock.Lock(path.Join(cfg.DataDir, "LOCK")); err != nil {
  		return nil, err
  	}
  
  	l.quit = make(chan struct{})
  
  	if l.ldb, err = store.Open(cfg); err != nil {
  		return nil, err
  	}
  
  	if cfg.UseReplication {
  		if l.r, err = rpl.NewReplication(cfg); err != nil {
  			return nil, err
  		}
  
  		l.rc = make(chan struct{}, 1)
  		l.rbatch = l.ldb.NewWriteBatch()
  		l.rDoneCh = make(chan struct{}, 1)
  
  		l.wg.Add(1)
  		go l.onReplication()
  
  		//first we must try wait all replication ok
  		//maybe some logs are not committed
  		l.WaitReplication()
  	} else {
  		l.r = nil
  	}
  
  	l.dbs = make(map[int]*DB, 16)
  
  	l.checkTTL()
  
  	return l, nil
  }
docs: // Open opens the Ledis with a config.