NoSQL概述
什么是NoSQL
NoSQL不僅僅是SQL,它是Not Only SQL 的縮寫,也是眾多非關系型資料庫的統稱NoSQL和關系型資料庫一樣,也是用來存盤資料的倉庫,
為什么需要NoSQL?
隨著互聯網的高速發展,資料量、訪問量呈爆發式式增長,比如12306中國鐵路票務系統,
一年售出車票有30多億張;
網上售票比例超過了80%;
互聯網高峰日售出車票達到了1282多萬張;
高峰時每秒售票超出1000張;
網站高峰日訪問量超過了1600億次……
12306售票系統
已成為全球最大的票務交易系統
中國人民徹夜排隊買票已成為歷史
這么多的資料都是需要存盤的,然而傳統的關系型資料庫面對這些海量資料的存盤,以及實作高訪問量、高并發讀/寫,就會顯的力不從心,尤其是當面對超大規模、高并發、高吞吐量的大型動態網站的時候,就會暴露出很多難以克服的問題,影響用戶體驗,為了滿足對海量資料的高速存盤需求,實作高并發、高吞吐量,NoSQL應運而生,NoSQL的出現可以解決傳統關系型資料庫所不能解決的問題,
NoSQL特點
- 容易擴展,方便使用,資料之間沒有關系,
- 資料模型非常靈活,無需提前為要存盤的資料建立欄位型別,隨時可以存盤自定義的資料格式,
- 適合大資料量、高性能的存盤,
- 具有高并發讀/寫、高可用性,
Redis概述
Redis由來
2008年,意大利的一家創業公司Merzia推出了一款基于MySQL的網站實時統計系統LLOOGG,沒多久該公司的創始人Sanfilippo對MySQL的性能感到失望,于是他決定親自為LLOOGG量身定做一個資料庫,并于2009年開發完成,這個資料庫就是Redis,
什么是Redis
Redis(全稱:Remote Dictionary Server 遠程字典服務)是一個開源的、使用C語言撰寫、支持網路、可基于記憶體亦可持久化的Key-Value資料庫,并提供多種語言的API,
Redis能讀的速度是110000次/s,寫的速度是81000次/s ,
Redis為什么快
- 完全基于記憶體,絕大部分請求是純粹的記憶體操作,非常快速,
- 資料結構簡單,對資料操作也簡單,Redis中的資料結構是專門進行設計的;
- 采用單執行緒,避免了不必要的背景關系切換和競爭條件,也不存在多行程或者多執行緒導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的性能消耗;
- 使用多路I/O復用模型,非阻塞IO;
Redis的安裝和使用
Windows下安裝
下載地址:https://github.com/MSOpenTech/redis/releases,
Redis 支持 32 位和 64 位,這個需要根據你系統平臺的實際情況選擇,這里我們下載 Redis-x64-xxx.zip解壓后,將檔案夾重新命名為 redis,

打開檔案夾,內容如下:

雙擊redis-server.exe,啟動服務端,輸入之后,會顯示如下界面:

這時候啟動一個 cmd 視窗,原來的不要關閉,不然就無法訪問服務端了,
切換到 redis 目錄下運行:
redis-cli.exe -h 127.0.0.1 -p 6379
Linux 下安裝
下載地址:http://redis.io/download,下載最新穩定版本,
本教程使用的最新檔案版本為 2.8.17,下載并安裝:
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz
$ 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
OK
redis> get foo
"bar"
Ubuntu 下安裝
在 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 字串(String)
概述
字串型別是Redis中最為基礎的資料存盤型別,在Redis中字串型別的Value最多可以容納的資料長度是512M,
常用命令
- 賦值

- 取值

- 洗掉
del key:洗掉指定的key

- 數值增減

Redis 哈希(Hash)
概述
Hash型別可以看出具有String key 和String value 的map容器,所以該型別非常適合于存盤值為物件的資訊,如username、password和age等,每一個hash可以存盤4294967295個鍵值對
常用命令
- 賦值

- 取值


- 洗掉

- 其他


Redis 串列(List)
概述
List型別是按照插入順序排序的雙向鏈表,從元素插入和洗掉的效率視角來看,如果我們在鏈表的兩頭插入或洗掉元素,這將會是非常高效的操作,即使鏈表中已經存盤了大量的資料,該操作也可以在常量時間內完成,
常用命令
- 兩端添加

- 查看串列

- 兩端彈出


- 獲取串列中元素的個數

Redis 集合(Set)
概述
Set型別為沒有排序的字符集合,Set集合中不允許出現重復的元素,Set型別在功能上還存在一個非常重要的特性,即集合的聚合操作效率極高,
常用命令
- 添加/洗掉元素


- 獲得集合中的元素

- 集合的差集運算 A-B

- 集合的交集運算 A∩B

- 集合中的并集運算 A∪B

Redis 有序集合(sorted set)
概述
有序集合和Set型別即為相似,都不允許重復的成員出現在一個Set中,它們之間的主要差別是有序集合中的每一個成員都會有一個score與之關聯,通過score來為集合中的成員進行從小到大的排序,
常用命令
- 添加元素

- 獲得元素


- 洗掉元素

- 范圍查詢


Redis特性
多資料庫
一個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事務
Redis作為NoSQL資料庫也提供了事務機制,
特點:
- 在事務中的所有命令都將會被串行化的順序執行,事務執行期間,Redis不會再為其他客戶端請求提供任何服務,從而保證了事務中的所有命令被原子的執行,
- 和關系型資料庫中的事務相比,在Redis事務中如果有某一條命令執行失敗,其后的命令仍然被繼續執行,
Redis持久化
Redis的高性能是由于其將所有的資料都存盤在了記憶體中,為了使Redis在重啟之后仍能保證不丟失,需要將資料從記憶體中同步到硬碟中,這一程序就是持久化,
Redis支持兩種方式的持久化,一種是RDB方式,一種是AOF方式,可以單獨使用,也可以結合使用,
- RDB持久化(默認)
在指定的時間間隔內將記憶體中的資料集快照寫入磁盤, - AOF持久化
以日志的形式記錄服務器所處理的每一個寫操作,在Redis服務器啟動之扯訓讀取該檔案來重新構建資料庫,以保證啟動后資料庫中的資料是完整的,
Key值過期
Redis的應用場景
- 快取(最多使用)
- 聊天室的在線好友串列 發布/訂閱
- 任務佇列(秒殺、搶購) 訊息佇列、(先進先出、后進先出) (List)
- 應用排行榜(有序集合)
- 網站訪問統計(Set)
- 資料過期處理(可以精確到毫秒)
- 分布式集群框架中的session分離,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/16436.html
標籤:NoSQL
上一篇:pb report呼叫graph
