最全Redis基礎知識

2022-05-27 20:48:13 字數 3804 閱讀 3254

nosql不僅僅是sql,它是not only sql 的縮寫,也是眾多非關係型資料庫的統稱nosql和關係型資料庫一樣,也是用來儲存資料的倉庫。

隨著網際網路的高速發展,資料量、訪問量呈爆發式式增長。比如12306中國鐵路票務系統。

一年售出車票有30多億張;

網上售票比例超過了80%;

網際網路高峰日售出車票達到了1282多萬張;

高峰時每秒售票超出1000張;

**高峰日訪問量超過了1600億次……

12306售票系統

已成為全球最大的票務交易系統

中國人民徹夜排隊買票已成為歷史

這麼多的資料都是需要儲存的,然而傳統的關係型資料庫面對這些海量資料的儲存,以及實現高訪問量、高併發讀/寫,就會顯的力不從心,尤其是當面對超大規模、高併發、高吞吐量的大型動態**的時候,就會暴露出很多難以克服的問題,影響使用者體驗。為了滿足對海量資料的高速儲存需求,實現高併發、高吞吐量,nosql應運而生。nosql的出現可以解決傳統關係型資料庫所不能解決的問題。

容易擴充套件,方便使用,資料之間沒有關係。

資料模型非常靈活,無需提前為要儲存的資料建立字段型別,隨時可以儲存自定義的資料格式。

適合大資料量、高效能的儲存。

具有高併發讀/寫、高可用性。

2023年,義大利的一家創業公司merzia推出了一款基於mysql的**實時統計系統lloogg,沒多久該公司的創始人sanfilippo對mysql的效能感到失望,於是他決定親自為lloogg量身定做乙個資料庫,並於2023年開發完成,這個資料庫就是redis。

redis(全稱:remote dictionary server 遠端字典服務)是乙個開源的、使用c語言編寫、支援網路、可基於記憶體亦可持久化的key-value資料庫,並提供多種語言的api。

redis能讀的速度是110000次/s,寫的速度是81000次/s 。

完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。

資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的;

採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多程序或者多執行緒導致的切換而消耗 cpu,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的效能消耗;

使用多路i/o復用模型,非阻塞io;

redis-cli.exe -h 127.0.0.1 -p 6379
$ wget 

$ tar xzf redis-2.8.17.tar.gz

$ cd redis-2.8.17

$ make

make完後 redis-2.8.17目錄下會出現編譯後的redis服務程式redis-server,還有用於測試的客戶端程式redis-cli,兩個程式位於安裝目錄 src 目錄下:

下面啟動redis服務.

$ cd src

$ ./redis-server

注意這種方式啟動redis 使用的是預設配置。也可以通過啟動引數告訴redis使用指定配置檔案使用下面命令啟動。

$ cd src

$ ./redis-server ../redis.conf

redis.conf 是乙個預設的配置檔案。我們可以根據需要使用自己的配置檔案。

啟動redis服務程序後,就可以使用測試客戶端程式redis-cli和redis服務互動了。 比如:

$ cd src

$ ./redis-cli

redis> set foo bar

okredis> get foo

"bar"

在 ubuntu 系統安裝 redis 可以使用以下命令:

$sudo apt-get update

$sudo apt-get install redis-server

啟動 redis

$ redis-server
檢視 redis 是否啟動?

$ redis-cli
以上命令將開啟以下終端:

redis 127.0.0.1:6379>
127.0.0.1 是本機 ip ,6379 是 redis 服務埠。現在我們輸入 ping 命令。

redis 127.0.0.1:6379> ping

pong

以上說明我們已經成功安裝了redis。

概述字串型別是redis中最為基礎的資料儲存型別。在redis中字串型別的value最多可以容納的資料長度是512m。

常用命令

del key:刪除指定的key

概述hash型別可以看出具有string key 和string value 的map容器。所以該型別非常適合於儲存值為物件的資訊。如username、password和age等。每乙個hash可以儲存4294967295個鍵值對

常用命令概述

list型別是按照插入順序排序的雙向鍊錶。從元素插入和刪除的效率視角來看,如果我們在鍊錶的兩頭插入或刪除元素,這將會是非常高效的操作,即使鍊錶中已經儲存了大量的資料,該操作也可以在常量時間內完成。

常用命令概述

set型別為沒有排序的字元集合。set集合中不允許出現重複的元素。set型別在功能上還存在乙個非常重要的特性,即集合的聚合操作效率極高。

常用命令概述

有序集合和set型別即為相似,都不允許重複的成員出現在乙個set中。它們之間的主要差別是有序集合中的每乙個成員都會有乙個score與之關聯,通過score來為集合中的成員進行從小到大的排序。

常用命令乙個redis例項最多可提供16個資料庫,下標從0到15,客戶端預設連線第0號。

subscribe channel:訂閱頻道。例如subscribe mychat,訂閱mychat這個頻道

psubscribe channel:批量訂閱頻道。例如psubscribe s,訂閱以s開頭的頻道。

publish channel content:在指定的頻道中發布訊息,如punlish mychat 『today is a newday』

redis作為nosql資料庫也提供了事務機制。

特點:在事務中的所有命令都將會被序列化的順序執行,事務執行期間,redis不會再為其他客戶端請求提供任何服務,從而保證了事務中的所有命令被原子的執行。

和關係型資料庫中的事務相比,在redis事務中如果有某一條命令執行失敗,其後的命令仍然被繼續執行。

redis的高效能是由於其將所有的資料都儲存在了記憶體中,為了使redis在重啟之後仍能保證不丟失,需要將資料從記憶體中同步到硬碟中,這一過程就是持久化。

redis支援兩種方式的持久化,一種是rdb方式,一種是aof方式。可以單獨使用,也可以結合使用。

rdb持久化(預設)

在指定的時間間隔內將記憶體中的資料集快照寫入磁碟。

aof持久化

以日誌的形式記錄伺服器所處理的每乙個寫操作,在redis伺服器啟動之初會讀取該檔案來重新構建資料庫,以保證啟動後資料庫中的資料是完整的。

快取(最多使用)

任務佇列(秒殺、搶購) 訊息佇列、(先進先出、後進先出) (list)

應用排行榜(有序集合)

**訪問統計(set)

資料過期處理(可以精確到毫秒)

分布式集群框架中的session分離。

Redis基礎知識

1 redis是開源的高效能鍵值對 key value 資料庫 通過提供各種鍵值資料型別來適應不同場景下的儲存需求,並借助許多高層級的介面使其可以勝任如快取 佇列系統等不同的角色。2 remote dictionary server,以字典結構儲存資料,並允許其他應用通過tcp協議讀寫字典中的內容 ...

redis基礎知識

redis是乙個基於記憶體的高效能key value 1.redis五大基本資料型別 字串 string set get 雜湊 hash hmset hmgetall 鍊錶 list 按照插入順序可以新增乙個元素列表的頭部 左邊 和尾部 右邊 lpush rpush lrange 集合 set sa...

Redis基礎知識

樂觀鎖watch相當於mysql裡面的version jedis採用的是直連的方式,多個執行緒的操作不安全,避免的話採用的是池化技術 redis資料使用的是記憶體中,因此廣泛應用在快取裡面 使用當作快取的原因 模擬一下作業系統裡面的區域性性原理 使用redis不用本地的map的原理 map屬於本地快...