DjangoRedis詳解

DjangoRedis是在Django Web框架下的Redis資料庫連接工具,它封裝了Redis資料庫對於Django的調用操作,是在Python3下的一個成熟、可靠、易用的Django擴展工具包。下面從DjangoRedis的配置、使用和緩存選取三個方面詳細介紹。

一、配置DjangoRedis

DjangoRedis的配置主要涉及Redis伺服器地址和埠號、Redis用戶密碼等參數設置。一般情況下,可以將這些參數保存在一個單獨的配置文件中,例如settings.py,放在您的項目應用程序的根目錄下,代碼如下:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

其中, 『default』是緩存名(也是緩存配置唯一的標識符,如果要使用多個緩存配置的話,這裡就不一樣了);『BACKEND』是緩存的後端,Django自帶的cache後端為『django.core.cache.backends.locmem.LocMemCache』,而我們要使用Redis,則設置為『django_redis.cache.RedisCache』;『LOCATION』是Redis的資料庫地址,格式為「redis://address:post/db_number」,這裡我們設置為『redis://localhost:6379/0』,表示連接到默認Redis資料庫(0號資料庫);『OPTIONS』是適用於緩存後端的參數和選項,這裡我們設置為使用DefaultClient,其中還有其他可選的參數和選項。

二、使用DjangoRedis

DjangoRedis常見的使用場景是在緩存、隊列、鎖等方面,下面我們以JavaScript Object Notation(JSON)作為數據交換格式的緩存機製為例子講解使用方法。

1.添加緩存記錄

將一個鍵值對存入緩存中,並設置有效時間time,代碼如下:

from django.core.cache import cache

cache.set(key, value, time)

其中,key是一個字元串或者一個參數化的鍵值對字典,value可以是任意可序列化物體(可以將value序列化Python的str或者用JSON序列化)。time是緩存的有效時間,可以是浮點型,整數型,或者None(緩存永久有效)

2.獲取緩存記錄

通過key來獲取緩存記錄,如果緩存記錄不存在則返回None,代碼如下:

cache.get(key)

如果你要獲取緩存值的同時,返回一個默認值,可以使用get()方法中的『default』參數參數,代碼如下:

cache.get(key, default='cachemiss')

3.刪除緩存記錄

刪除一個緩存鍵值,如果鍵值對不存在則不執行操作,代碼如下:

cache.delete(key)

三、DjangoRedis緩存選取

在DjangoRedis中,我們可以使用多種緩存方式,常用的包括:內存存儲、持久化存儲,以及緩存策略。

1.內存存儲

內存存儲使用 DjangoRedis(或Django)提供的RAM緩存後端,在內存中緩存數據,訪問速度快(讀取延時通常在微秒級),緩存較小(內存容量的限制),適用於一些無需過期的緩存,或者需要較快速讀取的數據。

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    },
    'redis': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        },
        'TIMEOUT': 1,  # 緩存的默認過期時間
    }
}

2.持久化存儲

持久化存儲使用 DjangoRedis(或Django)提供的redis緩存後端,在Redis資料庫中進行數據的緩存,可支持多種Redis數據結構(如set、list、hash等),可以在緩存伺服器重啟後繼續存在。快閃記憶體速度較快,但相對於內存存儲讀取延時要大一些(在單位時間內,通常需要比內存存儲多一倍的時間來訪問近似數量的記錄)。

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    },
    'redis': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6380/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        },
        'TIMEOUT': 1,  # 緩存的默認過期時間
    }
}

3.緩存策略

DjangoRedis提供了多種緩存策略,根據實際情況選擇適當的策略可以提高緩存效率,常用的策略有以下幾種:

3.1 LRU

最近最少使用(LRU)策略是將最近最少使用的元素從緩存中除去。以空閑空間供新緩存。在DjangoRedis中,這一策略通過為緩存賦予一個max_entries值來實現。

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
            'MAX_ENTRIES': 10000,
        },
        'TIMEOUT': 1,  # 緩存的默認過期時間
    },
    'redis': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6380/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
            'MAX_ENTRIES': 10000,
        },
        'TIMEOUT': 1,  # 緩存的默認過期時間
    }
}

3.2 LFU

最少使用(LFU)策略是在緩存達到固定大小之後,從緩存中刪掉使用最少的元素。請注意,這種方法不常用。

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
            'MAX_ENTRIES': 10000,
            'CULL_FREQUENCY': 5,
        },
        'TIMEOUT': 1,  # 緩存的默認過期時間
    },
    'redis': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6380/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
            'MAX_ENTRIES': 10000,
            'CULL_FREQUENCY': 10,
        },
        'TIMEOUT': 1,  # 緩存的默認過期時間
    }
}

3.3 TTL

ttl 指緩存的最大生存時間,即從創建緩存對象開始,到指定的時間過期並被移除。 在DjangoRedis中,這個時間的設置方法與我們配置緩存記錄中的time參數一樣。

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
            'MAX_ENTRIES': 10000,
            'CULL_FREQUENCY': 5,
        },
        'TIMEOUT': 60*5,  # 緩存的過期時間設置為5分鐘
    },
    'redis': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6380/0',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
            'MAX_ENTRIES': 10000,
            'CULL_FREQUENCY': 10,
        },
        'TIMEOUT': 60*10,  # 緩存的過期時間設置為10分鐘
    }
}

總結

正如您所看到的,DjangoRedis為Django Web框架的用戶提供了一個便於連接Redis資料庫的渠道,並提供了方法和策略來管理緩存效率。希望這個簡短的教程能夠對你工作中有所幫助。

原創文章,作者:GWAZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135188.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GWAZ的頭像GWAZ
上一篇 2024-10-04 00:11
下一篇 2024-10-04 00:11

相關推薦

  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • C語言貪吃蛇詳解

    一、數據結構和演算法 C語言貪吃蛇主要運用了以下數據結構和演算法: 1. 鏈表 typedef struct body { int x; int y; struct body *nex…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論