最全Redis基礎知識


NoSQL概述

什么是NoSQL

NoSQL不僅僅是SQL,它是Not Only SQL 的縮寫,也是眾多非關系型數據庫的統稱NoSQL和關系型數據庫一樣,也是用來存儲數據的倉庫。

為什么需要NoSQL?

隨着互聯網的高速發展,數據量、訪問量呈爆發式式增長。比如12306中國鐵路票務系統。
一年售出車票有30多億張;
網上售票比例超過了80%;
互聯網高峰日售出車票達到了1282多萬張;
高峰時每秒售票超出1000張;
網站高峰日訪問量超過了1600億次……
12306售票系統
已成為全球最大的票務交易系統
中國人民徹夜排隊買票已成為歷史

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

NoSQL特點

  1. 容易擴展,方便使用,數據之間沒有關系。
  2. 數據模型非常靈活,無需提前為要存儲的數據建立字段類型,隨時可以存儲自定義的數據格式。
  3. 適合大數據量、高性能的存儲。
  4. 具有高並發讀/寫、高可用性。

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為什么快

  1. 完全基於內存,絕大部分請求是純粹的內存操作,非常快速。
  2. 數據結構簡單,對數據操作也簡單,Redis中的數據結構是專門進行設計的;
  3. 采用單線程,避免了不必要的上下文切換和競爭條件,也不存在多進程或者多線程導致的切換而消耗 CPU,不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的性能消耗;
  4. 使用多路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號。

消息訂閱與發布

  1. subscribe channel:訂閱頻道。例如subscribe mychat,訂閱mychat這個頻道
  2. psubscribe channel:批量訂閱頻道。例如psubscribe s,訂閱以s開頭的頻道。
  3. publish channel content:在指定的頻道中發布消息,如punlish mychat ‘today is a newday’

Redis事務

Redis作為NoSQL數據庫也提供了事務機制。
特點:

  1. 在事務中的所有命令都將會被串行化的順序執行,事務執行期間,Redis不會再為其他客戶端請求提供任何服務,從而保證了事務中的所有命令被原子的執行。
  2. 和關系型數據庫中的事務相比,在Redis事務中如果有某一條命令執行失敗,其后的命令仍然被繼續執行。

Redis持久化

Redis的高性能是由於其將所有的數據都存儲在了內存中,為了使Redis在重啟之后仍能保證不丟失,需要將數據從內存中同步到硬盤中,這一過程就是持久化。
Redis支持兩種方式的持久化,一種是RDB方式,一種是AOF方式。可以單獨使用,也可以結合使用。

  1. RDB持久化(默認)
    在指定的時間間隔內將內存中的數據集快照寫入磁盤。
  2. AOF持久化
    以日志的形式記錄服務器所處理的每一個寫操作,在Redis服務器啟動之初會讀取該文件來重新構建數據庫,以保證啟動后數據庫中的數據是完整的。

Key值過期

Redis的應用場景

  1. 緩存(最多使用)
  2. 聊天室的在線好友列表 發布/訂閱
  3. 任務隊列(秒殺、搶購) 消息隊列、(先進先出、后進先出) (List)
  4. 應用排行榜(有序集合)
  5. 網站訪問統計(Set)
  6. 數據過期處理(可以精確到毫秒)
  7. 分布式集群框架中的session分離。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM