1 使用memcached
1.1 安装memcached
安装(Linux)
sudo apt install memcached
启动
#方式一:
service memcached start
# 方式二:
/usr/bin/memcached -u memcache -m 1024 -p 11222 -l 0.0.0.0 -d start
- -d:这个参数是让memcached在后台运行
- -m:指定占用多少内存。以M为单位,默认为64M。
- -p:指定占用的端口。默认端口是11211。
- -l:别的机器可以通过哪个ip地址连接到我这台服务器,如果想要让别的机器连接,就必须设置-l 0.0.0.0
检测启动成功
ps aux|grep memcached
# memcache 11025 0.0 0.1 326560 2372 ? Ssl Aug28 0:01 memcached -u memcache -m 512 -p 11211 -l 0.0.0.0 -d
1.2 Django连接memcached
1.2.1在'setting.py'文件中添加缓存的配置
# 缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
注意:添加的键的命名方式如下
def default_key_func(key, key_prefix, version):
return '%s:%s:%s' % (key_prefix, version, key)
如要修改,可在setting.py文件中添加配置'KEY_FUNCTION'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '172.19.26.240:11211',
'KEY_FUNCTION': lambda: key_prefix,version,key : 'Django'+key,
}
}
1.2.2 配置好之后在views中操作cache:
from django.core.cache import cache
def index(request):
cache.set('username','django',60)
print(cache.get('username'))
return HttpResponse('index')
2 使用redis
2.1 安装redis
安装(Linux)
- 将下载的压缩文件解压
tar zxvf redis-4.0.8.tar.gz
- 复制:推荐放在"/usr/local/"下
mv -r redis-4.0.8/* /usr/local/redis
- 生成和安装
cd /usr/local/redis
make
make install
启动和配置
- 默认方式启动
redis-server
- 运行启动
redis-server --port 6380 # 指定运行的端口号
- 配置文件方式启动
redis-server /etc/redis/redis.conf
客户端连接redis
- 交互式方式
redis-cli -h {host} -p {port} # 会进入交互式环境
- 命令方式
redis-cli -h {host} -p {port} {command} # 直接执行一个命令,不进入交互式环境
停止redis服务
# 客户端关闭redis服务器,默认save即关闭时生成持久文件
redis-cli shutdown nosave|save
2.2 Django配置redis缓存
开发机上安装django-redis
pip install django-redis
配置文件'setting.py'
# 创建键时命名方式
def KEY_FUNCTION(key, key_prefix, version):
return "django:" + key
# redis缓存
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
# url格式 redis://[:password]@host:port/0
# 可以在url指定redis的密码,0表示低0个数据库
'LOCATION': 'redis://127.0.0.1:6379/1',
'OPTIONS': {
"CLIENT_CLASS": 'django_redis.client.DefaultClient',
'PASSWORD': '123456',
},
# 自定义键名命名规则
'KEY_FUNCTION': KEY_FUNCTION,
}
}
对view缓存
# 通过装饰器对views进行缓存
@cache_page(60 * 2) # 过期时间为秒
def cache(request):
return HttpResponse('cache')
对全站进行缓存,需在setting中设置
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
对模板片段进行缓存
{% load cache %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
{% cache 120 username %}
hello, Django
{% endcache %}
</body>
</html>
底层的缓存API
>>>from django.core.cache import cache
>>>cache.set('username', 'django', 120)
>>>True
>>>cache.get('username')
>>>'django'
>>>cache.ttl('username')
>>>101
>>>cache.set_many({'a': 1, 'b': 2, 'c': 3})
>>>cache.get_many(['a', 'b', 'c'])
>>>OrderedDict([('a', 1), ('b', 2), ('c', 3)])
redis服务器:
127.0.0.1:6379[1]> keys *
1) "django:b"
2) "django:c"
3) "django:a"
127.0.0.1:6379[1]>