redis之django-redis

Posted xiangxiaolin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis之django-redis相关的知识,希望对你有一定的参考价值。

自定义连接池

这种方式跟普通py文件操作redis一样,代码如下

views.py

技术图片
 1 import redis
 2 from django.shortcuts import render,HttpResponse
 3 from utils.redis_pool import POOL
 4  
 5 def index(request):
 6     conn = redis.Redis(connection_pool=POOL)
 7     conn.hset(kkk,age,18)
 8  
 9     return HttpResponse(设置成功)
10 def order(request):
11     conn = redis.Redis(connection_pool=POOL)
12     conn.hget(kkk,age)
13  
14     return HttpResponse(获取成功)
View Code

通过第三方组件操作redis

安装

pip3 install django-redis

配置

 settings.py

技术图片
# 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": "密码",
        
    
View Code

使用

views.py

技术图片
import redis
from django.shortcuts import render,HttpResponse
from django_redis import get_redis_connection
 
 
def index(request):
    conn = get_redis_connection("default")
    return HttpResponse(设置成功)
def order(request):
    conn = get_redis_connection("default")
    return HttpResponse(获取成功)
View Code
技术图片
from rest_framework.views import APIView
from rest_framework.response import Response
 
from django.core.cache import cache
 
class OrderView(APIView):
    def get(self,request,*args,**kwargs):
        # conn = get_redis_connection(‘default‘)
        cache.set(a,b)
        print(cache.get(a))
        return Response(..)
View Code

全站缓存

使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,
当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存

技术图片
MIDDLEWARE = [
        django.middleware.cache.UpdateCacheMiddleware,
        # 其他中间件...
        django.middleware.cache.FetchFromCacheMiddleware,
    ]
View Code

一个放在最上面,一个放在最下面

views.py

技术图片
from django.shortcuts import render,HttpResponse
import time
 
 
def index(request):
    ctime = str(time.time())
    return HttpResponse(ctime)
 
def order(request):
    ctime = str(time.time())
    return HttpResponse(ctime)
View Code

配置了全站缓存,在不同的时间(一定范围内),上面两个视图返回的时间是一样的,都是缓存时的时间

单独视图缓存

方式一:通过装饰器

技术图片
from django.views.decorators.cache import cache_page
 
        @cache_page(60 * 15)
        def my_view(request):
            ...
View Code

方式二:通过url

技术图片
from django.views.decorators.cache import cache_page
 
        urlpatterns = [
            url(r^foo/([0-9]1,2)/$, cache_page(60 * 15)(my_view)),
        ]
View Code

局部页面缓存

1. 引入TemplateTag

% load cache %

2. 使用缓存

技术图片
% cache 5000 缓存的key %
       缓存内容
% endcache %
View Code

 

以上是关于redis之django-redis的主要内容,如果未能解决你的问题,请参考以下文章

Redis之集群环境搭建

Redis五大数据类型之Hash

细说Redis之 Redis的持久化

Redis.之.环境搭建(集群)

Redis之Python 使用 Redis

redis之django-redis