成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何讓你的 Django API 快十倍

開發 前端
在 Django 里寫 REST API 是簡單的,如何讓 API 的速度更快呢?本文分享一種方法:用 Redis 作為緩存,可以讓你的 API 的速度提升 10 倍。

在 Django 里寫 REST API 是簡單的,如何讓 API 的速度更快呢?本文分享一種方法:用 Redis 作為緩存,可以讓你的 API 的速度提升 10 倍。

這里假定你已經安裝了 Redis,并且自己可以按照官方文檔寫出一個 Django REST API,對 Django 有一定的基礎。

首先,讓我們安裝一個插件:

pip install django-redis

然后在配置文件 settings.py 中添加一下內容:

CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1", # Local Link provided by the redis-server command
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}

然后在 views.py 中導入 redis 并創建一個 redis 實例:

from django.core.cache import cache
import time
import redis
from rest_framework.response import Response
redis_instance = redis.StrictRedis(host='127.0.0.1', port=6379, db=1)

通過在我們的 views.py 中創建一個列表函數來實現 Redis。此視圖功能將檢查數據是否在 Redis 中。如果在 Redis 服務器中找到數據,則從那里獲取數據,如果沒有,則從數據庫中獲取數據并將其存儲在 Redis 中以備下次使用,這會導致速度增加,示例代碼如下:

class MusicianViewSet(viewsets.ModelViewSet):
serializer_class = MusicianSerializer
queryset = Musician.objects.all()
@log_db_queries
def list(self, request):
first_name = self.request.query_params.get('first_name')

if first_name is not None:
cache_key = 'name' + first_name
else:
cache_key = 'name'

if cache_key in cache:
print("redis")
queryset = cache.get(cache_key)
return Response(queryset)
else:
print('db')
queryset = Musician.objects.all()
if first_name is not None:
queryset = queryset.filter(first_name__contains=first_name)

serializer_class = MusicianSerializer(queryset, many=True)
cache.set(cache_key , serializer_class.data, timeout=60*60)
return Response(serializer_class.data)

在這里 timeout 設置數據在 Redis 服務器中保留多長時間的超時,在這段代碼中,它設置為 1 小時。1 小時后,它將自動從 Redis 中刪除。

細心的你可能看到了裝飾器 log_db_queries,它來測試 API 的訪問速度,具體代碼如下:

def log_db_queries ( f )
from django.db import connection
def new_f ( * args , ** kwargs )
start_time = time.time()
res = f ( * args , ** kwargs )
print ( "\n\n" )
print ( "-"*80 )
print ("db queries log for %s:\n" % (f.__name__))
print ( " TOTAL COUNT : % s " % len ( connection.queries ) )
for q in connection.queries :
print ("%s: %s\n" % (q["time"] , q["sql"]))
end_time = time.time ()
duration = end_time - start_time
print ('\n Total time: {:.3f} ms'.format(duration * 1000.0))
print ("-"*80)
return res
return new_f

這為我們提供了獲取數據所需時間的詳細視圖,以及數據是否來自數據庫或 Redis。

來個使用緩存的前后對比:

使用前:1219.266 ms:

圖片

使用后:134.002 ms:

圖片

最后

緩存確實有助于提高 Django REST API 的速度,而 Redis 又是最佳的緩存工具,可以從這里獲取Django-Redis[1] 的源代碼。

責任編輯:武曉燕 來源: Python七號
相關推薦

2024-03-08 07:58:13

QPShttpsync

2023-09-07 11:29:36

API開發

2025-05-26 04:00:00

2023-06-13 13:52:00

Java 7線程池

2023-03-07 08:34:01

2025-03-03 13:12:33

C#代碼Python

2024-12-06 06:20:00

代碼枚舉

2021-08-17 14:30:09

Windows電腦微軟

2025-02-24 08:10:00

C#代碼開發

2017-09-26 14:56:57

MongoDBLBS服務性能

2025-04-22 08:39:14

編程容器map

2025-04-24 09:31:09

Visio畫圖工具

2021-06-02 22:54:34

技巧 Git Clone項目

2020-09-16 16:07:34

Chrome插件瀏覽器

2025-03-13 11:59:00

2018-01-29 05:38:20

5G4G運營商

2018-09-27 15:42:15

Python編程語言技術

2016-07-07 15:38:07

京東

2019-03-27 13:45:44

MySQL優化技巧數據庫

2025-05-26 00:02:00

TypeScriptGo 語言前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品久久久久久久久久吃药 | 久久久妇女国产精品影视 | 99久久精品免费看国产免费软件 | 国产视频三级 | 午夜免费网 | 91香蕉视频在线观看 | 成人做爰www免费看视频网站 | 99精品国产一区二区青青牛奶 | 天天操天天天干 | 免费观看av| 99久久久无码国产精品 | 国产一区二区三区在线看 | 日韩中文字幕免费 | 欧美日韩国产一区 | 日韩视频免费在线 | 国产精品亚洲精品日韩已方 | 欧美福利影院 | 国产精品亚洲成在人线 | 欧美日韩国产一区二区三区 | 久久久久久综合 | www国产成人免费观看视频,深夜成人网 | 欧美日韩高清在线一区 | 99re免费| 国产精品久久久久久亚洲调教 | 日韩在线小视频 | 精品久久电影 | www.亚洲免费 | www.47久久青青 | 国产美女久久 | 免费精品久久久久久中文字幕 | 日韩欧美一区二区三区免费观看 | 四虎永久免费地址 | 一区二区精品 | 在线观看国产 | 密色视频 | 欧美成人一区二区三区 | 国产精久久久久久 | 欧美成人aaa级毛片在线视频 | tube国产| 福利社午夜影院 | 久久av一区二区三区 |