自定义使用redis
创建url
![](https://i-blog.csdnimg.cn/blog_migrate/db40b87aa5fe097b8e008228980a1664.png)
定义单例模式连接池
1 2 3 | import redis # 连接池 POOL = redis.ConnectionPool(host = '10.211.55.4' , port = 6379 ,password = 'luffy1234' ,max_connections = 1000 ) |
导入连接池,并连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import redis from django.shortcuts import render,HttpResponse from utils.redis_pool import POOL def index(request): conn = redis.Redis(connection_pool = POOL) conn.hset( 'kkk' , 'age' , 18 ) return HttpResponse( '设置成功' ) def order(request): conn = redis.Redis(connection_pool = POOL) conn.hget( 'kkk' , 'age' ) return HttpResponse( '获取成功' ) |
使用第三方组件
安装
1 | pip3 install django - redis |
连接池不用写,内部帮我们定义好了连接池。
redis配置
1 2 3 4 5 6 7 8 9 10 11 | 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": "密码", } } } |
使用
1 2 3 4 5 6 7 8 9 10 11 | 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( "back" ) return HttpResponse( '获取成功' ) |
可以写多个,自动选择链接
![](https://i-blog.csdnimg.cn/blog_migrate/84ee9d14e6558ecbc1d06067df9363c3.png)
1 2 3 4 5 6 7 8 9 10 | 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( "back" ) return HttpResponse( '获取成功' ) |
高级配置
1. 全站缓存
给整个网站都设置缓存
设置中间件
![](https://i-blog.csdnimg.cn/blog_migrate/bd8b6698f9b19f911b1b1b39d0fe7682.png)
1 2 3 4 5 6 7 8 9 10 11 | 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) |
还可以设置超时时间
2. 单视图
全栈缓存太大了,我们如何让它进行单页面缓存。
去掉中间件,加装饰器
1 2 3 4 5 6 7 8 9 10 11 12 13 | from django.shortcuts import render,HttpResponse import time from django.views.decorators.cache import cache_page from rest_framework.throttling import SimpleRateThrottle @cache_page ( 60 * 15 ) def index(request): ctime = str (time.time()) return HttpResponse(ctime) def order(request): return render(request, 'order.html' ) |
3. 局部页面
![](https://i-blog.csdnimg.cn/blog_migrate/a86464f036ca56fdeb5e838571475f05.png)
补充:
rest framework框架访问频率限制推荐放到 redis/memecached
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # 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": "密码", } } } # FileBased配置 # CACHES = { # 'default': { # 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 'LOCATION': '/var/tmp/django_cache', # } # } # Memcached配置 # CACHES = { # 'default': { # 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', # 'LOCATION': '127.0.0.1:11211', # } # } |
设置哪个,缓存放在哪。
memarcahe不能做持久化。