使用 nosql 在 Redis 中存储数据

297 阅读5分钟

使用 nosql 在 Redis 中存储数据

Redis 是一个持久的键/值存储。为了提高效率,它将数据库保存在内存中,并在异步线程中写入磁盘。它包含的值可以是字符串、列表、哈希、集合和排序集。它提供了一组丰富的命令来操作其集合以及插入和获取数据。

为了解释 Redis,我依赖于 Redis 命令行客户端 (redis-cli)

首先,启动 redis-cli 并确保它正常工作。首先,转到 Redis 分发文件夹。Redis 作为源代码分发。您可以在文件系统中的任何位置提取它并编译源代码。编译后的可执行文件在分发文件夹中可用。

在某些操作系统上,在通常找到可执行文件的位置创建指向可执行文件的符号链接。在我的系统上,Redis 位于名为 Redis-2.2.2 的文件夹中,该文件夹对应于最新版本的 Redis。使用 redis 服务器命令启动 Redis 服务器。要使用默认配置,请从 Redis 分发文件夹中运行 ./redis-server。现在运行 redis-cli 以连接到此服务器。默认情况下,Redis 服务器侦听端口 6379 上的连接。

要保存键/值对-{ akey: “avalue” } - 只需在 Redis 分发文件夹中键入以下内容:

./redis-cli set akey “avalue”

如果您在控制台上看到“确定”以响应您刚刚键入的命令,则OK。如果没有,请仔细阅读安装说明并验证设置是否正确。要确认为 akey 存储了 avalue,只需获取 akey 的值,如下所示:

./redis-cli get akey

应会看到响应此请求的值。

如果你在从源代码编译后使用“make install”安装 Redis,默认情况下,redis-server 和 redis-cli 将被添加到 /usr/local/bin 中。如果将 /usr/local/bin 添加到 PATH 环境变量中,您将能够从任何目录运行 redis-server 和 redis-cli。

Redis 支持几种不同的数据结构,即:

  • list(列表),或者更具体地说,链表-按特定顺序维护元素索引列表的集合。使用链表,无论列表中的元素数量如何,都可以快速访问任一端点。

  • sets(集合) 存储唯一元素且无序的集合。

  • sorted sets (排序集) - 存储已排序的元素集的集合。

  • hashes(哈希)-存储键/值对的集合。

  • string(字符串) - 字符集合。

对于手头的例子,我选择使用集合,因为顺序并不重要。

例子: 作为书籍集成员的每本书都具有以下属性:

  • ID

  • Title

  • Author

  • Tags(集合)

每个标签都借助以下属性进行标识:

  • id

  • name

假设 redis-server 正在运行,打开一个 redis-cli 实例并输入以下命令来创建书籍集的第一个成员:

image.png

上一代码示例中的第一个命令通过将设置成员标识符递增到下一个 id 来生成序列号。

因为您刚刚开始创建集合,所以增量的输出在逻辑上为 “1”。

接下来的两个命令创建名为 books 的集合的成员。成员的 id 值为 1,该值刚刚生成。

到目前为止,成员本身有两个属性- titleauthor,其值是字符串。sadd 命令将成员添加到集合中。列表、哈希和排序集存在类似的函数。

列表的 1push 和 rpush 命令分别向头部和尾部添加一个元素。

zadd 命令将成员添加到排序集。

接下来,向您添加到名为 books 的集合的成员添加一堆标签。以下是您的操作方法:

image.png

一堆数字标签标识符已添加到由 id 值

到目前为止,标签本身还没有被定义,只是被分配了一个 id。

进一步分解 books tags 的组成部分,并解释密钥命名系统在 Redis 中的工作原理。任何字符串(包含空格和特殊字符的字符串除外)都是 Redis 中键的不错选择。

避免使用过长或过短的键。键的结构方式可以建立分层关系,并且可以建立对象及其属性的嵌套。 建议使用类似 object-type:id: 字段这样的方案作为键名。

因此,诸如 books:1:tags 之类的键意味着在名为“books”的集合中由 id 1 标识的成员的标记集合。同样,books:1:title 表示书籍集中成员的标题字段,由 id 值 1 标识。将一堆标签添加到书籍集的第一个成员后,您可以像这样定义标签本身:

image.png

定义标签后,您可以建立互惠关系以关联具有特定标签的书籍。第一个成员具有所有六个标签,因此您可以将其添加到每个标签中,如下所示:

image.png

建立交叉关系后,您将创建集合的第二个成员,如下所示:

image.png

incr 函数用于为集合的第二个成员生成 id。函数如

incrby,允许按定义的步骤递增;decr,允许您减少;Decrby允许您按定义的步长递减,在需要生成序列号时也可用作有用的实用程序函数。您可以选择适当的函数并根据需要定义步骤。目前,incr 完成了这项工作。

接下来,为第二个成员添加标签,并与标签本身建立反向关系,如下所示:

image.png

这创建了两个成员的基本但足够有用的集合。


本文正在参加「技术专题19期 漫谈数据库技术」活动