---
title: Redis # 簡報的名稱
tags: GCP # 簡報的標籤
---
Redis
===
> [name=佩穎]
> [time=MON, JAN 20, 2021 15:00 PM]
---
## Agenda
* 簡介
* 特性
* 資料型別
* GCP Memorystore
* 可視化的客戶端
* 實際操作
---
## 簡介
* 全名REmote DIctionary Server,簡稱Redis
* Redis採用的是基於記憶體的是單程序單執行緒模型的 KV 資料庫,由C語言編寫
* 提供多語言的API
----
## 起源
* 2008年意大利一家創業公司Merzia的創始人Salvatore Sanfilippo為了避免MySQL的低性能而做一個數據庫,並於2009年開發完成了Redis的最初版本。
---
## 特性
- Redis不僅僅支持簡單的鍵值類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
- Redis支持數據的備份,即master-slave模式的數據備份。
- 持久化儲存是將 Redis 儲存在記憶體中的資料儲存在硬碟中,重啟的時候可以再次加載進行使用。
----
## 相同類型比較
| - | REDIS | Memcache |
| -------- | -------- | -------- |
| 讀寫分 | 有 | 無 |
| 執行緒 | 單 | 多 |
| 持久性 | 有 | 無 |
| 備份/還原 | 有 | 無 |
| 資料型態 | 多 | 單一 |
----
## 優勢
* 每秒可執行大約110000次的設置(SET)操作,每秒大約可執行81000次的讀取/獲取(GET)操作。
* 操作具有原子性 - 所有Redis操作都是原子操作,這確保如果兩個客戶端併發訪問,Redis服務器能接收更新的值。
---

----
## Redis持久性
* RDB持久性按指定的時間間隔執行數據集的時間點快照。
* AOF(Append-only file)持久性會記錄服務器接收的每個寫入操作,這些操作將在服務器啟動時再次播放,以重建原始數據集。
| | RDB | AOF |
| -------- | -------- | -------- |
|安全性 | 低 | 高 |
| 效能 | 高 | 低 |
| 優先權 | 低 | 高 |
---
## Redis常用資料型別
* 字串String
常用命令: set,get,decr,incr,mget 等 encoding可以是raw或者是int
* 雜湊/雜湊Hash
常用命令:hget,hset,hgetall 等 encoding為zipmap、ht(序列化/反序列化、map)
* 列表List
常用命令:lpush,rpush,lpop,rpop,lrange等 (雙向連結串列,即可以支援反向查詢和遍歷、佇列)
---
## Redis常用資料型別
* 集合Set
常用命令:sadd,spop,smembers,sunion 等 (交集、並集、差集 快速排重)
* 可排序集合Sorted set
常用命令:zadd,zrange,zrem,zcard等 (有序的 權重)
---

---
## Redis壓力測試工具benchmark
```
redis-benchmark [option] [option value]
```
----
## 健康指標
| 健康指標| |
| -------- | -------- |
| 存活情況 | ping |
| 連接數 | redis-cli info Clients | grep connected_clients |
| 阻塞客户端數量 | blocked_clients |
| 使用内存峰值 | maxmemory |
| 内存碎片率 | mem_fragmentation_ratio=used_memory_rss/used_memory|
| 缓存命中率 |keyspace_misses/keyspace_hits|
| OPS |instantaneous_ops_per_sec|
| 持久化 |instantaneous_ops_per_sec|rdb_last_bgsave_status/aof_last_bgrewrite_status
| 失效KEY |redis-cli info Keyspace
| 慢日志 |slowlog get
---
## Memorystore Redis
建立redis instances
```=
gcloud redis instances create myredis --size=1 --region=asia-east1 --project=iamrich-lab \
--network=projects/iamrich-lab/global/networks/default \
--connect-mode=private-service-access
```
----
## 執行個體層級

[連結](https://cloud.google.com/memorystore/docs/redis/redis-tiers)
區域與分區 是選擇與您的 後端服務 相同地區為優先。才不會變成跨地域性、增加耗時的存取 Redis 服務。
---
## 計價成本
[連結](https://cloud.google.com/memorystore/pricing?hl=zh-tw)
----
## 連線Memorystore Redis
```=
redis-cli -h 10.117.96.3
```

---
## redis-commander可視化的客戶端
```=
docker run --rm --name redis-commander -d \
--env REDIS_HOSTS=172.24.241.165 \
-p 8081:8081 \
rediscommander/redis-commander:latest
gcloud compute ssh redis-forwarder --zone asia-east1-b -- -N -L 6380:10.117.96.11:6379
```
----

---
# 實際操作
---
[參考](https://www.itread01.com/content/1546849564.html)
https://redis.io/commands
https://kknews.cc/code/vlao8nq.html
https://kknews.cc/code/5xaa592.html
https://github.com/joeferner/redis-commander