def save(self, data, cfgstr=None):
from six.moves import cPickle as pickle<EOL>if not self.enabled:<EOL><INDENT>return<EOL><DEDENT>if self.verbose > <NUM_LIT:0>:<EOL><INDENT>self.log('<STR_LIT>'.format(self.fname))<EOL><DEDENT>cfgstr = self._rectify_cfgstr(cfgstr)<EOL>condensed = self._condense_cfgstr(cfgstr)<EOL>util_path.ensuredir(self.dpath)<EOL>data_fpath = self.get_fpath(cfgstr=cfgstr)<EOL>meta_fpath = data_fpath + '<STR_LIT>'<EOL>with open(meta_fpath, '<STR_LIT:a>') as file_:<EOL><INDENT>file_.write('<STR_LIT>'.format(util_time.timestamp()))<EOL>file_.write(self.fname + '<STR_LIT:\n>')<EOL>file_.write(condensed + '<STR_LIT:\n>')<EOL>file_.write(cfgstr + '<STR_LIT:\n>')<EOL>file_.write(str(self.meta) + '<STR_LIT:\n>')<EOL><DEDENT>with open(data_fpath, '<STR_LIT:wb>') as file_:<EOL><INDENT>pickle.dump(data, file_, protocol=self.protocol)<EOL><DEDENT>
Writes data to path specified by `self.fpath(cfgstr)`.

Metadata containing information about the cache will also be appended
to an adjacent file with the `.meta` suffix.

Example:
    >>> from ubelt.util_cache import *  # NOQA
    >>> # Normal functioning
    >>> cfgstr = 'long-cfg' * 32
    >>> cacher = Cacher('test_enabled_save', cfgstr)
    >>> cacher.save('data')
    >>> assert exists(cacher.get_fpath()), 'should be enabeled'
    >>> assert exists(cacher.get_fpath() + '.meta'), 'missing metadata'
    >>> # Setting the cacher as enabled=False turns it off
    >>> cacher2 = Cacher('test_disabled_save', 'params', enabled=False)
    >>> cacher2.save('data')
    >>> assert not exists(cacher2.get_fpath()), 'should be disabled'