Redis

Redis 簡介

張堯期 Terry Chang 2021/06/15 10:36:02
4133
 

一、前言

第一次提到關聯式資料庫這個詞是在1970年的時候,來自 IBM 研究實驗室 Edgar F. Codd 的研究,他在這份研究中定義了「關聯式資料庫 (Relational Database)」的概念。關聯式資料庫一個嚴謹的系統,要存放資料之前必須每張表每個欄位被賦予的定義,但也是因為嚴謹,所以基本上是可以保證它的資料完整性,而且每次的交易都是可靠的。但是網際網路越成長,所需要處理的數據是越來越多,關聯式資料庫因為規定的很嚴謹,缺乏彈性,在某些特定的情形,無法跟上使用者海量的資料,所以才會有了 NoSQL 的開發。
NoSQL 第一次出現是在 1998 年,Carlo Strozzi 在為他的輕量級別,Open Source 的不使用 SQL 語法的關聯式資料庫產生的,後來在2009年的時候,重新被拿出來討論是因為開始發展了非關聯式資料庫,意指的不使用 SQL 語法,但是後來大家有了另外一個不同的解釋,Not Only SQL。NoSQL 因為有比較大的彈性空間,可以比較快速的處理數據,而且 NoSQL 不僅是在結構化的數據上可以快速處理,甚至對於非結構化的數據也是如此。

 

二、資料庫分類

資料庫可以分為在前言以簡單介紹的 SQL 與 NoSQL,而 NoSQL 又可以根據儲存資料的類型可以分為四個類型:

  1. Key-Value:最常見的 NoSQL 資料庫儲存類型,採用Key-Value資料架構,取消了原本關聯式資料庫中常用的欄位架構,每筆資料各自獨立,所以,可以打造出分散式和高擴充能力的特性,本次所要介紹的 Redis 即屬於此類型。
  2. Document:主要用來儲存非結構性的文件,例如最常見的非結構化資料就是HTML網頁。可以使用複雜的查詢準則,不具備關聯式資料庫的 交易處理 與 JOIN 處理能力,但除此之外的處理基本上都能夠實現
  3. Wide-Column:可視為二維的鍵值資料庫,不同於一般關聯式資料庫,以COLUMN為主,COLUMN可以無限擴展
  4. Graph:以圖學架構的概念儲存資料,基本的圖學資料包括了節點(Node)、關係(Relation)和屬性(Property)三種結構

 

、背景介紹

Redis,全名為 Remote Dictionary Server,由義大利人在 2009 年 Salvatore Sanfilippo 設立,起初設立的目的是為了解決 LLOOGG.com 網站在 MySQL 資料庫進行讀寫的不便,以 ANSI C 語言撰寫,大多是在 Linux 系統進行開發與測試,所以其實 Redis 官方並未提供 Window 系統使用,但是 Windows 官方有 64 位元版本的 Redis 供用戶下載。

 

四、特色

  • In-memory:Redis 是一個以記憶體為主進行存取的資料庫。
  • data structure store:Redis 的每個值可以包含複雜的資料結構,因此稱之為資料結構伺服器。
  • Open Source (BSD licensed):Berkeley Software Distribution license,自由軟體中使用最廣泛的授權條款之一。
  • Single Thread
  • Multiple data structure (strings, hashes, lists, set, etc.):可以使用多種的資料結構進行儲存。
  • Support most leading programming languages:支援大多數的程式語言
  • Used as Database, Cache, Message Broker

因為 Redis 使用非常簡便,目前許多知名大型網站都有使用的蹤跡,例如:Twitter, StackOverFlow, Pinterest, Flickr, Github…

 

、基本的五個資料型態

  • String:最基本的 Redis 的儲存型態,一個鍵對一個值,提供 binary safe,可以包含任何資料,包括 JPEG 圖片或是以序列化的物件,可以儲存最大 512 MB 的資料
  • List:lists of strings,依照字串的插入順序進行排列,最多可以儲存 232 -1 個元素
  • Set:沒有順序且不重複的 strings,最多可以儲存 232 -1 個元素
  • Hash:maps composed of fields associated with values,一個鍵可以儲存 232 -1 鍵值對
  • Sorted Set:類似於 Set,但是每個 Set 都會有一個分數,由這些分數來進行排列

 

、使用案例

  • Session Cache:許多網站借助 Redis 字串類別來建立 session cache 快取片段的 HTML 以便加速網站的體驗,因為資料被儲存在記憶體,這樣的特性讓 Redis 變成一個 session cache 的理想選擇。舉例來說,在電商網站上,可以暫時儲存使用者購物車中的商品,即便登出或是斷線後,資料也會繼續存在
  • Full Page Cache (FPC):Redis 提供一個非常容易操作的 FPC 平台,可以快速的讓頁面載入
  • Queues:Redis 可以幫忙根據數據到達或是送出的速率分配資源來管理 Queue size
  • Leaderboards/Counting:對於遊戲開發商來說,Redis 是一個很方便拿來做即時排行榜的工具。只要使用 Sorted Set 類型的資料結構,就可以按照使用的分數進行排行
  • Pub/Sub:Redis支援使用發布和訂閱(Pub / Sub)命令,用戶可以在其所有應用程序和服務中設計高性能的聊天和消息傳遞服務。這包括使用列表數據結構運行原子操作和阻止功能的能力。Realtime analysis:Redis可以以亞毫秒級的延遲處理數據

 

七、缺點

  • 沒有表格
  • 無法對她的Namespace進行命名
  • 受限於 CPU 效能
  • 無法將記憶體上的資料隨時同步到硬碟上
  • 資料容易丟失

 

參考資料:

https://redis.io/topics/introduction

https://www.syscom.com.tw/ePaper_New_Content.aspx?id=489&EPID=215&TableName=sgEPArticle

https://www.runoob.com/redis/redis-intro.html

張堯期 Terry Chang