gpt4 book ai didi

用于通知的 Django Redis

转载 作者:可可西里 更新时间:2023-11-01 11:15:15 26 4
gpt4 key购买 nike

我已经使用 Django REST 框架构建了一个REST API。在应用程序中需要 facebook 类型的通知(新 friend 请求、新消息等)。目前我正在使用长轮询处理这个问题:

  • 前端客户端发送GET请求
  • 我的 REST View 搜索新对象并立即返回它们(如果有),否则它会搜索 20 秒并返回空响应(如果没有)
  • 收到响应后立即发送新的 GET 请求(来自前端客户端)

注意:我们没有使用 websockets,如果需要请写信给我

我想用 django/redis 替换此方法,因为我认为我的长轮询方法大量滥用数据库,而且我认为 Redis 的速度和结构可以提供很多帮助。

关于我如何完成这样的事情有什么建议吗?

最佳答案

使用基于内存的键值存储更适合您当前的用例,因为它将极大地减少数据库的负载并加快应用程序的速度。

Redis 不仅仅是内存中的键值存储,因此您可以利用它更轻松地实现您的目标。

我正在此处编写您想要的简单实现,您很可能可以以此为基础来实现您想要的。

简而言之

  1. 我们将用户的所有通知保存在 HashMap in redis 中与以用户命名的 HashMap 的键。

  2. HashMap是notificationId到notificationData的映射(Json格式)。

  3. 通知的元数据保存在通知数据主体中。 (诸如日期、阅读状态……)

    from redis import StrictRedis
    import json

    # Function to add new notifications for user
    def add_notification(user_id, notification_id, data):
    r = StrictRedis(host='localhost', port=6379)
    r.hset('%s_notifications' % user_id, notification_id, json.dumps(data))

    # Function to set the notification as read, your Frontend looks at the "read" key in
    # Notification's data to determine how to show the notification
    def set_notification_as_read(user_id, notification_id):
    r = StrictRedis(host='localhost', port=6379)
    data = json.loads(r.hget('%s_notifications' % user_id, notification_id))
    data['read'] = True
    add_notification(user_id, notification_id, data)

    # Gets all notifications for a user, you can sort them based on a key like "date" in Frontend
    def get_notifications(user_id):
    r = StrictRedis(host='localhost', port=6379)
    return r.hgetall('%s_notifications' % user_id)

您还可以构建更多功能或使用 redis 的不同功能来为您的网站/应用程序创建近乎实时的通知后端。 (我已经复制了 redis 连接创建部分,user_id 和......以便答案更清楚)

干杯

关于用于通知的 Django Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50944134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com