一、概述

Superset使用Flask-Cache进行缓存,Flask-Cache支持redis,memcached,simplecache(内存),或本地文件系统)等缓存后端,如果你打算使用memcached,就需要使用memcached服务器作为后端,如果你打算使用redis,就需要安装python-redis。推荐使用redis作为缓存后端。

二、安装redis

1、去官网下载源码:https://redis.io/download

下载在,解压到data目录:

#tar xf redis-4.0.2.tar.gz -C /data

#cd  /data/redis-4.0.2

#make install -j 4

#mkdir {bin,data}

#find src/ -type f -perm -111 | xargs -i cp {} ../bin

#vim /etc/profile

export PATH=$PATH:/data/redis-4.0.2/bin

#source  /etc/profile

#cat redis.conf

bind 10.10.2.34
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile "redis.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/redis-4.0.2/data
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100

#LRU(Least Recently Used)为常用的缓存清空机制
maxmemory 3g
maxmemory-policy allkeys-lru
maxmemory-samples 5
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

2、启动

#redis-server  /data/redis-4.0.2/redis.conf

三、为superset配置redis缓存

1、superset

在superset_config.py文件中增加如下内容:

CACHE_DEFAULT_TIMEOUT = 60*60*6
CACHE_CONFIG = {
'CACHE_TYPE': 'redis',
'CACHE_REDIS_HOST': 'spark-worker',
'CACHE_REDIS_PORT': '6379',
'CACHE_REDIS_URL': 'redis://spark-worker:6379'
}

修改hosts文件,添加10.10.2.34  spark-worker

修改完成后,重启superset生效。进入页面点击dashboard,然后去redis里面查看,

#redis-cli -h spark-worker -p 6379

>KEYS  *

1) "flask_cache_cd696b3707087317077fe46bd306804a"

2、SQL Lab Celery设置

SQL Lab是superset整合的一个强大的数据库查询工具,支持所有SQLAlchemy兼容的数据库,默认通过web请求实现数据库查询。然而,当数据规模较大,需要长时间操作数据库时,会造成web请求超时而查询失败。因此,有必要为superset配置可异步执行的后端。

superset的异步后端包括:

  1. 一个或多个superset worker(Celery worker);
  2. 一个celery broker(消息队列),推荐使用redis或RabbitMQ;
  3. 一个结果后端,用于储存查询结果。

修改superset_config.py,增加如下内容:

class CeleryConfig(object):
    BROKER_URL = 'redis://spark-worker:6379/0'
    CELERY_IMPORTS = ('superset.sql_lab',)
    CELERY_RESULT_BACKEND = 'redis://spark-worker:6379/0'
   # CELERY_ANNOTATIONS = {'tasks.add':{'rate_limit':'10/s'}}

CELERY_CONFIG = CeleryConfig

from werkzeug.contrib.cache import RedisCache
RESULTS_BACKEND = RedisCache(
    host='spark-worker', port=6379, key_prefix='superset_results')

重启superset,(superset我是用docker安装的,参考我的另一篇文章superset安装),

#docker  restart  superset

#docker  exec -it  superset /bin/bash

进入容器后,启动superset  worker

#nohup  superset worker 2>&1 & >>/dev/null

在web页面上进行设置,选择Allow Run Async

然后去sql  lab执行sql查询,在去redis里面查看是否有缓存:

>KEYS  *

1) "celery-task-meta-a006a611-4da6-41fe-a825-0da3e7b31060"
 2) "celery-task-meta-e9b90a39-15a5-4d51-bf2b-3c461eede835"
 3) "_kombu.binding.celery.pidbox"
 4) "celery-task-meta-d02fd720-340d-4863-ab7c-e518984a494a"
 5) "celery-task-meta-b65e3dee-96fe-43c7-b4c4-cd9035f14c2f"
 6) "celery-task-meta-ffe2e759-5bae-46b0-912d-9b1db0f36086"
 7) "_kombu.binding.celery"
 8) "celery-task-meta-5480d794-3b28-444f-8f32-54d6fbe92fc9"
 9) "flask_cache_cd696b3707087317077fe46bd306804a"
