code: func (ttles *TTLExpirationScheduler) Start() error {
  	ttles.Lock()
  	defer ttles.Unlock()
  
  	err := ttles.readState()
  	if err != nil {
  		return err
  	}
  
  	if !ttles.stopped {
  		return fmt.Errorf("scheduler already started")
  	}
  
  	dcontext.GetLogger(ttles.ctx).Infof("Starting cached object TTL expiration scheduler...")
  	ttles.stopped = false
  
  	// Start timer for each deserialized entry
  	for _, entry := range ttles.entries {
  		entry.timer = ttles.startTimer(entry, time.Until(entry.Expiry))
  	}
  
  	// Start a ticker to periodically save the entries index
  
  	go func() {
  		for {
  			select {
  			case <-ttles.saveTimer.C:
  				ttles.Lock()
  				if !ttles.indexDirty {
  					ttles.Unlock()
  					continue
  				}
  
  				err := ttles.writeState()
  				if err != nil {
  					dcontext.GetLogger(ttles.ctx).Errorf("Error writing scheduler state: %s", err)
  				} else {
  					ttles.indexDirty = false
  				}
  				ttles.Unlock()
  
  			case <-ttles.doneChan:
  				return
  			}
  		}
  	}()
  
  	return nil
  }
docs: // Start starts the scheduler