dot 快速的未来即将在您的城市举行活动。

加入我们参加 Redis 发布会

如何使用 Redis 构建解决社会问题的应用程序

受伤的动物。翻倒的垃圾桶。污染热点。我们大多数人可能都在我们的当地社区遇到过这些问题之一。但了解如何快速应对这些情况可能是一项挑战。我应该联系谁?报告健康危害的流程是什么?这将占用我多少时间?

不知道这些问题的答案可能是行动与不行动之间的区别。归根结底,社区 *至关重要*,如果我们能够轻松地报告社区问题,那么我们就可以促进一个更健康、更安全、更绿色的地球。 

Bryon Rosas Salguero 正在迎接这一挑战。通过他的创新应用程序 Helplanet,个人只需在手机上轻点几下,即可立即报告当地风险或事故。但要使该应用程序发挥作用,数据必须实时传输以跟上现实生活中发生的事件。 

Redis 对实现这一点至关重要,它使 Byron 的创新得以实现。让我们看看他是如何将这个应用程序拼凑起来的。但在深入研究之前,我们想告诉您,我们有各种有趣的应用程序供您在 Redis Launchpad 上查看。 

所以不要忘了在看完这篇文章后查看它们!

https://www.youtube.com/embed/N5fb9rP8hqM
  1. 你会构建什么?
  2. 你需要什么?
  3. 架构 
  4. 入门
  5. 使用 Redis 命令
  6. 应用程序的工作原理

1. 你会构建什么?

您将构建一个应用程序,允许人们报告他们社区的社会问题。这些可以包括

  • 受伤的动物
  • 污染和污染
  • 被忽视的垃圾和垃圾桶
  • 破坏
  • 犯罪

下面我们将引导您完成应用程序构建过程的每个步骤,并重点介绍您将需要的组件及其功能。 

准备开始了吗?好的,让我们直接进入。 

2. 你需要什么?

  • Angular: 用作平台和框架,用于使用 HTML 和 TypeScript 构建单页客户端应用程序。 
  • SocketIO:
  • Ionic: 用作 UI 组件和原生 API 的集合,允许用户在共享代码库下构建 iOS、Android 和渐进式 Web 应用程序。 
  • Bootstrap: 用作开源前端开发框架,用于构建网站和应用程序。 
  • Leaflet: 用作交互式地图的 JavaScript 库
  • Node.js: 用作开源跨平台,在 Web 浏览器之外执行 JavaScript 代码。
  • Redis Streams: 管理来自 cord-19 的数据消耗并将数据传输到 RedisGears
  • RediSearch: 为 Redis 提供查询、二级索引和全文搜索

3. 架构

在应用程序上报告问题

  • 用户通过其移动设备在 Helplanet 应用程序上发送消息。
  • Redis Streams 管理数据消耗并将数据传输到组织仪表板。
  • 组织实时收到通知。
  • 然后,组织和用户将通过一个聊天窗口连接,该窗口的工作原理与 Facebook Messenger 一样。 

在 Helplanet 仪表板上搜索问题

  • 组织可以在 Helplanet 搜索引擎中输入查询,查询基于他们希望首先解决的社会问题。 
  • 然后,RediSearch 处理此查询,执行全文搜索。
  • RediSearch 筛选出最相关的结果。
  • 然后,组织可以选择向哪个用户发送消息。

4. 入门

先决条件

  • Node.js: (v14.16.1)
  • NPM: (v7.11.2)
  • Docker: (v20.10.2)
  • Redis: (v6.0.1)

步骤 1:克隆存储库 

克隆此项目或下载为 zip

git clone https://github.com/byronrosas/helplanet.git

步骤 2:设置本地安装

