1. 程式人生 > 資料庫 >Redis的彙總

Redis的彙總

 一 我們得知道為何會有Redis

簡單的一句話就是: 現在是大資料時代,一般的資料庫(Mysql等關係型資料庫)無法進行分析處理了。

意識就是,使用資料庫進行存 儲資料,由於資料庫持久化資料主要是面向磁碟的,但是磁碟的讀/寫比較慢。當遇到高併發下,往往需要瞬時的進行大量的讀/寫要求,這是極其容易讓資料庫宕機。

從而,就引進了一種新的技術NoSQL技術(非關係型資料庫),其實也是一種簡單的資料庫,主要是基於記憶體的資料庫,也提供一定的持久化功能。

而,Redis(KV鍵值對型別)和MongoDB(文件型資料庫)是當前失眠上用的最為廣泛的NoSQL。

NoSQL= not onli sql (不僅僅時SQL),泛指非關係型資料庫的。

 

其實為何會有NoSQL的出現了,就是為了適應現在社會的 3V+3高

3V是指

  • 海量 Volume
  • 多樣Variety
  • 實時Velocity

3高是指

  • 高併發
  • 高可擴 (隨時水平拆分,機器不夠了,可以擴充套件機器)
  • 高效能  (保證使用者體驗和產品的效能)

 

二 Redis的優點

1.執行速度快,因為是基於ANSIC語言編寫的。

2.讀寫速度快,因為是基於記憶體讀寫的,而不是磁碟。   -------------- Redis一秒可以寫8萬次,讀取11萬

3資料結構較簡單,因為只有6中資料型別


 三Redis能做什麼

①記憶體儲存、持久化,記憶體中是斷電即失,所以持久化很重要(有兩種,rdb,aof)

②效率高,用於告訴快取

③釋出訂閱系統,也就是簡單的訊息佇列系統

④地圖資訊分析

⑤計時器,計數器(瀏覽量)

 


 

四  Redis一般是基於Linux使用的

安裝在了cd /usr/local/redis/bin

redies的啟動(後端模式):

  先進入:cd /usr/local/redis/bin

  再啟動: ./redis-server redis.conf

  檢視是否啟動:ps -aux | grep redis

啟動客戶端:

  先進入:cd /usr/local/redis/bin

  再啟動:./redis-cli

 

 

 

 

redis的停止:

  方法1:在Linux命令列下輸入 ./redis-cli shutdown

  方法2:在Redis客戶端裡面輸入shutdown

效能測試

①100個併發連線 100000請求

  在linux開啟redis後,輸入

    redis-benchmark -h localhost -p 6379 -c 100 -n 100000

結果分析:

 

 

 

 

 


 

五  Redis的基本知識

  1. redis 預設有16個數據庫,預設使用第0個數據庫,可以使用select進行切換資料庫: select 3 這樣來切換到第幾個資料庫。
  2. 檢視所有的key ----  key *
  3. 清除當前資料庫直接輸入 flushdb即可
  4. 清空所有資料庫 flushAll
  5. redis是單執行緒的,是基於記憶體操作,cpu不是redis的效能瓶頸,redis的瓶頸是根據機器的記憶體和網路頻寬
  6. 用一句話來概括Redis--- Redis是一種基於記憶體的,以鍵值儲存來儲存六種其資料型別的非關係資料庫(NoSQL)的一種,並且提供了一定的持久化功能(rdb,aof),還支援一些事務,釋出訂閱訊息模式,主從複製等功能

問:為何Redis是單執行緒的,執行速度還是很快呢?

這兒有兩個誤區:

  誤區1:高效能的伺服器一定是多執行緒的-❌

  誤區2:多執行緒(CPU會上下切換), 所以會比單執行緒快-❌

那為何Redis執行速度不慢呢,是因為Redis是將所有的資料全部儲存在記憶體中的,所有說使用單執行緒去操作就是最快效率最高的,而多執行緒會cpu的切換,這是耗時操作!!!

總結:對於記憶體系統來說,如果沒有上下文切換效率就是最高的!多次讀寫都在一個cpi上,在記憶體情況下,這是最優方案。

 


 

六 Redis 的五大資料型別

可能會有人好奇了,為何上面說是六大資料型別,這兒卻是五大呢,因為前五個用的較多。

注意:這兒的資料型別指的是值的型別(Redis的資料是以鍵值形式存在的)

這兒列出六個資料型別:String(字串), List(列表),set(集合), hash(雜湊結構), zset(有序集合), tHyperLogLog(基數)

 

資料型別 資料型別儲存的值 說明
String(字串) 可以儲存字串,整數,浮點數

堆字串進行操作,比如增加字串或者求字串;

如果是整數或者浮點數,可以實現計算,比如自增等

List(列表) 它是一個連結串列,每一個節點都包含一個字串

Redis支援從連結串列的兩端插入或者彈出節點,或者通過偏移對它進行剪裁;

可以讀取一個或多個節點;

根據條件來刪除或查詢節點等

set(集合) 是一個收集器,但是是無序的去重的,裡面每一個元素都是一個字串

可以新增,讀取,刪除單個元素;

檢測一個元素是否在集合中;

計算它和其它集合的交集,並集和差集等;

隨機從集合中讀取元素

hash(雜湊結構) 類似於Map,是一個鍵值對形式的無序不去重(只要鍵不同)列表

可以增刪改查單個鍵值對,也可以

獲取所有的鍵值對

zset(有序集合)

是一個有序集合,可以包含字串,整數,浮點數,分值

各個值的排序是按照大小來決定的

可以增刪改查元素,根據分值的範圍或者成員來獲得對於的元素

HyperLogLog(基數) 用來計算重複的值,以確定儲存的數量 只提供基數的運算,不提供返回功能

 

 具體的Redis的六大型別的使用及其功能,請見另一個文章: