Django 缓存入门教程
说明:本教程开发环境为CenOS 6 + Python2.7 + Django1.12,假设您已经成功安装Django环境。
关于redis
REmote DIctionary Server(Redis) 是一个key-value存储系统,它既可基于内存亦可持久化。
安装redis
yum install redis
测试redis安装是否成功
service redis start
redis-cli
如果成功进入命令行,说明redis server安装成功。redis的默认端口是6379
安装django-redis
pip install django-redis
django中如何使用redis
- 在settings中启用redis
# use redis
# https://niwinz.github.io/django-redis/latest/
# http://django-redis-chs.readthedocs.io/zh_CN/latest/
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
- 在views中使用缓存
from django.shortcuts import render,HttpResponse, redirect
import datetime
from django.core.cache import cache
def test_cache(request):
second = datetime.datetime.now().second
key = 'titles'
titles_cached = cache.get(key)
if not titles_cached:
titles = [(second, 'Gavin'), (second, 'Michael'), (second, 'Jack')]
cache.set(key, titles)
else:
titles = titles_cached
context = {'second': second, 'titles': titles, 'cached': titles_cached}
return render(request, 'cache.html', context)
- 在模板页面使用缓存
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% load cache %}
{% cache 5 titles_cache %} <!-- 5 代表缓存时间,titles_cache是缓存名称-->
<h1>这里应用了缓存技术:{{ second }}</h1>
{% endcache %}
<h1>这里没有用缓存{{ second }}</h1>
<h1>现在有title缓存吗?{{ cached }}</h1>
<ul>
{% for title in titles %}
<li>{{ title.0}},{{ title.1 }}</li>
{% endfor %}
</ul>
</body>
</html>
常见错误:
wrong number of arguments for ‘set’ command
这是由于redis版本太低引起的,redis2.6以前的版本不支持set命令。
查看redis版本号:redis-server --version
重新安装redis:
yum remove redis
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar -zxvf redis-3.2.9.tar.gz
cd redis-3.2.9
make
cd src
make install PREFIX=/usr/local/redis
cd ..
mkdir /usr/local/redis/etc/
mv redis.conf /usr/local/redis/etc/
启动redis:
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
默认redis不是在后台运行的,/usr/local/redis/etc/redis.conf中的daemonize的值修改为yes,重新启动,redis-server即可把redis放在后台运行。
关于memcache
memcache是一个高性能的分布式的内存对象缓存系统,memcache通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据。memcache主要用于分担数据库的压力。
安装memcached
yum install memcached
详细参考:https://github.com/memcached/memcached/wiki/Install
源码安装:
yum install libevent-devel
wget http://memcached.org/latest
tar -zxvf latest
cd memcached-1.4.37/
./configure --prefix=/usr/local/memcached
make && make test && sudo make install
注意:安装后,由于我们指定的安装目录是/usr/local/memcached,所以直接使用memcached命令是不行的,需要/usr/local/memcached/bin/memcached才行。
参考资料:https://github.com/memcached/memcached/wiki/Install#from-source
查看memcached帮助命令
/usr/local/memcached/bin/memcached -h
启动memcached服务
例如:/usr/local/memcached/bin/memcached -u root -p11211 -m 64
这句命令的意思是以root用户启动memcached,最大缓存设置为64M。
如何使用Python操作memcache
pip install pymemcache
from pymemcache.client.base import Client
client = Client(('localhost', 11211))
client.set('some_key', 'some_value')
result = client.get('some_key')
详细可参考:https://pymemcache.readthedocs.io/en/latest/getting_started.html
memcached可视化工具的使用
treeNMS是一个基于Java的memcached可视化工具。我们可以使用它来查看memcached。
假设,我们把treeNMS安装在Windows系统上,要通过它来访问远程Linux主机上的memcached,则需要在Linux上执行下属命令:
/usr/local/memcached/bin/memcached -l 0.0.0.0 -u root -p11211 -m 64
注意,这里的-l 0.0.0.0代表允许所有主机的访问,当然11211端口必须能被你的windows访问到。