Redis:NoSql、Redis概述、Redis的安裝與設定、Redis數據型別

2020-08-10 07:59:53

一.NoSql(非關係型數據庫)

NoSQL:NoSQL = Not Only SQL 非關係型數據庫
  NoSQL,泛指非關係型的數據庫。隨着網際網路web2.0網站的興起,傳統的關係數據庫在應付web2.0網站,
特別是超大規模和高併發的SNS型別的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,
而非關係型的數據庫則由於其本身的特點得到了非常迅速的發展。
  NoSQL數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題。

1.優缺點

(1)優點:
高可延伸性、分佈式計算、低成本、架構的靈活性、半結構化數據、沒有複雜的關係
(2)缺點:
沒有標準化、有限的查詢功能

2.分類

型別 代表 特點
列儲存 Hbase、Cassandra、Hypertable 顧名思義,是按列儲存數據的。最大的特點是方便儲存結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢。
文件儲存 MongoDB、CouchDB 文件儲存一般用類似json的格式儲存,儲存的內容是文件型的。這樣也就有有機會對某些欄位建立索引,實現關係數據庫的某些功能。
key-value儲存 Berkeley DB、MemcacheDB、Redis 可以通過key快速查詢到其value。一般來說,value可以是任何格式。
圖儲存 Neo4J、FlockDB 圖形關係的最佳儲存。使用傳統關係數據庫來解決的話效能低下,而且設計使用不方便。
物件儲存 db4o、Versant 通過類似物件導向語言的語法操作數據庫,通過物件的方式存取數據。
xml數據庫 Berkeley DB XML、BaseX 高效的儲存XML數據,並支援XML的內部查詢語法,比如XQuery,Xpath。

二.Redis

1.簡介

Redis 是完全開源免費的,遵守BSD協定,是一個高效能的key-value數據庫。

Redis 與其他 key - value 快取產品有以下三個特點:

(1) Redis支援數據的持久化,可以將記憶體中的數據儲存在磁碟中,重新啓動的時候可以再次載入進行使用。
(2)Redis不僅僅支援簡單的key-value string型別的數據,同時還提供list,set,zset,hash等數據結構的儲存。
(3)Redis支援數據的備份,即master-slave模式的數據備份。

2.優點

(1) 效能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
(2)豐富的數據型別 – Redis支援二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據型別操作。
(3)原子 – Redis的所有操作都是原子性的,同時Redis還支援對幾個操作全並後的原子性執行。
(4)豐富的特性 – Redis還支援通知, key過期等等特性。

3.與其他的key-value儲存的不同點

(1)Redis有着更爲複雜的數據結構並且提供對他們的原子性操作,這是一個不同於其他數據庫的進化路徑。Redis的數據型別都是基於基本數據結構的同時對程式設計師透明,無需進行額外的抽象。

(2)Redis執行在記憶體中但是可以持久化到磁碟,所以在對不同數據集進行高速讀寫時需要權衡記憶體,因爲數據量不能大於硬體記憶體。在記憶體數據庫方面的另一個優點是,相比在磁碟上相同的複雜的數據結構,在記憶體中操作起來非常簡單,這樣Redis可以做很多內部複雜性很強的事情。同時,在磁碟格式方面他們是緊湊的以追加的方式產生的,因爲他們並不需要進行隨機存取。

4.redis持久化儲存的原因

因爲Redis 分別提供了 RDBAOF 兩種持久化模式:
(1)RDB [RDB 將數據庫的快照(snapshot)以二進制的方式儲存到磁碟中。]

在執行情況下, Redis 以數據結構的形式將數據維持在記憶體中, 爲了讓這些數據在 Redis 重新啓動之後仍然可用,
Redis 分別提供了 RDB 和 AOF 兩種持久化模式。

在 Redis 執行時, RDB 程式將當前記憶體中的數據庫快照儲存到磁碟檔案中,在 Redis 重新啓動動時, RDB 程式可以通過載入 RDB 檔案來還原數據庫的狀態。

RDB 功能最核心的是 rdbSave 和 rdbLoad 兩個函數,前者用於生成 RDB 檔案到磁碟, 而後者則用於將 RDB 檔案中的數據重新載入到記憶體中。

RDB 本質上是個檔案,每隔一段時間,在redis組態檔中進行設定,將記憶體中的數據存入檔案中,如果數據過大,也容易造成數據丟失。
(2)AOF [ 則以協定文字的方式,將所有對數據庫進行過寫入的命令(及其參數)記錄到 AOF 檔案,以此達到記錄數據庫狀態的目的。]

AOF 將命令追加到檔案中,將原有的內容替換掉,記錄到 AOF 檔案,以此達到記錄數據庫狀態的目的,爲了方便起見,我們稱呼這種記錄過程爲同步。

三.Redis的安裝與設定

1.安裝redis

