Tornado 参数校验

Python 2017-06-07 22:34 暂无评论

tornado 做数据校验的时候有点麻烦,特别是我接收和输出都是 JSON 这里用到的是 jsonschema 来做校验数据,如果参数不符则报错。

import functools
from tornado.web import RequestHandler, Application
from tornado.escape import json_decode, json_encode
from tornado.web import asynchronous
from tornado import gen

# 校验 json 数据
def Validates(Schema):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(self, *args, **kwargs):
            try:
                validate(json_decode(self.request.body), Schema)
                return func(self, *args, **kwargs)
            except:
                self.set_status(500)
                self.write({"success": False, "message": "params error", "status": 500})
        return wrapper
    return decorator

class PlanHandler(BaseHandler):
    @asynchronous
    @gen.coroutine
    def get(self, *args, **kwargs):
        self.write("hello")

    @Validates(PlanSchema)
    @asynchronous
    @gen.coroutine
    def post(self, *args, **kwargs):
        params = json_decode(self.request.body)
        self.write(params)

再贴一个无参数的装饰器。有参数的要多一个函数。

# 校验令牌
def ValiAuth(func):
    def decorator(self, *args, **kwargs):
        if json_decode(self.request.body)["auth"] != self.auth:
            self.set_status(401)
            self.write({"success": False, "message": "Auth error", "status": 401})
        else:
            return func(self, *args, **kwargs)
    return decorator

MySQL 两表字段值对比

默认分类 2017-05-21 20:53 暂无评论

场景:查询未充值有兑换记录的用户 ID

两表 t1 是兑换表, t2 是充值表不考虑其他字段内容,只对比两表的记录并且去重

使用 LEFT JOIN 来实现对比,DISTINCT 去重复,最后返回的结果是 t2 结果为 NULL 的显示。

SELECT DISTINCT
    t1.user_number,
    t2.user_number
FROM
    (
        SELECT DISTINCT
            t1.user_number
        FROM
            t_card_list t1
    ) t1
LEFT JOIN (
    SELECT DISTINCT
        t2.user_number
    FROM
        t_recharge_log t2
    WHERE
        t2.type = 10
) t2 ON t1.user_number = t2.user_number
WHERE
    t2.user_number IS NULL;

MyCat 读写分离

运维的坑 2017-04-10 06:00 暂无评论

实验机两台,分别做主从读写分离。大部分满足一般需求。后期可以扩展到多主多从分库分表去做。

Master IP: 192.168.1.101
Slave IP : 192.168.1.102

这里设置两台 MySQL 服务器提供 Master/Slave 服务。MySQL 版本均为社区版 5.7.11 保持 MySQL 版本一致。

下载 JDK 以及 MyCat 解压并且配置环境变量。

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
http://dl.mycat.io/1.6-RELEASE/

环境变量:

export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export MYCAT_HOME=/usr/local/mycat
export PATH=$PATH:$MYCAT_HOME/bin

修改 MySQL 的配置文件 /etc/my.cnf[mysqld] 节点下添加及修改 server-id

阅读剩余部分

MySQL 源码 CMake 编译部署

运维的坑 2017-03-20 08:57 暂无评论

随手记一下。

MySQL 源码编译选项参考 MySQL 官方文档:https://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html

1. 首先安装一下需要的依赖

yum install -y vim wget cmake gcc gcc-c++ ncurses-devel bison zlib libxml openssl perl perl-Data-Dumper

2. 把源码包下载下来

wget -c https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35.tar.gz && tar zxf mysql-5.6.35.tar.gz && cd mysql-5.6.35

3. 创建用户及组

groupadd mysql && useradd mysql -g mysql -M -s /sbin/nologin

4. 编译安装

cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNODB_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_LOCAL_INIFILE=1 \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1

编译安装

make && make install

阅读剩余部分

CentOS 7.x 部署 Supervisor

运维的坑 2017-01-18 02:01 暂无评论

easy_install supervisor or pip install supervisor

安装完成 Supervisor 后,初始化配置文件 echo_supervisord_conf > /etc/supervisord.conf

创建 Supervisord 守护进程配置文件目录 mkdir /etc/supervisord 并且编辑 /etc/supervisord.conf 文件 [include] 节点下的文件包含配置,去掉注释以后修改结果

[include]
;files = relative/directory/*.ini
files = /etc/supervisord/*.conf

将 Supervisor 加入开机自启动,使用 systemctl 管理,到 Supervisor 官方 GitHub 项目取配置文件 https://github.com/Supervisor/initscripts CentOS 7.x 使用 centos-systemd-etcs 即可。

阅读剩余部分