10) "unacked_mutex"
11) "celery-task-meta-140a3eaf-a121-4a39-8fc5-73d7a9e198c2"
12) "_kombu.binding.celeryev"
13) "celery-task-meta-e9dd5359-17c9-40a3-b3a2-f2dc977fd34c"

配置文件:

#cat  superset_config.py

#---------------------------------------------------------
# Superset specific config
#---------------------------------------------------------
ROW_LIMIT = 5000
SUPERSET_WORKERS = 4
SUPERSET_WEBSERVER_TIMEOUT = 3000
SUPERSET_WEBSERVER_PORT = 8088
#---------------------------------------------------------

#---------------------------------------------------------
# Flask App Builder configuration
#---------------------------------------------------------
# Your App secret key
SECRET_KEY = '\2\1thisismyscretkey\1\2\e\y\y\h'

# The SQLAlchemy connection string to your database backend
# This connection defines the path to the database that stores your
# superset metadata (slices, connections, tables, dashboards, ...).
# Note that the connection information to connect to the datasources
# you want to explore are managed directly in the web UI
#SQLALCHEMY_DATABASE_URI = 'sqlite:////data/superset.db'
SQLALCHEMY_DATABASE_URI = 'sqlite:////home/superset/superset.db'

# Flask-WTF flag for CSRF
WTF_CSRF_ENABLED = True
# Add endpoints that need to be exempt from CSRF protection
WTF_CSRF_EXEMPT_LIST = []

# Set this API key to enable Mapbox visualizations
MAPBOX_API_KEY = ''

CACHE_DEFAULT_TIMEOUT = 60*60*6
CACHE_CONFIG = {
'CACHE_TYPE': 'redis',
'CACHE_REDIS_HOST': 'spark-worker',
'CACHE_REDIS_PORT': '6379',
'CACHE_REDIS_URL': 'redis://spark-worker:6379'
}

class CeleryConfig(object):
    BROKER_URL = 'redis://spark-worker:6379/0'
    CELERY_IMPORTS = ('superset.sql_lab',)
    CELERY_RESULT_BACKEND = 'redis://spark-worker:6379/0'
   # CELERY_ANNOTATIONS = {'tasks.add':{'rate_limit':'10/s'}}

CELERY_CONFIG = CeleryConfig

from werkzeug.contrib.cache import RedisCache
RESULTS_BACKEND = RedisCache(
    host='spark-worker', port=6379, key_prefix='superset_results')

