创建课程 Spring Boot 应用程序的框架,配置所有依赖项并启动适合课程的已配置 Redis 实例。
在本课中,您将学习
如果您遇到问题
如果您想从完全配置的 Spring Boot 应用程序开始,并希望跳过“从头开始”部分,请跳到“快速入门”部分。
com.redislabs.edu
redi2read
redi2read
com.redislabs.edu.redi2read
或者,您可以使用以下 URL:https://bit.ly/spring-initlz-redi2read 启动完全为项目配置的 Spring Initilizr。单击生成,Initializr 将为项目生成 zip 文件,并提示您将其下载到本地计算机。将下载的文件(名为 redi2read.zip
)解压缩到合适的目录。例如在 Mac 上
cd ~/my-directory
unzip ~/Downloads/redi2read.zip
现在您已下载并解压缩生成的 Spring Initializr 应用程序,请更改目录到应用程序目录(./redi2read)并检查内容。
您应该拥有一个完整的基于 Maven 的 Spring Boot 应用程序。由于我们将添加子模块,因此让我们将应用程序放入 git 中
echo "# redi2read" >> README.md
git init
git commit --allow-empty -m "git: initial empty commit"
git add README.md
git commit -m "feat: spring boot + redis initializr app"
git branch -M main
在之前的代码块中,我们在 redi2read 应用程序目录中初始化了一个 git 存储库。添加一个空的 git 提交有利于将来的 Git 变基操作。
现在我们已经有了基本的 Spring 应用程序,我们需要为应用程序配置 Redis 实例。我们在一个 git 存储库中创建了一个 docker-compose 文件,您可以将其作为子模块添加到您的应用程序中。
如果您还没有遇到 Git 子模块,它们是将 git 存储库嵌套在另一个 git 存储库中的方法。阅读 Git 子模块的 Git 文档 以了解更多信息。
您将在 redismod-docker-compose 存储库中找到此文件,该文件托管在 redis-developer 组织的 Github 中。该存储库包含一个 Docker Compose 文件,该文件配置为使用 Redis “redismod” 映像,该映像是包含 Redis 的 Docker 映像,该映像内置了对 JSON、Search、Graph、Time Series、Triggers 和 Functions 以及概率数据结构的支持。
容器中包含的模块
要添加子模块,请在项目根目录中使用 git submodule 命令
git submodule add git@github.com:redis-developer/redismod-docker-compose.git docker
该命令将在名为“docker”的文件夹下添加传递的存储库的内容,该命令将创建该文件夹。此时,您可以提交对存储库所做的更改。
应用程序的示例数据也作为单独的 Git 存储库提供,我们将将其添加到我们的主存储库中:redi2read-data。应用程序的原始数据包含一系列 JSON 文档,代表书籍和用户。
书籍数据的 JSON 文档集合来自 https://books.googleapis.com. 每个文件都用用于构建它的关键字/类别和递增整数(某些类别比其他类别拥有更多书籍)进行标记,从而生成类似 JSON 的内容
{
"pageCount":304,
"thumbnail":"http:\/\/books.google.com\/books\/content?id=prtSDwAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api",
"price":42.99,
"subtitle":null,
"description":"Drowning in unnecessary complexity, unmanaged state, and tangles of spaghetti code? In the best tradition of Lisp, Clojure gets out of your way so you can focus on expressing simple solutions to hard problems.",
"language":"en",
"currency":"USD",
"id":"1680505726",
"title":"Programming Clojure",
"infoLink":"https:\/\/play.google.com\/store\/books\/details?id=prtSDwAAQBAJ&source=gbs_api",
"authors":[
"Alex Miller",
"Stuart Halloway",
"Aaron Bedra"
]
}
我们有 ID(图书 ISBN)、标题、副标题、描述、页数、价格、货币、语言、缩略图 URL、指向更多信息的链接(“infoLink” 字段)以及作者数组。
用户数据是使用 https://randomuser.me 随机创建的,该网站生成了类似 JSON 的内容
{
"password": "9yNvIO4GLBdboI",
"name": "Georgia Spencer",
"id": -5035019007718357598,
"email": "georgia.spencer@example.com"
}
要添加子模块,请使用以下命令
git submodule add git@github.com:redis-developer/redi2read-data.git src/main/resources/data
此子模块将在应用程序文件夹内的 src/main/resource/data
文件夹下加载,以方便从类路径加载数据。此时,您可以将到目前为止的工作提交到 Git 仓库。
要跳过上面概述的所有步骤(例如,初始化 Spring 应用程序,添加数据子模块等),只需使用 --recurse-submodules
选项克隆应用程序,并检出名为 course/milestone-1
的分支。
git clone --branch course/milestone-1 git@github.com:redis-developer/redi2read.git --recurse-submodule
让我们打开一个终端窗口,并将目录更改为项目仓库下的 /docker
目录。要启动我们的 Docker Redis 镜像,我们将使用以下 docker-compose 命令
docker-compose up
您应该会看到类似于此的输出
Creating network "redi2read_default" with the default driver
Creating redi2read_redis_1 ... done
Attaching to redi2read_redis_1
redis_1 | 1:C 01 Apr 2021 05:19:27.593 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 01 Apr 2021 05:19:27.593 # Redis version=6.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 01 Apr 2021 05:19:27.593 # Configuration loaded
redis_1 | 1:M 01 Apr 2021 05:19:27.600 * Running mode=standalone, port=6379.
...
Redis 命令行界面 redis-cli 是一个简单的程序,它允许您直接从终端向 Redis 发送命令,并读取服务器发回的回复。
使用 docker container ls
查找容器名称
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f99ea35b9c1 redislabs/redismod "redis-server --load…" 57 minutes ago Up 7 minutes 0.0.0.0:6379->6379/tcp docker_redis_1
使用名称 docker_redis_1
,我们可以在容器中运行 bash,然后启动 redis-cli
$ docker exec -it docker_redis_1 bash
root@0f99ea35b9c1:/data# redis-cli
127.0.0.1:6379>
如果您已经在本地安装了 Redis CLI,则只需输入以下命令即可启动它
$ redis-cli
127.0.0.1:6379>
最基本的命令 PING 用于“ping”服务器。如果我们收到响应,则说明 Redis 服务器正常运行。
127.0.0.1:6379> PING
PONG
127.0.0.1:6379> PING Marco!
"Marco!"
127.0.0.1:6379>
由于我们有一个定制的 Redis 实例,其中包含几个 Redis 模块,因此我们可以检查哪些模块已安装。
127.0.0.1:6379> MODULE LIST
1) 1) "name"
2) "search"
3) "ver"
4) (integer) 20006
2) 1) "name"
2) "graph"
3) "ver"
4) (integer) 20215
3) 1) "name"
2) "ReJSON"
3) "ver"
4) (integer) 10007
4) 1) "name"
2) "bf"
3) "ver"
4) (integer) 20205
5) 1) "name"
2) "timeseries"
3) "ver"
4) (integer) 10408
6) 1) "name"
2) "ai"
3) "ver"
4) (integer) 10002
7) 1) "name"
2) "rg"
3) "ver"
4) (integer) 10006
键是唯一的标识符,其值可以是 Redis 支持的任何一种数据类型。这些数据类型从简单的字符串到列表、集合,甚至流。每种数据类型都有自己的一组行为和与其相关的命令。
127.0.0.1:6379> SET myname "Brian"
OK
127.0.0.1:6379> GET myname
"Brian"
127.0.0.1:6379> TYPE myname
string
Redis 数据库中的键分布在一个扁平的键空间中。Redis 不会对键强制执行模式或命名策略。这提供了很大的灵活性,键空间的组织由开发人员负责。我们将在本课程后面介绍管理它的方法。Redis 因其速度极快而闻名。这种速度来自它将所有数据从 RAM 而不是磁盘存储和提供服务的事实。Redis 是持久的,因此您的数据将被持久化,但所有读取都将来自保存在 RAM 中的数据副本。这使得 Redis 成为需要实时数据访问的应用程序的绝佳选择。
以下是一些我们认为对您在发现 Redis 时有用的资源