在Mac的本地环境上尝试使用Redis进行操作

最近我有机会在实践中研究AWS的ElastiCache for redis服务。在实践中,我处理了在AWS的EC2(虚拟服务器)上运行的KVS服务,但是这次我希望学习在mac的本地环境中操作KVS的方法,所以我打算总结一下redis的概述。在本文中,我将从解释每个术语开始,然后进行redis的安装和KVS的操作。

Mac OS:版本 11.1
redis-cli:版本 6.2.6

1. 什么是KVS?什么是Redis?

KVS是一种数据存储方式的缩写,意为“键值存储”(Key Value Store)。它以一个键(Key)为核心,将想要存储的值(Value)与之关联,以此方式存储数据(Store)。

在保存和管理数据的方法中,很多人可能首先会想到将值存储在表格形式的关系数据库(RDB)中。

RDB通过使用SQL语句来操作结构化的复杂数据。有些情况下,几个表格形式的数据会有关联,形成复杂的结构。而KVS通过使用键值来操作个别且多样的数据。由于KVS不像RDB那样被结构化地整理,所以不适合处理复杂的操作,但它的优点是不需要数据结构化,从而节省时间和成本,可以实现快速的数据读写。顺便说一下,由于KVS不使用SQL来操作数据,因此被认为是与RDB对应的一种被称为NoSQL的数据管理方法之一。

当将其整理成对比表时,如下所示。

RDBKVSデータの様子構造化され互いに関連性がある個別で多様なデータが存在している操作方法SQLキーを指定して操作長所複雑な処理ができる、データ保全性が高い時間的・費用的コストが低い、読み書きが高速短所構造化が手間、データ読み書きに時間がかかる複雑な処理に不向き、データが消えるかもしれないAWSの代表的サービスRDSElastiCache
スクリーンショット 2021-10-28 16.51.28.png

ElastiCache是AWS的缓存服务之一。缓存指的是以高速访问一次使用过的数据。在AWS中,有DynamoDB和RDS等数据库服务,但如果想要比这些数据存储方法更快地访问数据,或者即使内部的数据意外丢失也没有问题的情况下,就会选择ElastiCache。

スクリーンショット 2021-10-28 16.51.37.png

在ElastiCache中,支持两种引擎来管理存储的数据,分别是Redis和Memchached。一般情况下,如果需要执行复杂的操作,大多数人会选择使用Redis。

我正在实际工作中处理部署在EC2上的ElastiCache节点,但这次我将使用Redis在本地搭建缓存环境,并处理键值存储(KVS)的数据。

2. 安装和启动Redis。

我使用Homebrew在Mac上安装了Redis。如果无法使用brew命令,请首先使用以下命令安装Homebrew。如果屏幕上显示了“Installation successful!”(安装成功!)的字样,则表示安装完成。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

请使用以下命令确认homebrew是否已正确安装。如果正确安装,将会显示相应版本号。

$ brew -v

在搭载M1芯片的mac电脑上,安装homebrew可能会出现问题。在这种情况下,你可以在Finder中搜索Terminal,然后在“信息”中选择“使用Rosetta打开”选项。由于设置可能不会立即生效,建议重新启动mac电脑。然后尝试再次运行homebrew安装命令(请参考相关文章)。

那么我们现在开始安装Redis。首先,我们要先更新Homebrew,确保它处于最新状态。

$ brew update

我们使用以下命令来安装Redis。

$ brew install redis

准备工作已经完成。让我们通过以下命令启动本地环境中的Redis。如果成功启动,应该会继续显示提示符。

$ redis-cli
127.0.0.1:6379> 

执行此命令后,应自动启动Redis服务器,并处于可进行键值存储操作的状态。但是,如果出现 “not connected” 提示符,则表示服务器没有成功启动。请先输入 “quit” 退出Redis操作,然后尝试以下命令。

$ redis-server
(サーバを直接立ち上げるコマンド。Terminalがそのまま接続待機中になるので別画面で「redis-cli」コマンドを試してください。)
$ redis-cli ping 
(redisサーバが立ち上がっているか確認するコマンド。うまく立ち上がっていれば「pong」とレスポンスが返ってくる)

只要看到之前提到的“127.0.0.1:6379>”提示符,我们就可以立即尝试在键值存储中处理数据。
顺便提一下,这个提示符中的127.0.0.1指的是本地环境,6379表示Redis的默认端口。

尝试进行数据的写入和读取。

KVS保存的数据结构大致可以分为以下3种类型,每种结构都有其特定的命令用于操作:
· 键与值一对一对应的字符串类型
· 一个键对应多个值的列表类型或集合类型
· 键有相关字段,且存在对应的值的哈希类型
我们将分别说明每种数据结构的写入和读取方法。

键和值一一对应的字符串类型。

