django是用redis缓存

首先先要在django的虚拟环境中安装django_redis
命令如下

pip install django_redis

在django 项目的配置文件中settings.py 文件设置

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        },
    },
}

然后开启redis,有两种方式启用django的cache,

站点缓存

MIDDLEWARE = [
    # 站点缓存
    # 'django.middleware.cach//e.UpdateCacheMiddleware',
    ***

页面缓存

from django.views.decorators.cache import cache_page
@cache_page(60)
def search(request):
    maxLength = 9
    if request.met

以上都是用django的cache的shortcut实现的

但是通过手动cache,具有更大的灵活性

from django.core.cache import cache
 def user_interview(request):
    key='interview'
    if cache.has_key(key):
        data = cache.get(key)
    else:
        data = get_data()
        cache.set(key,data,60*60)  #设置1分钟
    return data 
def get_data()
    data = User.objects.all()
    return data

#数据库缓存
# 导入需要的模块
 from django.core.cache import cache
 from . import models

 def cache_index(change=False):
     print('从redis中查询数据')
     a_list = cache.get('article_list')
     if a_list is None or change == True:
         print('去数据库中查找数据')
         a_list = models.Article.objects.all()
         print('将查询到的数据加载到缓存中')
         cache.set('article_list', a_list)
         return a_list

!!!!使用django.core.cache.cache类,这个类有点坑!


from django.core.cache import cache
from django.http import HttpResponse
 
def hello(request):
    key = 'skey'
    value = 'svalue'
    cache.set(key, value)
    if key in cache:
        return HttpResponse('<h1>{0}: {1}</h1>'.format(key, cache.get(key)))
    else:
        return HttpResponse('<h1>没有找到</h1>')

注意在这段代码运行前,需要将settings.py文件中CACHES中的decode_responses参数设置为False,这个是在网上找的(https://juejin.im/post/5d0b4488e51d45108126d257)

运行这段代码没任何问题,能写入能读取。但是!!!如果这个key-value值是别的客户端写入的呢?假如我通过redis-cli命令行工具添加了key-value,那通过cache.get(key)是取不到的,当然这段代码添加的skey-svalue在客户端执行get skey也是取不到的。
原来通过cache.set(key, value),会在key的前面拼接一个字符串":1:",也不知道为啥。所以我说这个cache是隐形巨坑。

127.0.0.1:6379> keys *  
1) ":1:skey"

通过get_redis_connection()


from django_redis import get_redis_connection
from django.http import HttpResponse
 
 
def hello(request):
    key = 'skey'
    value = 'svalue'
    conn = get_redis_connection('default')
    conn.set(key, value)
    if conn.get(key):
        return HttpResponse('<h1>{0}: {1}</h1>'.format(key, conn.get(key)))
    else:
        return HttpResponse('<h1>没有找到</h1>')

使用get_redis_connection()最好把settings.py文件中CACHES中的decode_responses参数设置为True, 同时conn = get_redis_connection(‘default’)中 的’default’是settings.py文件中CACHES设置的’default’。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值