11月 22

python 获取阿里OSS存储图片,在内存中处理图片

  申请了阿里的云存储OSS来存储图片。需要的时候直根据图片名,到阿里OSS中获得图片,然后切割成需要尺寸,最后返回给客户。获取后的切割操为内存操作,这样就不用占硬盘的IO了。
  Image使用的是PIL。阿里的SDK。SDK在python2.6调试报错。SDK比较古老,如报MD5的错误可以将oss_util.py开始的“import md5”修改为“from hashlib import md5”
  部分代码如下:

#!/bin/env python
# -*- coding:utf-8 -*-
# ---------------------------------------------
# Filename:    test.py
# Revision:    
# Date:        2012-11-19
# Author:      simonzhang
# Email:       simon-zzm@163.com
# Web:         www.simonzhang.net
# ---------------------------------------------
from oss import oss_api
import Image
from StringIO import StringIO

#### 阿里云OSS的基础信息 
HOST="oss.aliyuncs.com"  
ACCESS_ID = "xxxxxxxxx" 
SECRET_ACCESS_KEY = "xxxxxxxxxxxxx="
bucketName = "_photo"


#### 从阿里云存储获取图片
def get_image(_image_name):
    my_store = oss_api.OssAPI(HOST, ACCESS_ID, SECRET_ACCESS_KEY)
    res = my_store.get_object(bucketName, _image_name).read()
    #### 开始切图
    _cut_image = cut_image(res)
    return _cut_image

#### 切图部分
def cut_image(_image_data):
    _get_image = Image.open(_image_data)
    #### 切成300X300的尺寸
    tmp_image = _get_data.resize((300,300),Image.ANTIALIAS)
    #### 在内存中转换图片为string
    _tmp_file = StringIO("")
    tmp_image.save(_tmp_file, 'JPEG', quality=75)
    _tmp_file.seek(0)
    _tmp_image = _tmp_file.read()
    return _tmp_image

  测试效果还可以,一个一核的CPU,512M内存,1M带宽跑满CPU使用率10%。买台最便宜的阿里主机,直接从OSS里获取就不用再收费了。框架用的是tornado。

11月 09

用nginx的cache 对本地静态文件做缓存

需要对静态文件做缓存,但是静态文件也是在本地,由同一个nginx来解析。
使用if不能嵌套,所以只能使用本地的IP跳转一下,我的cache使用的nginx命名cache_one配置如下。如果本地跳转有问题可以再hosts表中修改一下指向。

   #######################pic
   upstream  local_img {
            server localhost:81;
       }
    server{
        listen       81;
        server_name 127.0.0.1;
        location / {
                root /image/;
                client_max_body_size   10m;
                access_log off;
                autoindex off;
                }
    }
   server {
        listen       80;
        server_name img.test.com;
        proxy_cache cache_one;
        location / {
                proxy_redirect off;
                proxy_cache_valid 200 304 12h;
                proxy_cache_valid 301 302 1m;
                proxy_cache_key $host$uri$is_args$args;
                add_header X-Cache $upstream_cache_status;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_pass http://local_img;
                access_log off;
                }
    }
10月 17

mysql的缓存使用

张子萌[2010-10-17]

1。在配置文件中添加配置

query_cache_size = 24M
query_cache_type = 1 #0不缓存
#1 缓存所有的结果,除了 SELECT SQL_NO_CACHE … 查询
#2 仅缓存 SELECT SQL_CACHE … 查询
query_cache_limit = 1048576 #不缓存大于这个值的结果。(缺省为 1M)

2。添加完毕重启mysql数据库

3。登陆mysql数据库查看缓存设置情况

mysql > show variables like ‘%query%’;

