声明式缓存
@cache_page()
@cache_page( timeout= 365 * 86400 , cache= 'default' , key_prefix= 'api' )
@api_view( ( 'GET' , ) )
def get_provinces ( request) :
queryset = District. objects. filter ( parent__isnull= True ) . only( 'name' )
serializer = DistrictSimpleSerializer( queryset, many= True )
return JsonResponse( {
'code' : 10000 ,
'message' : 'ok' ,
'results' : serializer. data
} )
@method_decorator(timeout, name)
@method_decorator( decorator= cache_page( timeout= 86400 ) , name= 'list' )
@method_decorator( decorator= cache_page( timeout= 86400 ) , name= 'retrieve' )
class HouseTypeViewSet ( ModelViewSet) :
queryset = HouseType. objects. all ( )
serializer_class = HouseTypeSerializer
pagination_class = None
编程式缓存
django.core.cache里的缓存方法
@api_view( ( 'GET' , ) )
def get_district ( request, distid) :
district = caches[ 'default' ] . get( f'district:{distid}' )
if district is None :
district = District. objects. filter ( distid= distid) . defer( 'parent' ) . first( )
caches[ 'default' ] . set ( f'district:{distid}' , district)
serializer = DistrictDetailSerializer( district)
return Response( serializer. data)
djanog_redis里的缓存方法
@api_view( ( 'GET' , ) )
def get_district ( request, distid) :
redis_cli = get_redis_connection( )
data = redis_cli. get( f'zufang:district:{distid}' )
if data:
data = json. loads( data)
else :
district = District. objects. filter ( distid= distid) \
. defer( 'parent' ) . first( )
data = DistrictDetailSerializer( district) . data
redis_cli. set ( f'zufang:district:{distid}' , json. dumps( data) , ex= 900 )
return Response( data)