django项目之中对influxdb 数据库的使用(django缓存实现原理):

Influxdb数据库是互联网级监控系统
Influxdb是一个开源的分布式时序、时间和指标数据库,使用go语言编写,无需外部依赖。 它有三大特性:
  时序性(Time Series):与时间相关的函数的灵活使用(诸如最大、最小、求和等);
  度量(Metrics):对实时大量数据进行计算;
  事件(Event):支持任意的事件数据,换句话说,任意事件的数据我们都可以做操作

Influxdb数据库的使用场景:
  1. 实时采集监控数据,按时间写入Influxdb
  2. 按不同纬度聚合查询监控数据,用于监控展现
  3. 持续查询,定时归集指定时间的数据,用于更大时间范围监控数据的展现
  4,......
from django.conf import settings
from django.core.cache.backends.base import BaseCache
from influxdb import InfluxDBClient


'''BaseCache是自定义缓存的基类 '''
class Cache(BaseCache):
    def __init__(self, server, params):
        super(Cache, self).__init__(params)
        self._client = InfluxDBClient(**settings.INFLUXDB)

    def get(self, sql, default=None, version=None, **kwargs):
        return self._client.query(sql, **kwargs)

    def set(self, json, default=None, version=None, **kwargs):
        return self._client.write_points(json, **kwargs)

    def delete_series(self, measurement=None, tags=None):
        return self._client.delete_series(measurement=measurement, tags=tags)
在项目之中 influx 的使用是与自定义缓存配合使用的:
django 自定义的缓存:
CACHES = {
    'default': {
        'BACKEND': 'antilles.common.cache.Cache',
    }
}
对缓存的使用!
_GPU_SQL = """\
SELECT LAST(value) as value FROM node_gpu_mem_pct;
"""

cache.get(_GPU_SQL)
执行流程:
1,创建缓存的过程是:
1,导入配置文件,根据指定的参数调用指定缓存类的方法,比如 cache.get会调用指定类的get方法
2,缓存使用线程变量 threading.local() ,当前线程的全局变量
3,创建缓存完成存储到 self._caches.caches[alias] 之中 下一次查询先在这里寻找
posted @ 2018-08-14 17:31  十七楼的羊  阅读(1011)  评论(0编辑  收藏  举报