oslo_cache解析
oslo_cache主要依赖于dogpile.cache库
oslo.cache缓存机制的核心实现都定义在oslo_cache.core模块中,而缓存机制的实现主要依赖于以下几个方法:
- create_region(function=function_key_generator):创建缓存区,该方法主要调用了dogpile.cache模块的make_region(function_key_generator=function)方法创建了一个CacheRegion对象。
- configure_cache_region(conf, region):该方法通过配置文件中缓存的相关配置以及CacheRegion对象提供的配置方法配置缓存后端。
- get_memoization_decorator(conf, region, group, expiration_group=None):这是一个根据CacheRegion对象中cache_on_arguments()装饰器定义的oslo.cache的一个装饰器,其会根据group或expiration_group确定是否允许缓存以及缓存的时间。
create_region返回CacheRegion对象
configure_cache_region通过conf和创建好的region对象配置缓存后端backend
def configure_from_config(self, config_dict, prefix):"""Configure from a configuration dictionaryand a prefix.Example::local_region = make_region()memcached_region = make_region()# regions are ready to use for function# decorators, but not yet for actual caching# later, when config is availablemyconfig = {"cache.local.backend":"dogpile.cache.dbm","cache.local.arguments.filename":"/path/to/dbmfile.dbm","cache.memcached.backend":"dogpile.cache.pylibmc","cache.memcached.arguments.url":"127.0.0.1, 10.0.0.1",}local_region.configure_from_config(myconfig, "cache.local.")memcached_region.configure_from_config(myconfig,"cache.memcached.")"""config_dict = coerce_string_conf(config_dict)return self.configure(config_dict["%sbackend" % prefix],expiration_time=config_dict.get("%sexpiration_time" % prefix, None),_config_argument_dict=config_dict,_config_prefix="%sarguments." % prefix,wrap=config_dict.get("%swrap" % prefix, None),replace_existing_backend=config_dict.get("%sreplace_existing_backend" % prefix, False),)
config_dict就是根据oslo_cache配置的conf文件将其转化为字典形式参数
查看configure函数(代码做了删减),实际上是根据conf加载了所需要缓存后端,实例化了self.backend
def configure(self,backend,expiration_time=None,arguments=None,_config_argument_dict=None,_config_prefix=None,wrap=None,replace_existing_backend=False,region_invalidator=None,):if "backend" in self.__dict__ and not replace_existing_backend:raise exception.RegionAlreadyConfigured("This region is already ""configured with backend: %s. ""Specify replace_existing_backend=True to replace."% self.backend)try:backend_cls = _backend_loader.load(backend)except PluginLoader.NotFound:raise exception.PluginNotFound("Couldn't find cache plugin to load: %s" % backend)if _config_argument_dict:self.backend = backend_cls.from_config_dict(_config_argument_dict, _config_prefix)else:self.backend = backend_cls(arguments or {})
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
