一、Redis概述
1、Redis是一個開源的,使用ANSI C 編寫,高性能的Key-Value的NoSQL數(shù)據(jù)庫。
2、 Redis特點
(1)基于內存
(2)可持久化數(shù)據(jù)
(3)具有豐富的數(shù)據(jù)結構類型,適應非關系型數(shù)據(jù)的存儲需求
(4)支持絕大多數(shù)主流開發(fā)語言,如C、C++、Java、Python、R、JavaScript等。
(5)支持集群模式,高效、穩(wěn)定。
3、Redis數(shù)據(jù)模型
(1)鍵值對形式。
(2)Redis的數(shù)據(jù)結構類型,指的就是Redis值的結構類型。
4、Redis作用
(1)本質是數(shù)據(jù)庫,能存儲數(shù)據(jù)。
Redis能靈活處理非關系型數(shù)據(jù)的讀、寫問題,是對MySQL等關系型數(shù)據(jù)庫的 補充。
(2)緩存數(shù)據(jù)。
所謂緩存,就是將數(shù)據(jù)加載到內存中后直接使用,而不是每次都通過IO流從磁 盤上讀取。好處:讀寫效率高。
而Redis則是將數(shù)據(jù)直接存儲在內存中,只有當內存空間不足時,將部分數(shù)據(jù)持久化到磁盤上。
二、Redis安裝
1、下載,上傳到Linux服務器,并解壓
2、預編譯(實際上是檢查編譯環(huán)境的過程)
進入目錄: cd /opt/soft/redis-3.2.9/deps/jemalloc
執(zhí)行預編譯 ./configure
在預編譯的過程中,會檢測安裝redis所需的相關依賴,依次安裝即可。
(a)缺少c編譯環(huán)境 yum -y install gcc-c++
預編譯不是必須的步驟,它只是在檢查編譯過程中需要的環(huán)境是否滿足。
通常源碼包中,都有一個可執(zhí)行的configure腳本,這個腳本執(zhí)行預編譯的腳本。但是有一些源碼包中,沒有該文件,可以省略預編譯步驟。
3、編譯 進入/opt/soft/redis-3.2.9/src
Make
4、安裝 進入/opt/soft/redis-3.2.9/src
Make install
5、啟動redis服務端(指定配置文件)
拷貝redis.conf文件到/etc 目錄下,方便管理。
cp /opt/soft/redis-3.2.9/redis.conf /etc/
/usr/local/bin/redis-server /etc/redis.conf
6、啟動redis客戶端,登陸 /usr/local/bin/redis-cli
7、安裝成功
三、Redis數(shù)據(jù)結構類型
(一)Redis的鍵key
1、key的類型
redis的key 值是二進制安全的,這意味著可以用任何二進制序列作為key值,從形如”foo”的簡單字符串到一個JPEG文件的內容都可以。
空字符串也是有效key值。
redis建議使用字符串做為key的類型
2、key取值規(guī)范
(1)鍵值不需要太長,消耗內存,在數(shù)據(jù)中查找這類鍵值的計算成本較高
(2)鍵值不宜過短,可讀性較差,通常建議見名知意。
(二)Redis的值value
(1)Redis的數(shù)據(jù)結構類型,指的就是redis的值value的類型;
(2)Redis常用的數(shù)據(jù)結構類型:string、list、set、sortedSet、hash
(3)string類型
string類型是redis最常用的數(shù)據(jù)結構類型,存儲的值為字符串。
string相關命令
set key value
設置一個key,值為value,類型為String類型;如果這個key已經(jīng)存在,則更新這個key的值。
返回值:1 表示成功;0 表示失敗
setnx key value
如果這個key不存在,則設置一個key,值為value;如果key存在,則不做更新。
返回值:1 表示成功;0 表示失敗
get key
獲取key對應的value值;如果key不存在,則返回nil
mget key1 key2 key3
一次獲取多個key的值,如果對應key不存在,則對應返回nil。
incr key
將 key 中儲存的數(shù)字值增一,然后返回。
如果這個key不存在,那么key的值會先被初始化為0,然后再執(zhí)行INCR
操作。
如果這個key對應的value值,不能表示數(shù)字,則會返回一個錯誤。
incrby key increment
將key增加指定的步長值。
decr key
將 key 中儲存的數(shù)字值減一,然后返回。
如果這個key不存在,那么key的值會先被初始化為0,然后再執(zhí)行INCR操作。
如果這個key對應的value值,不能表示數(shù)字,則會返回一個錯誤。
Redis的key是單線程模式,這就意味一瞬間只有一個線程能夠持有這個key,所以可以使用redis解決部分涉及線程安全的業(yè)務。比如,在初級時候通過多線程模擬賣票,使用加鎖的方式,保證只有一個線程能夠持有鎖,進行買票業(yè)務。
decrby key decrement
將key減少對應的步長值。
append key value
如果key已經(jīng)存在,則將value追加到這個key原先的value值的末尾。
如果這個key不存在,則執(zhí)行set操作。
127.0.0.1:6379> help @string 查看string類型的幫助文檔()
127.0.0.1:6379> help set 查看set命令的幫助文檔
(四)List類型
特點
(1)、基于Linked List實現(xiàn)
(2)、元素是字符串類型**
(3)、列表頭尾增刪快,中間增刪慢,增刪元素是常態(tài)
(4)、元素可以重復出現(xiàn)
(5)、最多包含2^32-1元素
List類型相關命令
lpush key value [value ...]
將一個或多個值value插入到列表key的表頭(即從左邊插入);
如果有多個value值,那么各個value值按從左到右的順序依次插入到表頭:比如說,對空列表mylist執(zhí)行命令LPUSH mylist a b c,列表的值將是 c b a 這等同于原子性地執(zhí)行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三個命令;
如果 key 不存在,一個空列表會被創(chuàng)建并執(zhí)行 LPUSH 操作。
當 key 存在但不是列表類型時,返回一個錯誤。
rpush key value [value ...]
尾部添加(從右向左),操作同上。
llen key
返回key對應list的長度,key不存在返回0,如果key對應類型不是list返回錯誤
lindex key index
index元素在list列表中的下角標,從0開始;
lindex 是從左到右取元素
lrange key start stop
獲取指定區(qū)間的所有元素;
下角標從0開始,0表示第一個元素,1表示第二個,依次類推;
-1表示最后一個元素,-2表示倒數(shù)第二個元素,依次類推;
lpop key
移除并返回列表中的第一個元素
rpop key
移除并返回列表中的最后一個元素。
(五)Set類型(集合)
特點
(1)無序的、去重的;
(2)元素是字符串類型;
(3)最多包含2^32-1元素。
Set相關命令
sadd key member [member ...](無序不重復)
將一個或多個 member 元素加入到集合 key 當中,已經(jīng)存在于集合的 member 元素將被忽略。
假如 key 不存在,則創(chuàng)建一個只包含 member 元素作成員的集合。
當 key 不是集合類型時,返回一個錯誤。
smembers key
返回集合 key 中的所有成員。
不存在的 key 被視為空集合。
spop key
移除并返回集合中的一個隨機元素。
被移除的隨機元素。
當key不存在或key是空集時,返回nil。
scard key
返回集合key的基數(shù)(集合中元素的數(shù)量)。
集合的基數(shù)。
當key不存在時,返回0。
交集、并集、差集sinter sunion sdiff
sinter key [key ...]
返回一個集合的全部成員,該集合是所有給定集合的交集。
不存在的 key 被視為空集。
sunion key [key ...]
返回一個集合的全部成員,該集合是所有給定集合的并集。
不存在的 key 被視為空集。
sdiff key [key ...]
返回一個集合的全部成員,該集合是所有給定集合之間的差集。
不存在的 key 被視為空集。
(六)SortedSet類型
特點
(1)類似Set集合;
(2)有序的、去重的;
(3)元素是字符串類型;
(4)每一個元素都關聯(lián)著一個浮點數(shù)分值(Score),并按照分值從小到大的順序排列集合中的元素。分值可以相同
(5)最多包含2^32-1元素