# [Memorycached](https://cloud.google.com/memorystore/docs/memcached)
> [name=陳信安]
> [time=Thurs, Jun 11, 2020]
---
# Agenda
- 介紹
- 建置
- 監控
- Redis與Memorycached差異性
---
## 介紹
---
在場的各位或多或少都有過搶限時商品或購買演唱會門票的類似經驗,相必大家都有遇到過網頁的存取失敗或異常緩慢,主要是短時間內大量流量湧入導致運算Loading過重讓系統負荷不了。為了改善這種情況就可以使用快取機制。
---
GCP上的快取機制提供了2種方式:
1. [Redis](https://hackmd.io/J4Y7Y5FTQymcq8EzUlWCcw)
2. Memorycached
---
Memorycached 是一個開源的分布式內存快取系統,使用 Key-Value 的形式來儲存。主要用於增強Web效能與減輕資料庫Loading。
---
#### 運作方式

---
#### 特性
1. 協議簡單
2. 基於libevent的事件處理
3. 內建內存儲存方式
4. Memorycached不互相通訊的分散式
---
#### 價格
Memorycached價格除了取決於建立Memorycached 的區域外,還包括以下各項的費用:
- 每個節點的vCPU數量
- 每個節點的內存
---
例子以台灣為主:
|資源項|價格(美元)|單位|
|-|-|-|-|
|vCPU|$0.0580|(1 vCPU/時)
|不大於4 GB 的節點|$0.0051|(1 GB/時)
|大於4 GB 的節點|$0.0103|(1 GB/時)
<font size="5"> 每小時總費用計算方法:每個節點的vCPU 數和內存量乘以該節點的數量。
---
#### 資源容量限制
|限制|值|
|-|-|
|每個區域的節點數| 100
|每個區域的可用vCPU數|2000
|每個區域的可用總內存量|10 TiB
---
#### 其他限制
|限制|值|
|-|-|
|每個節點連接的客戶端數|65000
|key最大的長度|250 bytes
|Cache的最長時間|30天
---
## 建置

---
#### 可修改的配置參數
|<font size="4">參數|<font size="4">範圍|<font size="4">default|<font size="4">說明|
|-|-|-|-|
|<font size="4">listen-backlog|<font size="4">1-10000|<font size="4">1024|<font size="4">排隊等待Memcached處理的連接請求數
|<font size="4">disable-evictions|<font size="4">0(停用)|<font size="4">0|<font size="4">設為1,當內存不足時,會返回錯誤。在內存可用之前,不接受寫入
|<font size="4">max-reqs-per-event|<font size="4">1-1000人|<font size="4">20|<font size="4">限制單個客戶端可以發出事件的請求數
---
## 指令
|<font size="4">方法|<font size="4">功能|<font size="4">備註|
|-|-|-|
|<font size="4">add|<font size="4">新增|<font size="4">add key flags exptime bytes [noreply] value
|<font size="4">set|<font size="4">設置|<font size="4">set key flags exptime bytes [noreply] value
|<font size="4">replace|<font size="4">更新|<font size="4">replace key flags exptime bytes [noreply] value
|<font size="4">get|<font size="4">取資料|<font size="4">get key
|<font size="4">delete|<font size="4">刪除|<font size="4">delete key
|<font size="4">flush_all|<font size="4">清除所有|<font size="4">flush_all [time] [noreply]
|<font size="4">stats items|<font size="4">查詢快取時間|<font size="4">stats cachedump <slab的id> <要查詢筆數>
---
|<font size="4">方法|<font size="4">KEY存在|<font size="4">KEY不存在|
|-|-|-|
|<font size="4">add|<font size="4">false|<font size="4">true
|<font size="4">replace|<font size="4">true|<font size="4">false
|<font size="4">set|<font size="4">true|<font size="4">true
---
## 監控

---
## 差異性
|項目|Redis|Memorycached|
|-|-|-|
|性能上|單核|多核
|可靠度|高|低
|key-value大小|512MB|1MB
---

---
# 課後評量
[Kahoot memorystore test](https://play.kahoot.it/v2/?quizId=9e4138f8-ee8f-4db9-b06b-788506f79702)
{"metaMigratedAt":"2023-06-15T09:17:02.030Z","metaMigratedFrom":"YAML","title":"Memorystore for Memorycached","breaks":false,"contributors":"[{\"id\":\"197296e6-cf8e-4622-b31d-66fcb54433b9\",\"add\":2,\"del\":0},{\"id\":\"83162077-2ad2-4507-aaf7-5b5de0cf9767\",\"add\":9521,\"del\":6665}]"}