本次以安裝redis的5.0.8版本爲例,並且是在雲伺服器中進行安裝。若下載6.0版本以上沒安裝成功,可能需要注意gcc等版本相容問題
(1)在官網下載穩定版本
redis的官網下載:https://redis.io/download
在这里插入图片描述
(2)先建立一個redis目錄,將redis-5.0.8.tar.gz拖到finalshell中
在这里插入图片描述
當然,還有一個簡單的下載方式,直接輸入:wget http://download.redis.io/releases/redis-5.0.8.tar.gz
在这里插入图片描述
(3)執行解壓:tar zvxf redis-5.0.8.tar.gz
在这里插入图片描述
(4)進入解壓後的檔案目錄中,執行make進行編譯:
在这里插入图片描述
(5)make完畢之後,make install進行編譯安裝:
在这里插入图片描述
(6)進到src目錄下,執行redis-server:
在这里插入图片描述
看到上面的圖形,就說明已經啓動了redis。

2.設定redis

(1)新建 mkdir /etc/redis:
在这里插入图片描述

(2)將組態檔複製到/etc/redis:cp redis.conf /etc/redis/redis.conf
在这里插入图片描述

(3)通過vim編輯器進行編輯並儲存: vim /etc/redis/redis.conf
將daemonsize的no 改爲 yes、註釋bind 127.0.0.1
在这里插入图片描述
在这里插入图片描述

(4)使用組態檔啓動:redis-server /etc/redis/redis.conf
在这里插入图片描述

(5)關閉redis進程:
首先使用ps -aux | grep redis檢視redis進程,再使用kill殺死進程(-9:強制性):
在这里插入图片描述

(6)設定系統命名啓動:
找到utils資料夾中install_server.sh檔案:
在这里插入图片描述
進入utils資料夾,執行:./install_server.sh,然後一直回車就好
在这里插入图片描述
就會產生:/etc/init.d/redis_6379檔案,這是啓動指令碼檔案,先切換到/etc/init.d目錄下,然後我們可以將其重新命名: mv redis_6379 redisd
在这里插入图片描述
設定開機啓動: chkconfig --add redisd
在这里插入图片描述
重新載入新的指令碼再啓動:
重新載入:systemctl daemon-reload
啓動:systemctl start redisd
在这里插入图片描述
關閉redis:systemctl stop redisd
在这里插入图片描述

進入redis:redis-cli
在这里插入图片描述

四.Redis數據型別

Redis支援五種數據型別:string(字串),hash(雜湊),list(列表),set(集合)及zset(sorted set:有序集合)。
Redis常用命令請參考:http://redis.cn/commands.html

1.string

是最簡單的型別,你可以理解爲一個key 對應一個value。string 型別是二進制安全的。意思是redis 的string 可以包含任何數據,比如jpg 圖片或者序列化的物件。string型別是Redis最基本的數據型別,一個鍵最大能儲存512MB。
(1)設定鍵
設定單鍵值對:set key value
在这里插入图片描述

設定多個鍵值對:mset key value [key value …]
在这里插入图片描述

設定鍵值及過期時間(秒單位):setex key seconds value
在这里插入图片描述
(2)獲取鍵
獲取單個鍵:get key
在这里插入图片描述
獲取多個鍵:mget key1 key2 key3
在这里插入图片描述
(3)檢視過期時間
檢視過期時間:ttl key
在这里插入图片描述
(4)運算
原來的值必須是數值字串
incr key:將對應的key值加1
decr key:將對應的key值減1
incrby key num:將對應的key的值加上指定值
decrby key num:將對應的key的值減去指定值
在这里插入图片描述
(5)其它操作
追加值:append key value
redis中值都是字串,追加就是字元拼接
在这里插入图片描述
獲取值得長度:strlen key
在这里插入图片描述

2.hash

Redis hash 是一個鍵值(key=>value)對集合。Redis hash是一個string型別的field和value的對映表,hash特別適合用於儲存物件。每個 hash 可以儲存 2的32次方 -1 鍵值對(40多億)。
儲存形式:key = {name:‘zs’,age: 18}
(1)設定值
設定key所指物件的指定屬性的值:hset key field value
在这里插入图片描述

設定key所指物件的多個屬性值:hmset key field value [field vaue]
在这里插入图片描述

當field欄位不存在時,設定key所指物件的field屬性值:hsetnx key field value
在这里插入图片描述
(2)獲取值
獲取key指定的物件的屬性值:hget key field
在这里插入图片描述

獲取key指定物件的多個屬性值: hmget key field [field]
在这里插入图片描述

獲取key所指物件的所有屬性的名稱和值: hgetall key
在这里插入图片描述

獲取key所指物件的所有屬性名:hkeys key
在这里插入图片描述

獲取key所指物件是的所有屬性值:hvals key
在这里插入图片描述

獲取key所指物件的屬性個數:hlen key
在这里插入图片描述
(3)其它操作
爲key所指物件的指定欄位的整數值加上increment:hincrby key field increment
在这里插入图片描述

