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的基本知識
- redis 預設有16個數據庫,預設使用第0個數據庫,可以使用select進行切換資料庫: select 3 這樣來切換到第幾個資料庫。
- 檢視所有的key ---- key *
- 清除當前資料庫直接輸入 flushdb即可
- 清空所有資料庫 flushAll
- redis是單執行緒的,是基於記憶體操作,cpu不是redis的效能瓶頸,redis的瓶頸是根據機器的記憶體和網路頻寬
- 用一句話來概括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的六大型別的使用及其功能,請見另一個文章: