Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
mkdir demo
cd demo
virtualenv env
source env/bin/activate
git clone https://github.com/AleshGood/Flask-Fragment.git
cd Flask-Fragment
python setup.py develop
pip install git+https://github.com/jaysonsantos/python-binary-memcached.git
cd demo
pip install -r requirements.txt
python ssiblog.py create_db
python ssiblog.py debug
mecached_pass на try_files (или даже без него, зависит от конкретных настроек).location /cache/ {
internal;
root /path/to/cache/;
error_page 404 =200 @backend;
}
кэш конкретно для этого URL в кэшсторе NginxВ данной схеме nginx ничего не знает про кэш, он просто отдает файл
/path/to/cache/posts_list/4. Соответственно вы в своем приложении генерирует страницу, записываете её во временный файл, а затем моментально, атомарной операцией заменяете этим временный файлом /path/to/cache/posts_list/4.f = NamedTemporaryFile(delete=False)
f.write('Hello\n')
f.close()
os.rename(f.name, "/path/to/cache/posts_list/4")
установки блокировки, пока генерируется контент и т.п.
man fcntl про Advisory locking или более простой man 2 flock. А Python есть соответсвующие функции. open() с флагами O_CREAT|O_EXCL в этом случае, если файла не существует, то он будет создан, а если уже существует, то вызов open() вернет ошибку EEXIST.item = "posts_list/4"
cache = "/path/to/cache"
item_file = os.path.join(cache, item);
tmp_file = item_file + "~"
try:
fd = os.open(tmp_file, os.O_CREAT | os.O_EXCL)
try:
os.write(fd, 'Hello\n')
os.rename(tmp_file, item_file)
except:
os.remove(tmp_file)
raise
finally:
os.close(fd)
except OSError as e:
if e.errno != errno.EEXIST:
raise
print "cache is locked"
Подсчет количества сообщений пользователя достаточно затратная операция, а если мы там выводим еще и граф друзей, то только один этот фрагмент существенно просадит БД, а следовательно и общую скорость загрузки страницы… Можно закэшировать контент этого блока...
Очень неудачный пример. У каждого пользователя свое количество сообщений, поэтому этот фрагмент для каждого пользователя индивидуален.
Кэширование фронтэнда: Flask, Nginx+Memcached+SSI