1. 什么是 Django-Redis?
Django-Redis 是 Django 的一个插件,用于为 Django 应用程序提供 Redis 缓存、Redis连接、Redis Sessions 和 Redis Pub/Sub 功能。
Django-Redis 维护了 Redis 服务器和 Django 应用程序之间的连接,并提供了许多工具,使您能够轻松地在您的 Django 应用程序中使用 Redis。
2. Django-Redis 的安装
2.1 通过 pip 安装 Django-Redis
可以通过以下命令使用 pip 将 Django-Redis 安装到您的环境中:
pip install django-redis
2.2 配置 Django-Redis
要在 Django 中使用 Redis,必须在项目中的设置文件中配置适当的 Redis 服务器连接设置。
在 Django 项目中,找到 settings.py 文件,然后将以下代码添加到文件末尾。
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient"
},
"KEY_PREFIX": "example"
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
REDIS_URL = 'redis://127.0.0.1:6379/0'
BROKER_URL = REDIS_URL
CELERY_RESULT_BACKEND = REDIS_URL
在上述代码中,CACHES 是创建高速缓存的设置,SESSION_ENGINE 和 SESSION_CACHE_ALIAS 用于指定会话引擎的设置, REDIS_URL、BROKER_URL 和 CELERY_RESULT_BACKEND 用于 Celery 设置。
3. Django-Redis 的用法
3.1 缓存
缓存是将短时间内频繁使用的数据存储在快速易用的存储器(如 Redis)中,以便在下次访问时能够更快地提供数据。Django-Redis 提供了简单易用的缓存系统来帮助开发人员轻松地缓存数据。
3.1.1 缓存的基本用法
下面是一个使用 Django-Redis 缓存的示例。
from django.shortcuts import render
from django.core.cache import cache
def home(request):
# 尝试从缓存中获取“homepage”值
cached_data = cache.get("homepage")
# 如果存在缓存数据,则返回它
if cached_data is not None:
return cached_data
# 计算视图所需的数据...
data = {"hello_world": "Hello, World!"}
# 在计算之后,将结果添加到缓存中
cache.set("homepage", data)
# 将结果返回给用户
return render(request, "home.html", data)
在上面的代码中,从 Django 中导入了“cache”对象,这是与 Redis相关的一个类。我们使用 cache.get() 方法尝试获取名为“homepage”的值。如果它存在,我们将返回它,否则我们将计算这个值并使用 cache.set() 方法将它添加到 Redis 缓存中。最后,在视图中返回数据。
3.1.2 设置缓存的过期时间
除了设置 Redis 缓存之外,Django-Redis 还允许您设置缓存键的过期时间。例如,您可以使用以下方法缓存一个健在60秒钟(即:一分钟)内过期:
cache.set("homepage", data, timeout=60)
3.1.3 检查缓存是否可用
有时您可能必须检查缓存是否可用。您可以使用以下方法检查 Redis 是否可用:
import redis
redis_conn = redis.StrictRedis('localhost')
try:
redis_conn.ping()
print('Redis client is connected and able to access server')
except redis.ConnectionError:
print('Redis client is unable to connect to the server')
在上述代码中,我们使用redis.StrictRedis创建一个 redis 连接对象 redis_conn。我们使用模块中的ping方法测试连接对象连接到 Redis 服务器。 如果连接成功,将打印“Redis client is connected and able to access server”。 否则,将打印“Redis client is unable to connect to the server”。
3.2 Sessions
Django-Redis 还允许您使用 Redis 存储您的会话。
3.2.1 启用 Redis Sessions
要启用 Redis 会话,请确保在 Django 设置文件中添加以下行:
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
如果您希望 Redis 是默认会话引擎,请使用以下行:
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
CACHE_BACKEND = "django_redis.cache.RedisCache"
CACHE_URL = "redis://127.0.0.1:6379/0"
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
REDIS_URL = 'redis://127.0.0.1:6379/0'
# 配置 Celery
BROKER_URL = REDIS_URL
CELERY_RESULT_BACKEND = REDIS_URL
3.2.2 使用 Redis Sessions
一旦您启用了 Redis 会话,您可以在视图中轻松地操作它们:
from django.http import HttpResponse
def set_session(request):
request.session['favorite_color'] = 'green'
return HttpResponse("Session value set.")
def get_session(request):
favorite_color = request.session.get('favorite_color')
return HttpResponse("Favorite color: %s" % favorite_color)
在上述代码中,我们使用 request.session 对象设置并读取会话值。 我们使用“get”方法读取会话“favorite_color”。
3.3 Redis Pub/Sub
Redis Pub/Sub(发布/订阅)是一种消息传递模式,其中发送者将消息发送到名称为通道的主题中,而每个订阅者都可以从其中订阅特定的通道,并通过接收器接收消息。
3.3.1 发布消息到 Redis 通道
为了将消息发布到 Redis 通道,您可以使用以下代码:
import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
r.publish('channel', 'Hello, world!')
在上述代码中,我们使用 redis.StrictRedis 来连接到 Redis 服务器,并使用 publish() 方法将消息“Hello, World!” 发布到名为“channel”的通道上。
3.3.2 订阅 Redis 通道
为了订阅 Redis 通道并处理消息,您可以使用以下代码:
import redis
def handle_message(message):
print('Received: %s' % message)
r = redis.StrictRedis(host='localhost', port=6379, db=0)
pubsub = r.pubsub(ignore_subscribe_messages=True)
pubsub.subscribe('channel')
for message in pubsub.listen():
handle_message(message['data'])
在上述代码中,我们定义了一个名为 handle_message() 的函数,该函数将打印收到的消息。 然后,我们使用 redis.StrictRedis 连接 Redis 服务器,并使用 pubsub() 方法创建 Redis 发布/订阅对象。 通过调用 subscribe() 方法并传递我们订阅的通道名称,我们将订阅通道。 最后,我们使用 pubsub.listen() 方法开始等待来自 Redis 服务器的消息,并在接收每条消息时调用 handle_message()。
总结
在本文中,我们介绍了 Django-Redis 的性质,及其如何安装和配置。我们还讨论了 Django-Redis 中的缓存、会话和发布/订阅功能,并提供了使用这些功能的示例代码。希望本文对您了解 Django 缓存系统和 Redis 能力提供有所帮助。