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

了解更多

如何使用 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 会执行全文搜索。
  • 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:[email protected] "xyaszTOKENsdsjlvj" EX 24*60*60
  • 对于令牌工具 (DEL)
DEL hpa:session:[email protected]
  • 对于令牌工具 (GET)
GET hpa:session:[email protected]

通知存储库

  • 保存新通知:在哈希上添加数据
HSET "hpa:notifications:1621188142413-0" userId "[email protected]" 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 "[email protected]" level "0" text "trash" situation "garbage" geo "-78.62285039999999,-1.2543408" serOrg [email protected] 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 "[email protected]" 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:[email protected] username "byronman" password "encryptpassword" email "[email protected]" role "0"
  • 按电子邮件获取(用户)
FT.SEARCH usersIdx @email:{[email protected]}
  • 按 ID 获取(用户)
HGETALL hpa:users:[email protected]
  • 按电子邮件更新
HSET hpa:users:[email protected] username "byronman" password "encryptpassword" email "[email protected]" role "0"
  • 按电子邮件获取(用户)
FT.SEARCH usersIdx @email:{[email protected]}
  • 获取所有用户(带有分页的用户)
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 页面,及时了解他的所有活动。