执行 redis (https://github.com/RedisLabsModules/redismod)

docker run -p 6379:6379 --name myredis  redislabs/redismod
sudo docker start myredis

步骤 3. 安装依赖项(用于服务器、helplanet 移动应用程序和 helplanet-support)

cd helplanet/server
npm install

步骤 4. 在全局范围内安装 ionic CLI 包

cd help-planet
npm install
npm install -g @ionic/cli
npm install @ionic-native/core@4 --save

步骤 5. 在全局范围内安装 Angular CLI

cd helplanet-support
npm install
npm install -g @angular/cli

(打开三个终端)

首先使用以下命令启动服务器(启动服务)

  • PORT => 3006 (dataserver notification-service)
  • PORT => 3001 (dataserver session-service)
  • PORT => 3002 (dataserver organization-service)
  • POST => 3003 (dataserver report-service)
cd ..
cd server
npm run build
npm run dev

其次启动 ionic 应用程序 (http://localhost:8100)

cd help-planet
ionic serve

第三启动 web angular 应用程序 (http://localhost:4200)

cd helplanet-support
ng serve

5. 使用 RediSearch 命令

以下是每个服务的 RediSearch CLI 命令

Redis 工具

  • 删除用户的索引
FT.DROPINDEX usersIdx
  • 删除通知的索引
FT.DROPINDEX notificationsIdx
  • 为用户添加二级索引
FT.CREATE usersIdx ON HASH PREFIX 1 hpa:users: SCHEMA username TEXT password TEXT email TAG status NUMERIC role NUMERIC
  • 为通知添加二级索引
FT.CREATE notificationsIdx ON HASH PREFIX 1 hpa:notifications: SCHEMA geo GEO userId TAG userOrg TAG
  • 用于令牌工具 (SET)
SET hpa:session:byron@hotmail.com "xyaszTOKENsdsjlvj" EX 24*60*60
  • 用于令牌工具 (DEL)
DEL hpa:session:byron@hotmail.com
  • 用于令牌工具 (GET)
GET hpa:session:byron@hotmail.com

通知存储库

  • 保存新通知:在哈希中添加数据
HSET "hpa:notifications:1621188142413-0" userId "byron@reporter.com" level "0" text "trash" situation "garbage" geo "-78.62285039999999,-1.2543408"

EXPIRE "hpa:notifications:1621188142413-0" 172800
  • 出席取消
HDEL "hpa:notifications:1621188142413-0" userOrg dateAttention
  • 出席通知
HSET "hpa:notifications:1621188142413-0" userId "byron@reporter.com" level "0" text "trash" situation "garbage" geo "-78.62285039999999,-1.2543408" serOrg x@hotmail.com dateAttention new Date()
  • 删除通知
DEL "hpa:notifications:1621188142413-0"
  • 获取所有(带分页的通知)
FT.SEARCH notificationsIdx * LIMIT 0 10
  • 获取所有用户(通知)
FT.SEARCH notificationsIdx @userId:{email/@hotmail/.com} LIMIT 0 10
  • 添加流(通知数据)
XADD hpa:report MAXLEN 30 * userId "user@x.com" level "0" situation "garbage" lat "-7.54545" lon "-0.4545" text "trash"
  • 列出流
XRANGE hpa:report 1621188142413 1621188142413
  • 获取一个流
XRANGE hpa:report 1621188142413-0 + COUNT 1
  • 获取一个(通知)
HGETALL "hpa:notifications:1621188142413-0"
  • 获取附近(通知)
FT.SEARCH notificationsIdx @geo:[ "-0.4545" "-7.54545"  15 m]

用户存储库

  • 保存用户
HSET hpa:users:byron@hotmail.com username "byronman" password "encryptpassword" email "byron@hotmail.com" role "0"
  • 按电子邮件获取(用户)
FT.SEARCH usersIdx @email:{email@x.com}
  • 按 ID 获取(用户)
HGETALL hpa:users:byron@hotmail.com
  • 按电子邮件更新
HSET hpa:users:byron@hotmail.com username "byronman" password "encryptpassword" email "byron@hotmail.com" role "0"
  • 按电子邮件获取(用户)
FT.SEARCH usersIdx @email:{email@x.com}
  • 获取所有用户(带分页的用户)
FT.SEARCH  * LIMIT 0 10

套接字服务

  • 发送新报告(通过 io 套接字发送数据)

索引(通知服务)

  • 监听报告(实时)
XREAD COUNT 1 BLOCK 5000 STREAMS hpa:report $

每个路由也使用中间件

  • isAuth(验证用户是否拥有有效令牌并被授权访问所有服务)
  • isUserReport(验证用户是否具有报告员角色)
  • isUserOrganization(验证用户是否具有组织角色)
  • isAdmin(验证用户是否具有管理员角色)

6. 应用程序的工作原理

用户如何使用应用程序

如果有人在他们的社区中遇到危害或社会问题,他们可以通过 Helplanet 应用程序报告。用户只需打开应用程序,他们就会看到许多选项(见下文)。 

然后,用户将选择最能描述他们遇到的问题或问题的选项。与 Facebook Messenger 非常相似,将出现一个聊天窗口,他们可以在其中提供有关他们正在报告的事件的更多详细信息(见下文)。 

注意:由于 Redis,所有内容都将实时报告。 

组织如何使用应用程序

组织将收到公众成员报告的所有事件的通知。他们将能够在他们的仪表板上获得对所有已报告事件的整体视图(见下文)。

从这里,组织可以选择一个事件并查看更多详细信息。有关事件的信息将包括

  • 位置 
  • 日期和时间 
  • 事件类型
  • 是否正在处理
  • 与用户的聊天记录

组织可以根据位置过滤所有内容。这将使他们能够快速了解每个瞬间在地图上的位置(见下文)。 

组织还可以查看用户的个人详细信息,如果他们希望通过其他形式的通信(例如电子邮件)与他们联系(见下文)。

结论:通过使用 Redis 解决社会问题将社区聚集在一起

社会依靠那些负责任地报告对当地社区构成威胁的问题的个人。但是,由于有太多不同的组织和专业人士需要联系,整个报告过程可能与乏味一样不清楚。 

Byron 的应用程序能够通过创建一个功能强大的应用程序来消除这些障碍,该应用程序使整个过程变得简单易行。但是,为了使该应用程序有效运行并促进无缝体验,数据需要实时传输。 

由于 Redis,应用程序架构中的组件变得更加互联,数据传输既无缝又高效。 

如果您想了解更多关于 Helplanet 的创建方式,请务必观看 此处的 YouTube 视频。 

您也可以在Redis Launchpad上查看我们其他突破性的应用程序。在这里,您可以了解 Redis 如何用于创建对世界各地日常生活产生影响的令人兴奋的应用程序。 

那么,您能用 Redis 构建什么呢?

谁开发了这个应用程序?

Byron Rosas Salguero 

Byron 是一位极具创新精神的软件工程师,他独立作为自由职业者工作。请访问他的GitHub 页面,随时关注他的所有活动。