superset----缓存之redis的更多相关文章

  1. 再谈缓存和Redis

    自从上次分享<Redis到底该如何利用?>已经有1年多了,这1年经历了不少.从码了我们网站的第一行开始到现在,我们的缓存模块也不断在升级,这之中确实略有心得,最近也有朋友探讨缓存,觉得可以 ...

  2. (转)高性能网站架构之缓存篇—Redis集群搭建

    看过 高性能网站架构之缓存篇--Redis安装配置和高性能网站架构之缓存篇--Redis使用配置端口转发 这两篇文章的,相信你已经对redis有一定的了解,并能够安装上,进行简单的使用了,但是在咱们的 ...

  3. 分布式缓存技术redis学习系列

    分布式缓存技术redis学习系列(一)--redis简介以及linux上的安装以及操作redis问题整理 分布式缓存技术redis学习系列(二)--详细讲解redis数据结构(内存模型)以及常用命令 ...

  4. 缓存数据库-redis数据类型和操作(list)

    转: 狼来的日子里! 奋发博取 缓存数据库-redis数据类型和操作(list) 一:Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素导列表的头部( ...

  5. spring(三、spring中的eheche缓存、redis使用)

    spring(三.spring中的eheche缓存.redis使用) 本文主要介绍为什么要构建ehcache+redis两级缓存?以及在实战中如何实现?思考如何配置缓存策略更合适?这样的方案可能遗留什 ...

  6. Spring Boot 揭秘与实战(二) 数据缓存篇 - Redis Cache

    文章目录 1. Redis Cache 集成 2. 源代码 本文,讲解 Spring Boot 如何集成 Redis Cache,实现缓存. 在阅读「Spring Boot 揭秘与实战(二) 数据缓存 ...

  7. 构建高性能数据库缓存之redis主从复制

    一.什么是redis主从复制? 主从复制,当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致:且实现Redis的主从复制 ...

  8. 构建高性能数据库缓存之redis(二)

    一.概述 在构建高性能数据库缓存之redis(一)这篇文档中,阐述了Redis数据库(key/value)的特点.功能以及简单的配置过程,相信阅读过这篇文档的朋友,对Redis数据库会有一点的了解,此 ...

  9. 谈缓存和Redis

    自从上次分享<Redis到底该如何利用?>已经有1年多了,这1年经历了不少.从码了我们网站的第一行开始到现在,我们的缓存模块也不断在升级,这之中确实略有心得,最近也有朋友探讨缓存,觉得可以 ...

  10. 缓存数据库redis

    什么是Redis? Redis是一个TCP服务器,支持请求/响应协议. 在Redis中,请求通过以下步骤完成: 客户端向服务器发送查询,并从套接字读取,通常以阻塞的方式,用于服务器响应. 服务器处理命 ...

随机推荐

  1. 11.DataGrid分页

    前台页面: 后台程序:

  2. hdu 4542 打表+含k个约数最小数

    http://acm.hdu.edu.cn/showproblem.php?pid=4542 给出一个数K和两个操作 如果操作是0,就求出一个最小的正整数X,满足X的约数个数为K. 如果操作是1,就求 ...

  3. MapReduce_架构

    架构 MapReduce1.x JobTracker:JT(作业管理者) 将作业分解成一堆的任务:Task(MapTask和ReduceTask) 将任务分派给TaskTracker运行 作业的监控. ...

  4. 团队项目(HCL)

    一.团队展示 队名:盐酸队 队员学号及风采: 团队项目描述:经典90坦克大战(基于java) 团队合照: 二.团队选题 经典90坦克大战是以坦克为题材的射击类小游戏,我们将在java上实现并拓展,我们 ...

  5. poj 2531 搜索剪枝

    Network Saboteur Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u ...

  6. .NET高级代码审计(第四课) JavaScriptSerializer反序列化漏洞

    0X00 前言 在.NET处理 Ajax应用的时候,通常序列化功能由JavaScriptSerializer类提供,它是.NET2.0之后内部实现的序列化功能的类,位于命名空间System.Web.S ...

  7. B/S FastReprot使用

    FastReport 交流群 群   号:554714044 前言 由于公司开发新产品,前后端分离.netcore +Angular ,之前C/S项目一直使用FastReport ,考虑到员工切换比较 ...

  8. 「PKUSC2018」星际穿越(倍增)

    倍增好题啊! 我们我们预处理 \(f[x][i]\) 表示 \(x\) 点最左到达的端点,\(sum[x][i]\) 表示 \(x\) 点最左到达的端点时 \(f[x][i]\sim x\) 的答案, ...

  9. 前端基础-html 列表标签,表格标签,表单标签

    一.列表标签 1.ul(无序列表)标签 ul(unordered list)无序列表,ul下的子元素只能是li(list item),如下示例: <ul> <li>第一项< ...

  10. SpringBoot入门之内嵌Tomcat配置

    spring boot默认web程序启用tomcat内嵌容器tomcat,监听8080端口,servletPath默认为 / .需要用到的就是端口.上下文路径的修改,在spring boot中其修改方 ...