Django缓存基础及应用

一、Django六种缓存方式(都是在settings中设置)

1、开发调试(开发调试使用,实际不做任何操作)

CACHES = {
    'default': {       
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',     # 引擎
        'TIMEOUT': 300,                                               # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
        'OPTIONS':{
            'MAX_ENTRIES': 300,                                       # 最大缓存个数(默认300)
            'CULL_FREQUENCY': 3,                                      # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
               },
             'KEY_PREFIX': '',                                        # 缓存key的前缀(默认空)
             'VERSION': 1,                                            # 缓存key的版本(默认1)
             'KEY_FUNCTION' 函数名                                     # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
            }
        }

 # 自定义key 可用于‘KEY_FUNCTION'
    def default_key_func(key, key_prefix, version):
        """
          自定义生成key的函数
        """
        return '%s:%s:%s' % (key_prefix, version, key)
    
    
    def get_key_func(key_func):
        """
        如果key_func是空
        默认使用 default_key_func
        否则,则使key_func函数
        """
        if key_func is not None:
            #检查该函数是否可以调用
            if callable(key_func):
                return key_func
            else:
                return import_string(key_func)
        return default_key_func

2、内存缓存

# 此缓存将内容保存至内存的变量中
    # 配置:
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
                'LOCATION': 'unique-snowflake',  #设置一个唯一值
            }
        }
    # 注:其他配置同开发调试版本,就是将开发调试版本里面的这几句换成上面这个即可

3、文件缓存(适合小网站)

CACHES = {
     'default': {
          'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
          'LOCATION': '/var/tmp/django_cache',  #缓存文件路径
          }
     }#其他配置跟开发调试一样

4、数据库

CACHES = {
    'default': {
          'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
          'LOCATION': 'my_cache_table', # 数据库表
        }
   }#其他设置跟开发调试的一样

5.1、Memcache缓存(python-memcached模块)

#方式1  
 CACHES = {
     'default': {
         
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': '127.0.0.1:11211', #指定缓存服务器IP地址和端口
       }
   }
  #方式2
  CACHES = {
      'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',         # 指定指定局域网内的主机名加socket套接字为Memcache缓存服务器
         'LOCATION': 'unix:/tmp/memcached.sock',
        }
    }   
   # 方式3
   CACHES = {
       'default': {
          'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
          'LOCATION': [ #指定一台或多台主机IP地址和端口为缓存服务器
              '172.19.26.240:11211',
              '172.19.26.242:11211',
           ]
        }
    }
   # 方式4
   CACHES = {
       'default': {
          'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
          'LOCATION': [
              #以元组的形式,第一个放缓存服务器的IP跟端口
              #第二个参数放权重
              ('172.19.26.240:11211',5),
              ('172.19.26.242:11211',1)
           ]
        }
    }
# 注:其他配置同开发调试版本,就是将开发调试版本里面的这几句换成上面这个即可

 

5.2、Memcache缓存(pylibmc模块)

#方式1
CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
            'LOCATION': '127.0.0.1:11211', #指定IP和端口为缓存服务器
        }
    }
# 方式2
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
         #指定局域网内的主机名加socket套接字为Memcache缓存服务器
        'LOCATION': '/tmp/memcached.sock',
        }
    }   
#方式3
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
         'LOCATION': [
             #分布式缓存,程序会把以下多台服务器当作一个单独的缓存,
             #不会再每台服务器上复制缓存值
             '172.19.26.240:11211',
             '172.19.26.242:11211',
          ]
       }
  }
# 注:其他配置同开发调试版本,就是将开发调试版本里面的这几句换成上面这个即可

 

6、Redis缓存(需要安装django-redis)

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100}
            # "PASSWORD": "密码",
        }
    }
}# 视图中操作
from django_redis import get_redis_connection
conn = get_redis_connection("default")

二、缓存应用

1、前后端混合开发使用

(1)全站缓存

 在settings文件中的中间件最上跟最下分别配置一个update,fetch中间件

    MIDDLEWARE = [
        # Update必须放在第一个,
        'django.middleware.cache.UpdateCacheMiddleware',
        # 其他中间件...
        #Fetch必须放在最后一个
        'django.middleware.cache.FetchFromCacheMiddleware',
    ]    

(2)单页面缓存

#方法一:在视图函数上加装饰器
from django.views.decorators.cache import cache_page
@cache_page(5) #缓存5秒
def test(request):
    ctime=time.time()
    return render(request,'test.html',locals())

#方法二:在路由上配置装饰器
from django.views.decorators.cache import cache_page
urlpatterns=[
    url(r'test',cache_page(5)(views.test)),
]

(3)页面局部缓存

# a. 引入TemplateTag
        {% load cache %}
# b. 使用缓存
        {% cache 5000 缓存key %}
            缓存内容
        {% endcache %}

#例子:
    {% load cache %}
    #    key可以随便取
    {% cache 10 'name' %}
    <h2>{{ ctime }}</h2>
    {% endcache %}

2、前后端分离的使用

from django.core.cache import cache
cache.set('key',value可以是任意数据类型)
cache.get('key')
#例子
from django.core.cache import cache
def test(request):
    if cache.get('key'):
        ctime=cache.get('key')
       
    else:
        ctime=time.time()
        cache.set('key',ctime)
    return render(request,'test.html',locals())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值