Django 实现默认的 login_required

Background

我们在使用 Django 做 Api 开发时,基本所有接口都需要认证。这种情况下,如果使用 Django

原生的 login_required 就会显得非常麻烦,每个接口上都需要添加这个装饰器。

因此,需要能够实现一个默认的 『login_required』,默认将所有接口都加上登录校验,而只将一些特殊的接口例外。

Solution

使用 Django Middleware 来实现登录校验

from django.http.response import HttpResponseForbidden

from django.conf import setting......

CentOS 6.x 安装 dotnet core 环境

dotnet core 正式发布已有小半年了,目前已经到了 1.1.0 的版本,只可惜受限于技术栈,一直未能在生产环境上试用。

官方的安装文档在这里:

https://www.microsoft.com/net/core#linuxcentos

可惜的是,官方文档里只支持 CentOS 7.1。而在我厂老掉牙的 CentOS 6.x 上运行时,会直接报错:

Failed to load /home/work/dotnet/host/fxr/1.1.0/libhostfxr.so, error: /lib64/libc.so.6: version `GLIBC_2.14' ......

Redis Shared Object 分析

不久前遇到个 redis 的 Shared Object 问题,由 Shared Object 引发的 idletime 和 refcount 监控异常。于是看了下 redis 的相关实现,总价一下 Shared Object 的一些特点。

先说结论:

10000 以内的数字在单个 Redis 实例中是共享的。包括 incr 等操作得到的数字

Shared Object 的 lru 也是共享的。因此对一个 key 的访问,也会影响其他拥有同一个共享对象的 lru。(即 object idletime $key 看到的数值)

Redis Object

typedef struct ......

linux下删除大量小文件的方案

之前遇到过这样一个case:

背景: 需要删除一个拥有大量小文件的目录

特征: 文件数达到数千万,每个文件平均不到1k

删除方式: 直接rm -rf

影响: cpu磁盘io util持续达到100%,且机器上大多数有磁盘io的进程都进入D状态,删除时间长达小时级别

这显然是不能接受的。为此,通过一些实验和STFG,开始解决这个问题。

为什么删除大量小文件会有这种影响?

通过简单的 strace rm file 可以看到下面几行:

lstat("file", {st_mode=S_IFREG|0664, st_size=0, ...}) = 0

access(......

百度最高奖!

第四界Summer Party!

虽然前三界都在周边游走!可这一次我们站在中间!

虽然有很多的虽然,至少,Anyway,That's me!