dot Redis 8 来了——而且是开源的

了解更多

如何使用 Redis 构建一个连接献血者和患者的应用

献血是一种简单而安全的救命方式。 然而,在将献血者与具有正确血型的患者相匹配方面仍然存在复杂性。时间在献血方面是一种有限的商品,因此将献血者与正确的患者对齐绝对至关重要。

这个过程效率越高,挽救的生命就越多。 Bhanu Korthiwada 承担了这项挑战,他创建了一个非凡的应用程序 Zindagi,通过将献血者与理想的患者相匹配,加快了整个献血过程。

该应用程序的核心是需要以最高的效率传输数据,以便为用户提供实时更新。延迟或延误会阻碍用户的体验,并且无法跟上对献血的快速需求。

由于这些需求,Redis 被用作应用程序的主要数据库,这对性能产生了巨大的影响。 数据以最高的效率传输。 用户收到实时更新。 献血变得无缝。

让我们看看 Bhanu 是如何创建这个应用程序的。但在我们检查这个应用程序的来龙去脉之前,我们想指出的是,我们在 Redis Launchpad 上还有一系列令人兴奋的其他应用程序供您查看。

因此,请务必在阅读完这篇文章后浏览一下!

https://www.youtube.com/embed/zHvYt8fqNrY

如何构建一个连接献血者和患者的应用

  1. 你将构建什么?
  2. 你需要什么?
  3. 架构
  4. 开始
  5. 如何使用该应用程序?
  6. 它是如何工作的?

1. 你将构建什么?

你将构建一个将血型相同的献血者与患者相匹配的应用程序。 这将促进更加无缝和高效的献血过程,从而节省时间来挽救生命。

下面我们将介绍将该应用程序变为现实所需的一切,并重点介绍你需要的组件。 从头到尾,我们将所有内容分解为易于理解的步骤,以使构建此应用程序尽可能容易。

准备好开始了吗?

好的,让我们直接开始吧。

2. 你需要什么?

RedisJSON: 将 ECMA-404(JSON 数据交换标准)实现为原生数据类型。

RediSearch: 为 Redis 提供高级查询、辅助索引和全文搜索。

Redis Pub/Sub: 用于事件消息传递,并且可以向通道上的任意数量的订阅者提供消息。

Telerik: 为 Web、移动、桌面应用程序、开发等提供一系列软件工具。

Blazor: 用作免费的开源 Web 框架,允许开发人员使用 C# 和 HTML 构建 Web 应用程序。

.NET Core Runtime – 为互联网连接的应用程序提供基本服务

3. 架构

4. 开始

先决条件

  • .NET Core – v5.0.x(最新补丁版本)
  • Visual Studio 2019 16.9 或 Visual Studio Code 1.55
  • Docker – v19.03.13(可选)
  • Auth0
    • 域名
    • 客户端 ID
    • 客户端密钥
  • SMTP(可选):这是一个可选功能。 有多个 SMTP 提供商。 我们可以根据需要和定价使用一个。 以下是其中的一些
  • SMS:SMS 功能代码尚未实现。 但是,它已被计划。 以下是一些流行的提供商
    1. Msg91
    2. Twilio

使用 docker 设置本地安装

先决条件

  • Docker 
  • Docker Compose

步骤 1. 克隆存储库

git clone https://github.com/redis-developer/rediszindagi

使用 Auth0 和 SMTP 详细信息更新 .env 文件

步骤 2. 检查 Docker Compose 文件

version: '3.7'

