一开始 flask的cache type是 simple,然后在生产环境 可不能这么用吧,然后开始研究用memcached,然后一直出错。出错的原因是 libmemcached的版本和pylibmc的版本不对,然后,我结局了他就好了,这里就不标明如何搭建环境了,值得提醒的是,在pip 安装包的时候一定要指定好版本。
代码如下:
config.py
(pythonenv)[xluren@test Flask-Cache_for_memcached_06]$ cat config.py
import os
class Config(object):
DEBUG=True
CACHE_TYPE = 'memcached'
SECRET_KEY = "d73b04b0e696b0945283defa3eee4538"
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(BASE_DIR, 'app.db')
CACHE_MEMCACHED_SERVERS=["10.210.71.145:11211"]
class MysqlConfig(Config):
SQLALCHEMY_DATABASE_URI = 'mysql://hello:hello@10.210.71.145:3306/sqlalchemy'
class MongoDBConfig(Config):
MONGOALCHEMY_DATABASE="mydb"
MONGOALCHEMY_SERVER="10.210.71.145"
MONGOALCHEMY_PORT=8888
POST_PER_PAGE = 3
run.py
(pythonenv)[xluren@test Flask-Cache_for_memcached_06]$ cat run.py
from flask import Flask
import random
# import the flask extension
from flask.ext.cache import Cache
app = Flask(__name__)
#import config setting
app.config.from_object("config.Config")
# register the cache instance and binds it on to your app
app.cache = Cache(app)
@app.route("/")
@app.cache.cached(timeout=500,key_prefix="hello") # cache this view for 30 seconds
def cached_view():
a=random.randint(0,100)
return str(a)
if __name__ == "__main__":
app.run(port=5000, debug=True, host='0.0.0.0')
github ,stackoverflow 是一对好基友,好工具啊。
cache 验证的代码:
<?php
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
#add
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."\n";
#modify
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "\n";
#insert array
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "\n";
#delete
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "\n";
#add
$mem->set('key1', 'This is k1 value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."\n";
#add
$mem->set('key2', 'This is k2 value', 0, 60);
$val = $mem->get('key2');
echo "Get key2 value: " . $val ."\n";
#add
$mem->set('key3', 'This is k3 value', 0, 60);
$val = $mem->get('key3');
echo "Get key3 value: " . $val ."\n";
$items=$mem->getExtendedStats("items");
$host="127.0.0.1";
$port=11211;
$items=$items["$host:$port"]['items'];
print "###############";
print_r($items);
print "###############";
foreach($items as $key=>$values)
{
$number=$key;
$str=$mem->getExtendedStats ("cachedump",$number,0);
$line=$str["$host:$port"];
if( is_array($line) && count($line)>0)
{
foreach($line as $key=>$value)
{
echo $key.'=>';
print_r($mem->get($key));
echo "\r\n";
}
}
}
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "\n";
$mem->close();
?>验证的时候,页面会有直观的体现,同时,通过代码访问memcached的,得到的效果更佳真实
太爽了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com