---
title: GCP MemoryStore # 簡報的名稱
tags: GCP # 簡報的標籤
---
# [MemoryStore](https://cloud.google.com/memorystore/docs/redis/)
:::warning
使用於GCP專案內部網路
:::
#### 專注於建構優質應用程式
藉助 Redis 開放原始碼的絕佳優勢,您可以減少進行管理工作的時間,將更多時間投注在程式設計工作上。Cloud Memorystore 可以自動化處理多項複雜的工作,例如啟用高可用性設定、容錯移轉、修補及監控應用程式,讓您有更多時間編寫程式碼。
#### 彈性化的資源調度方式
有了 Cloud Memorystore for Redis,您就能輕鬆將延遲時間維持在 1 毫秒以內,並滿足應用程式的總處理量需求。您可以先從最低級別和最小規模開始,然後輕鬆增加執行個體配置,對應用程式可用性的影響也能維持在最低限度。Cloud Memorystore 支援的執行個體最高可達 **300 GB**,網路總處理量上限則為 **12 Gbps**。
#### 高可用性
高可用性執行個體會在兩個區域之間複製,並提供高達 99.9% 的可用性服務水準協議。系統會持續監控執行個體,並透過自動容錯移轉盡可能避免應用程式發生服務中斷的情況。
#### Google 級安全防護
Cloud Memorystore 執行個體使用的是私人 IP,不會連結至網際網路,因此能夠受到保護。另外,您也可以使用身分與存取權管理來控管不同角色的存取權限,進一步提升安全性。
#### 隨即轉移,易如反掌
Cloud Memorystore for Redis 與 Redis 的通訊協定完全相容。只要使用匯入/匯出功能,您不必修改任何程式碼,也能將開放原始碼 Redis 中的應用程式隨即轉移至 Cloud Memorystore。所有現有工具和用戶端程式庫都能正常運作,因此您無需學習使用新工具。

## MemoryStore 與 開源 Redis差異
* 開源Redis提供了多種將數據持久保留到磁盤的選項。RDB持久化可以生成數據集的時間點快照,而AOF持久化可以記錄服務器接收的每個寫入操作。**Cloud Memorystore for Redis目前不支持RDB和AOF持久化。**
* Cloud Memorystore for Redis實例的大多數參數已預先配置,無法更改。
* 某些命令可能會干擾託管的Redis服務,因此會被屏蔽。
* 標準層級實例不允許從副本讀取。
## Redis 測試工具
```
-h <hostname> Server hostname (default 127.0.0.1)
-p <port> Server port (default 6379)
-s <socket> Server socket (overrides host and port)
-a <password> 密碼
-c <clients> 並聯數 (default 50)
-n <requests> 請求總數 (default 100000)
-d <size> SET / GET值的數據大小 (default 3)
--dbnum <db> 選擇指定的數據庫編號 (default 0)
-k <boolean> 1 =保持活動狀態0 =重新連接 (default 1)
-r <keyspacelen> 對SET / GET / INCR使用隨機鍵,對SADD使用隨機值
使用此選項,基準測試將擴展字符串__rand_int__
在具有指定範圍內的12位數字的參數中
從0到keyspacelen-1。每次命令替換都會更改
被執行。默認測試使用它來擊中 指定範圍。
-P <numreq> 管道<numreq>請求。 Default 1 (no pipeline).
-e 如果服務器回复錯誤,請在標準輸出上顯示
-q 只顯示查詢/秒值
--csv 輸出CSV
-l loop迴圈.
-t <tests> 僅運行以逗號分隔的測試列表。測試名稱與作為輸出產生的名稱相同。
-I Idle mode. Just open N idle connections and wait.
# 1秒鐘 16管道機制 1000000個隨機鍵 2000000次亂數指令
redis-benchmark -h [REDIS_HOST] -p [PORT] -r 1000000 -n 2000000 -t get,set,l
push,lpop -P 16 -q
redis-benchmark -h 10.98.22.188 -p 6379 -r 1000000 -n 2000000 -t get,set,lpush,lpop -P 16 -q
```
## MemoryStore 的詳細資料
```
gcloud redis instances describe [INSTANCE_ID] --region=[REGION]
```
* `currentLocationId` 主要節點位置
* `locationId` 與 `alternativeLocationId` 會相互轉換
## MemoryStore 調整儲存大小
:::danger
對基本層級實例進行擴縮會清空緩存
:::
## 容錯轉移
## MemoryStore 的手動容錯移轉
```
gcloud redis instances failover [INSTANCE_ID] --data-protection-mode=force-data-loss --region=[REGION]
```
* `force-data-loss` 最能呈現災難式演練
* `limited-data-loss` 主副節點的最低容錯演練
### 容錯轉移範例
```
redis-benchmark -h 10.83.46.188 -p 6379 -r 1000000 -n 2000000 -t get,set,lpush,lpop -P 16 -q
DBSIZE //864497
```
```
DBSIZE //864497
gcloud redis instances describe redis-funk --region=asia-east1
gcloud redis instances failover redis-funk --data-protection-mode=limited-data-loss --region=asia-east1
停一分鐘
DBSIZE //864497
```

```
sudo apt-get update && apt-get install telnet
```
```
gcloud redis instances failover redis-funk-2 --data-protection-mode=limited-data-loss --region=asia-east1
```
### 複製檔案進入vm
```
scp -i ~/.ssh/id_rsa local-file-path username@ip-address:~
```
## [Storage](https://cloud.google.com/storage/docs)
Cloud Storage 在世界各地提供具備擴充性的耐用物件儲存空間,能夠儲存 EB 規模的資料。您可以立即從任一儲存空間級別存取資料、利用單一整合式 API 將儲存空間整合至您的應用程式,以及輕鬆地進行價格/效能最佳化。
* 分析和機器學習整合式存放區
* 媒體內容儲存與傳遞
* 備份與封存
### 儲存位置(地區)類別
主要影響就是為了法規去控制儲存空間
* Region - 可在單一地區中提供最低延遲
* Multi-region - 可用性最高,涵蓋範圍最大
* Dual-region - 可在 2 個地區中提供高可用性和低延遲
### 儲存位置(地區)類別
| API 和gsutil 的名稱 | 最短存儲時長 | 典型的每月可用性 | 價位 |
|:------------------- | ------------ | ---------- | --- |
| STANDARD | 無 | 多區域和雙區域位置高於99.99% / 各區域99.99% | 最貴 |
| NEARLINE | 30 天 | 多區域和雙區域位置達99.95% / 各區域達99.9% | 次貴 |
| COLDLINE | 90 天 | 多區域和雙區域位置達99.95% / 各區域達99.9% | 次便宜 |
| ARCHIVE | 365 天 | 多區域和雙區域位置達99.95% / 各區域達99.9% | 最便宜 |
### [gsutil tools](https://cloud.google.com/storage/docs/gsutil)
創建一個 Storage
```
gsutil md -l asia -c standard gs://<bucket-name>
```
遷移物件
```
gsutil cp <~/local/path-to-file> gs://<bucket-name>/path
```
> 路徑相反就是下載下檔案
磁曲版控
```
gsutil versioning set on gs://<bucket-name> // 設置磁區版控啟用
gsutil versioning set off gs://<bucket-name> // 設置磁區版控停用
gsutil versioning get gs://<bucket-name> // 檢查磁區是否版控
```
靜態頁面訪問
```
gsutil web set -m index.html -e 404.html gs://<bucket-name> // 頁面設定
gsutil web get gs://<bucket-name> // 頁面設定JSON
```