services:
  redismod:
    image: redis/redis-stack:latest
    container_name: redis
    restart: unless-stopped
    environment:
      EMAIL: [email protected]
    volumes:
      - ./persistence/redismod/data:/data
    networks:
      - default
    ports:
      - 6379:6379

  rediszindagi:
    image: ghcr.io/bhanukorthiwada/rediszindagi:latest
    container_name: zindagi
    restart: unless-stopped
    environment:
      ASPNETCORE_ENVIRONMENT: ${APP_ENV}
      AUTH0__DOMAIN: ${APP_AUTH0_DOMAIN}
      AUTH0__CLIENTID: ${APP_AUTH0_CLIENTID}
      AUTH0__CLIENTSECRET: ${APP_AUTH0_CLIENTSECRET}
      SMTP__DISABLE: ${APP_SMTP_DISABLE}
      SMTP__FROM: ${APP_SMTP_FROM}
      SMTP__HOST: ${APP_SMTP_HOST}
      SMTP__PORT: ${APP_SMTP_PORT}
      SMTP__USERNAME: ${APP_SMTP_USERNAME}
      SMTP__PASSWORD: ${APP_SMTP_PASSWORD}
      SMTP__USESSL: ${APP_SMTP_USESSL}
      CONNECTIONSTRINGS__REDIS: ${APP_REDIS_CONNECTIONSTRING}
    volumes:
      - ./persistence/zindagi/logs:/app/logs
    networks:
      - default
    ports:
      - 80:80
    depends_on:
      - redismod

networks:
  default:
    name: network_default
    driver: bridge

上面的 Compose 文件定义了两个基本服务

  • Redismod
  • rediszindagi. 

Redismod 具有 RedisJSON 和 RediSearch 等内置模块,这些模块用于本项目。 你需要传递许多 auth0 环境变量。 SMTP 仍然是可选的。 为了持久性,已添加 Docker 卷挂载,并且该应用已暴露给端口 80。

从终端/命令提示符运行 docker-compose up -d

可以使用 localhost 访问该应用程序。

5. 数据如何存储

  • 请求数据存储在各种键和各种数据类型中。
    • 对于每个请求
      • ID: 作为字符串的 Guid
      • 血型、捐献类型、优先级、状态: C# ENUM
  • Redis JSON
    • 用户个人资料键: 前缀: USER_PROFILE 后缀: Auth0 名称标识符
    • 请求键: 前缀: BLOOD_REQUEST 后缀: Guid 字符串
  • Redis 发布
    • 请求:任何新的血液请求都会将请求 ID 作为消息发布到主题 URN:BLOODREQUESTS:NEW

如何访问数据

  • 使用 C# 存储库模式,每次调用都会使用连接多路复用器创建一个实例

6. 如何使用该应用程序

创建帐户或登录

要获得该应用程序的全部好处,献血者必须创建一个帐户。 你可以通过单击主仪表板上的“立即注册”来执行此操作。

献血

单击导航栏顶部的献血按钮。 然后,你将填写一些字段,这些字段将通知数据库你的血型以及你想要捐献的数量。

收到献血请求

创建帐户后,适合你献血的患者将收到你可用性的通知。 然后,他们将能够向你发送献血请求。 要访问你的完整请求列表,请单击导航栏顶部的“请求”选项卡。 在这里,你将全面了解患者发送的所有捐赠请求。

结论:通过 Redis 连接患者和献血者,以挽救生命

对于许多患者而言,快速获得血液是生死攸关的事情。 将献血者与正确的患者相匹配通常是一个耗时的过程,每一秒都会危及患者。 Bhanu 的应用程序有助于通过 Redis 以闪电般的速度在组件之间发送数据的能力来消除这一障碍。

以如此高的效率传输数据使得 Zindagi 能够根据给定的标准快速地将献血者与正确的患者相匹配。 这加快了整个献血过程,使献血者和患者能够实时互动并安排可能的献血。

该应用程序的核心是能够将所有各方聚集在一起,为进展提供最佳方向。 这意味着更多的捐赠,更少的浪费时间,以及所有相关人员的完全无缝的体验。

要更直观地了解此应用程序的工作原理,请查看此YouTube 视频。 如果你喜欢这篇文章,请务必查看Redis Launchpad,在那里你将可以访问各种正在对日常生活产生影响的创新应用程序。

我们有在地图上实时跟踪公共汽车的应用程序。 我们有防止发展中国家医院供应短缺的应用程序。 我们还有更多等你来发现。

因此请务必查看它们!

谁创建了这个应用程序?

Bhanu Korthiwada

Bhanu 是一位经验丰富的软件工程师,目前担任 ADP 的高级顾问。 如果你想及时了解他的所有最新项目,请务必在 GitHub 上关注他。