假设我们有一个会员制网站,在该网站上注册会员账号的用户ID下面,我们想设计一个业务系统来判断会员是否已经下载了对应的专用应用程序。当用户下载应用程序时,我们将用户ID作为键将适当的值(例如”1″)存储在键值存储(KVS)中。当访问KVS并且用户ID作为键存在时,我们判断该用户已经下载了专用应用程序。在这个例子中,我们使用的KVS是字符串类型。

10001 “1”
10002 “1”
10003 “1”

以下是在这种字符串类型中可使用的典型命令。

コマンド処理set <キー> <値>ひとつのキーと値のペアをセットする。キーと値は半角スペースで区切るmset <キー> <値> <キー> <値>…複数のキーと値のペアをセットするget <キー>指定したキーの値を取り出す、もしくはキーが存在しているか確認するmget <キー> <キー>…複数のキーを指定し値を取り出す、もしくはキーが存在しているか確認するkeys *どのようなキーが登録されているかを一覧で表示する

以下是使用例。

127.0.0.1:6379> set 10001 1
OK
127.0.0.1:6379> mset 10002 1 10003 1
OK
127.0.0.1:6379> keys *
1) "10003"
2) "10001"
3) "10002"
127.0.0.1:6379> get 10001
"1"
127.0.0.1:6379> mget 10002 10003
1) "1"
2) "1"
127.0.0.1:6379> get 10004
(nil)

列表类型和集合类型有多个值对应于一个键。

这些结构都具有一个键对应多个值,但列表类型的值是有顺序的,而集合类型则是无序的。

考虑到建立一个Set类型的KVS,我们以一个例子系统来介绍如何收集用户对于会员网站在何处得知的多选问题的回答。除了具有多个值的特点外,基本的思想与字符串类型相同。

在这个模式下,可以使用以下的命令。

コマンド処理sadd <キー> <値> <値> <値>…キーに対して値をセットするsmembers <キー>キーの持つ値を表示する
127.0.0.1:6379> sadd 10001 web flyer ad
(integer) 3
127.0.0.1:6379> smembers 10001
1) "ad"
2) "web"
3) "flyer"
127.0.0.1:6379> sadd 10002 web ad
(integer) 2
127.0.0.1:6379> smembers 10002
1) "ad"
2) "web"

在已确定值的顺序的列表类型中,可以使用以下命令。由于每个值都有一个索引,可以对获取值的范围进行操作。索引从0开始。

コマンド処理rpush <キー> <値>リストの末尾に値を挿入するlpush <キー> <値>リストの先頭に値を挿入するlrange <キー> <インデックス始点> <インデックス終点>指定した範囲のキーの値を取り出す、もしくはキーが存在しているか確認する
127.0.0.1:6379> rpush 10003 zero
(integer) 1
127.0.0.1:6379> rpush 10003 one
(integer) 2
127.0.0.1:6379> lpush 10003 two
(integer) 3
127.0.0.1:6379> lrange 10003 0 2
1) "two"
2) "zero"
3) "one"

键已设置字段,并存在该字段的对应值的哈希类型。

以比以往的模式更深层次的结构为基础,为每个值设置字段。可以预见根据用户ID设置居住地区、兴趣等项目的值的情况。以下是使用的命令。

コマンド処理hset <キー> <フィールド名> <値>キーに結びつく値とそのフィールドをセットするhget <キー> <フィールド名>キーのフィールドに結びつく値を表示するhkeys <キー>キーに結びついているフィールドを表示するhvals <キー>フィールドは無視して、キーに対する値だけを表示する
127.0.0.1:6379> hset 10004 region kanto hobby tennis
(integer) 2
127.0.0.1:6379> hset 10005 region shikoku hobby baseball
(integer) 2
127.0.0.1:6379> hget 10004 hobby
"tennis"
127.0.0.1:6379> hkeys 10004
1) "region"
2) "hobby"
127.0.0.1:6379> hvals 10005
1) "shikoku"
2) "baseball"

其他

コマンド処理quitredis接続を終了するdbsize存在するキーの数をカウントする

除此之外,还有许多其他指令,并且根据数据类型也会有一些微妙的差异,例如删除数值的指令。您可以在官方网站上搜索这些指令。本文按数据类型整理了这些指令,非常有参考价值。

结束

我們已經介紹了在Mac本地環境構建和實際操作Redis的方法。雖然很難預料只在本地環境中使用Redis的使用情境,但在實際工作中,通過處理EC2服務器上的鍵值儲存系統,可以實現高速數據交換。我們希望能夠在未來進一步學習更深入的內容。

参考文章:
Redis的启动和停止
Homebrew的基本和安装方法·使用方法
在MacOS本地环境中安装Redis的方法
【M1】在Mac上无法安装Homebrew的“zsh: command not found: brew”
KVS是什么
NoSQL是什么?与关系数据库(RDB)的区别全面比较
Amazon ElastiCache是什么?与Redis和Memcached的区别是什么
ElastiCache是一个很好的服务!!回顾其特点和使用方法!
总结了Redis的各个数据类型和预期用途
Redis提供的数据类型及其处理方法
Redis命令

广告
将在 10 秒后关闭
bannerAds