have_query_cache 缓存是否可用
long_query_time 超过N秒才记录
query_alloc_block_size 缓存分配的块大小(推荐4096为4k)
query_cache_limit 指示每个查询结果集最大的缓存限制,超过这个值的结果集不缓存
query_cache_min_res_unit 被分配给缓存的最小的块的数量
query_prealloc_size 被缓存用于解析和执行的持久buffer的大小
query_cache_size 缓存的大小

4。查看mysql数据库缓存使用情况

mysql > show status like ‘Qcache%’;

Qcache_free_blocks 查询缓存中的空闲内存块的数目
Qcache_free_memory 查询缓存的空闲内存总数
Qcache_hits 缓存采样数数目
Qcache_inserts 被加入到缓存中的查询数目
Qcache_lowmem_prunes 因为缺少内存而被从缓存中删除的查询数目
Qcache_not_cached 没有被缓存的查询数目
Qcache_queries_in_cache 在缓存中已注册的查询数目
Qcache_total_blocks 查询缓存中的块的总数目

5。维护部分

5.1
查询缓存碎片率 Qcache_free_blocks / Qcache_total_blocks * 100%
如果查询缓存碎片率超过20%
flush query cache 整理缓存碎片

5.2
查询缓存利用率 (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
如果利用率在25%以下,则是query_cache_size设置的过大。

5.3
查询缓存命中率 (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%

5.4
刷新缓存状态
flush status

5.5
重启缓存服务
reset query cache

9月 17

ORACLE 重建过度占用的空间

[整理人:张子萌]
数据库的undotbs或临时空间占用过太(自动扩展造成),磁盘空间有点紧,所以先考虑重建一下环节压力。

创建新的UNDO表空间

1)创建新的undo空间
SQL> CREATE UNDO
TABLESPACE UNDOTBS2
DATAFILE ‘/u02/UNDOTBS2.dbf’ SIZE 2048M
AUTOEXTEND
ON NEXT 10M MAXSIZE UNLIMITED ;
2)切换使用新的undo空间
SQL> ALTER SYSTEM SET UNDO_TABLESPACE = UNDOTBS2;
3)删除原始的undo空间
SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;

重建临时表空间

1)创建新的临时表空间
SQL> CREATE temporary
TABLESPACE TEMP2
TEMPFILE ‘/u02/temp2.DBF’ SIZE 512M
REUSE AUTOEXTEND
ON NEXT 1M MAXSIZE UNLIMITED;
2) 改变缺省临时表空间
SQL> ALTER DATABASE DEFAULT temporary TABLESPACE TEMP2;
3)删除原来临时表空间
SQL> DROP TABLESPACE TEMP1 INCLUDING CONTENTS AND DATAFILES;

7月 12

转帖 linux echo 显示颜色

echo要变换颜色的时候,要使用参数-e
格式: echo -e “33[字背景颜色;字体颜色m字符串33[0m”
例如:
echo -e “33[41;36m something here 33[0m”
其中41的位置代表底色, 36的位置是代表字的颜色
那些ascii code 是对颜色调用的始末.
33[ ; m …… 33[0m
让字体变为红色并且不停的闪烁
#echo -e “33[31m 33[05m 请确认是否要停止当前的squid进程,输入 [Y/N] 33[0m”
或者
#echo -e “33[31m 33[05m 请确认是否要停止当前的squid进程,输入 [Y/N] 33[0m”
字背景颜色范围:40—-49
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色
字颜色:30———–39
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
===============================================ANSI控制码的说明
33[0m 关闭所有属性
33[1m 设置高亮度
33[4m 下划线
33[5m 闪烁
33[7m 反显
33[8m 消隐
33[30m — 33[37m 设置前景色
33[40m — 33[47m 设置背景色
33[nA 光标上移n行
33[nB 光标下移n行
33[nC 光标右移n行
33[nD 光标左移n行
33[y;xH设置光标位置
33[2J 清屏
33[K 清除从光标到行尾的内容
33[s 保存光标位置
33[u 恢复光标位置
33[?25l 隐藏光标
33[?25h 显示光标