1. 程式人生 > >Django分別使用Memcached和Redis作為緩存的配置(Linux環境)

Django分別使用Memcached和Redis作為緩存的配置(Linux環境)

inux prefix 自定義 cor dict make func keys onf

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

啟動和配置

  1. 默認方式啟動
redis-server 

2. 運行啟動

redis-server --port 6380  # 指定運行的端口號
  1. 配置文件方式啟動
redis-server /etc/redis/redis.conf

客戶端連接redis

  1. 交互式方式
redis-cli -h {host} -p {port}  # 會進入交互式環境
  1. 命令方式
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]>

Django分別使用Memcached和Redis作為緩存的配置(Linux環境)