--- 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服務器能接收更新的值。 --- ![](https://i.imgur.com/XUwn6wZ.png) ---- ## 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等 (有序的 權重) --- ![](https://i.imgur.com/NIXflE6.png) --- ## 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://i.imgur.com/S4PiRmx.png) [連結](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 ``` ![](https://i.imgur.com/JzUcoO5.png) --- ## 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://i.imgur.com/wgvKIpQ.png) --- # 實際操作 --- [參考](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