爲key所指物件的指定欄位的實數值加上increment:hincrbyfloat key field increment
在这里插入图片描述
判斷當前的欄位是否存在在(在返回1 否則返回0):hexists key field
在这里插入图片描述

刪除欄位和值:hdel key field [field]
在这里插入图片描述

3.list

redis 列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)。列表最多可儲存 2的32次方 - 1 元素 (4294967295, 每個列表可儲存40多億)。
常應用於:1、對數據量大的集合數據刪減   2、任務佇列
(1)新增數據
頭部插入數據:lpush key value [value]
在这里插入图片描述

如果列表存在則在列表頭部插入數據:lpushx key value
在这里插入图片描述

在列表尾部新增數據:rpush key value [value]
在这里插入图片描述

如果列表存在,則在尾部新增數據:rpushx key value
在这里插入图片描述

在指定值前或後插入數據:linsert key before|after value value
在这里插入图片描述

設定指定索引元素的值:lset key index value
注意:索引的值從左邊開始,向右增加,左邊第一個是0,從右邊向左索引編號爲:-1 -2…
在这里插入图片描述
(2)獲取數據
左側出隊並返回出隊元素:
在这里插入图片描述

右側出隊並返回出隊元素:
在这里插入图片描述

返回指定索引的值:
在这里插入图片描述

返回儲存列表中的指定範圍的元素:[start,end]
在这里插入图片描述
從列表裏移除前 count 次出現的值爲 value 的元素:
  count > 0: 從頭往尾移除值爲 value 的元素。
  count < 0: 從尾往頭移除值爲 value 的元素。
  count = 0: 移除所有值爲 value 的元素。
在这里插入图片描述
(3)其它操作
獲取列表長度:llen key
在这里插入图片描述

裁剪列表:ltrim key start stop
  保留start到stop之間的元素,其它都刪除 
在这里插入图片描述

4.set

Redis的Set是string型別的無序集合,元素具有唯一性 不重複。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是O(1)。

常應用於:對兩個集合間的數據進行交集、並集、差集運算
(1)新增元素
新增多個元素:sadd key member [member]
在这里插入图片描述
(2)獲取元素
獲取集閤中所有的元素:smembers key
在这里插入图片描述

返回集合元素的個數:scard key
在这里插入图片描述

返回集閤中隨機元素的值,可以返回count個:srandmember key [count]
在这里插入图片描述
(3)其它操作
移除集閤中隨機的count個元素,並返回:spop key [count]
在这里插入图片描述

移除集閤中一個或者多個成員:srem key member1 [member2]
在这里插入图片描述

判斷元素是否在集閤中,存在返回1,不在返回0:sismember key member
在这里插入图片描述
(4)集合操作
在这里插入图片描述

多個集合的交集:sinter key [key…]
在这里插入图片描述

多個集合的差集 (注意比較順序):sdiff key [key…]
在这里插入图片描述

多個集合的並集:sunion key [key…]
在这里插入图片描述

5.zset

Redis zset 和 set 一樣也是string型別元素的集合,且不允許重複的成員。不同的是每個元素都會關聯一個double型別的分數。redis正是通過分數來爲集閤中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重複。

常應用於:排行榜
(1)新增元素
新增多個元素:zadd key score member [score member]
  其中該key中的元素都是通過score排序的
  在这里插入图片描述

對指定的成員增加權重increment:zincrby key increment member
在这里插入图片描述
(2)獲取元素
返回指定範圍的元素:zrange key start end
在这里插入图片描述

返回元素的個數:zcard key
在这里插入图片描述

返回有序集閤中權重在min和max之間的元素的個數:zcount key min max
在这里插入图片描述

返回有序集閤中 member(元素)的權重(score):zscore key member
在这里插入图片描述

返回當前key中所有的權重(score)和元素(member):zrange key start end withscores
在这里插入图片描述

6.數據庫切換

redis預設帶有16個數據庫,編號從0-15。進入redis後預設數據庫是0,可以使用select num進行切換。

7.其他

檢視所有的key:keys *
在这里插入图片描述

查以a開始的key:keys a*
在这里插入图片描述

查詢以a爲開頭長度爲3個的key:keys a??
在这里插入图片描述

判斷鍵是否存在:exists key
在这里插入图片描述

檢視key對應的value的型別:type key
在这里插入图片描述

刪除指定key:del key
在这里插入图片描述

設定過期時間,秒:expire key 10
在这里插入图片描述
移除key的過期時間:persist key
在这里插入图片描述

清空當前庫所有key:flushdb
在这里插入图片描述

清空所有庫裡的key:flushall
在这里插入图片描述

退出redis用戶端:exit
在这里插入图片描述
檢視伺服器資訊:info
在这里插入图片描述

當前庫中有多少key:dbsize
在这里插入图片描述