天天看點

redis學習之redis的安裝和簡介

redis簡介

Redis是一個開源的,高性能的,基于鍵值對的緩存與存儲系統,通過設定各種鍵值資料類型來适應不同場景下的緩存與存儲需求。同時redis的諸多高層級功能使其可以勝任消息隊列,任務隊列等不同角色。

存儲結構

Redis是REmote Dictionary Server(遠端字典伺服器)的縮寫,它以字典結構存儲資料,并允許其他應用通過TCP協定讀寫字典中的内容,目前為止redis支援的鍵值資料類型如下:字元串類型,散列類型,清單類型,集合類型,和有序集合類型。其中一個字元串類型鍵值允許存儲的資料最大容量為521M.

記憶體存儲與持久化

Redis資料庫中的所有資料都存儲在記憶體中。在一台普通的筆記本電腦上,Redis可以在一秒内讀寫超過10萬個鍵值。

資料存儲在記憶體也有問題比如斷電。redis還提供了持久化的存儲,既可以将記憶體的資料異步寫入應哦按,同時不影響繼續

提供服務。

功能豐富

Redis可以為每個鍵設定生存時間,生存時間到後期會自動删除,這一功能可以利用redis作為緩存系統來調用。

除此之外,redis的清單類型鍵可以用來實作隊列,并且支援阻塞式讀取,可以容易地實作一個高性能的優先級隊列,同時在更高層上,redis還支援"釋出/訂閱"的消息模式,可以基于此建構聊天室。

redis的安裝

參考

windows安裝redis

redis指令行用戶端

通過redis-cli向redis發送指令,

通過-h和-p自定義位址和端口号
$redis-cli -h 127.0.0.1 -p 6379
           

通過ping指令測試連接配接是否正常

$redis-cli PING
####狀态回複

PONG
####錯誤回複

如果上述指令不存在或者存在格式錯誤,會傳回以error開頭的錯誤。如
reids>ERRORCOMMEND

輸出

(error)ERR unknow command 'ERRORCOMMEND'
           

擷取先輸入redis-cli進入互動模式,然後自由輸入指令,例如PING.

整數回複

傳回遞增後的鍵值,類似mysql最後的索引值

依次執行以下指令
redis-cli

127.0.0.1:6379> set foot bar
OK

127.0.0.1:6379> INCR foo

(integer) 1

127.0.0.1:6379> set foot bar
OK

127.0.0.1:6379> INCR foo

(integer) 2
           

可以看到每次插入一條資料傳回值都跟着變化。

字元串回複

127.0.0.1:6379> set foot bar
OK

127.0.0.1:6379> get foo

"bar"

127.0.0.1:6379> set foo banana
OK

127.0.0.1:6379> get foo

"banana"

127.0.0.1:6379>
           

可以看到get指令可以擷取foo的最新的鍵值。

字元串多行回複

127.0.0.1:6379> KEYS *
1) "proxies"
2) "foo"
3) "foot"
           

傳回鍵名1是我之前執行的,3是之前foo打錯了執行的。keys指令需要便利redis中的所有鍵,當鍵的數量較多時會影響性能,不建議生産環境中使用。

多行資料庫

redis提供了多個來存儲資料的字典,每個字典類型mysql的資料量,每個資料庫對外都是以0開始遞增,redis預設支援16個資料庫,用戶端連接配接到服務端時,redis預設使用0進行操作資料庫,使用select可以根據資料庫。比如選擇1号資料庫:

redis-cli

127.0.0.1:6379> select 1
OK

127.0.0.1:6379[1]> get foo

(nil)

127.0.0.1:6379[1]>
           

redis不支援自定義資料庫的名字,每個資料庫必須以編号命名。比如可以使用0号資料庫存儲某個應用生産環境的資料,1号資料庫存儲測試環境中的資料,需要注意的是不同的應用應該使用不同的redis執行個體redis也不支援為每個資料庫設定不同的通路密碼。

最重要的是redis執行個體中所有資料庫的資料并不是完全隔離的,比如FLUSHALL可以清空一個redis執行個體中所有資料庫中的資料。。由于redis非常輕量級,一個空的redis執行個體占用記憶體隻有1MD左右,是以不用擔心多個redis執行個體會額外占用很多記憶體。

幾個基礎指令

1.keys 見上面的例子

2.判斷一個鍵是否存在

exists key 如果存在傳回1 ,不存在傳回0

0.0.1:6379> exists foo

(integer) 1

127.0.0.1:6379> exists foo2

(integer) 0

127.0.0.1:6379> exists foot

(integer) 1

127.0.0.1:6379>
           

3.删除鍵

del key [key …]

可以删除一個或者多個空格間隔,傳回值是删除的個數。del指令不支援通配符。

127.0.0.1:6379> set f1 1
OK

127.0.0.1:6379> set f3 1
OK

127.0.0.1:6379> set f2 1
OK

127.0.0.1:6379> keys *

1) "key"

2) "f1"

3) "proxies"

4) "f2"

5) "foot"

6) "foo"

7) "f3"

127.0.0.1:6379> del f1

(integer) 1

127.0.0.1:6379> del f2 f3

(integer) 2

127.0.0.1:6379>
           

3.擷取鍵值的資料類型

type key

type指令用來擷取鍵值類型,傳回值可能是string,hash,list,set,zset(有序集合)。

127.0.0.1:6379> set test 1
OK

127.0.0.1:6379> type test
string

127.0.0.1:6379> lpush test2 2

(integer) 1

127.0.0.1:6379> type test2
list

127.0.0.1:6379>
           

lpush指令是向指定的清單類型鍵中增加一個元素,如果不存在則建立。後面詳解。

讀取鍵值

get key

根據鍵擷取其值。

127.0.0.1:6379> get fo

(nil)

127.0.0.1:6379> get foo

"banana"

127.0.0.1:6379>
           

不存在的時候傳回nil.

遞增數字

INCR key

增加指定的整數

INCRBY key increment

incrby和incr指令效果差不多,差別是incrby可以指定增加的數字

127.0.0.1:6379> incrby bar 2

(integer) 2

127.0.0.1:6379> incrby bar 5

(integer) 7

127.0.0.1:6379> incr bar

(integer) 8

127.0.0.1:6379> incr bar

(integer) 9

127.0.0.1:6379>
           

增加指定的浮點數

incrbyfloat key inrement

這個指令類似上面兩個隻不過是可以傳遞一個浮點數而已

127.0.0.1:6379> incrbyfloat bar 3.14

"12.140000000000001"

127.0.0.1:6379> incrbyfloat bar 3.14e+9

"3140000012.1399999"

127.0.0.1:6379>
           

減少指定的整數

有增加就有減少

decr和decrby和增加的用法一樣,隻不過是鍵值遞減。

decrby key 4相當于incrbu key -4

向尾部追加值

向鍵值的末尾加字元串,如果不存在就是相當于set key value

127.0.0.1:6379> append bar "345"

(integer) 21

127.0.0.1:6379> get bar

"3140000012.1399999345"

127.0.0.1:6379>

127.0.0.1:6379> append asd "hello dj"

(integer) 8

127.0.0.1:6379> get asd

"hello dj"

127.0.0.1:6379>
           

擷取字元串長度

STRLEN key

傳回鍵值長度,不存在傳回0.

127.0.0.1:6379> set key "￀￷ᄎᆭ"
OK

127.0.0.1:6379> strlen key

(integer) 4

127.0.0.1:6379> set key "ᅣ ̄채"
OK

127.0.0.1:6379> strlen key

(integer) 4

127.0.0.1:6379>
           

同時設定多個鍵值

Mget key/mset key value

mget/mset和get/set相似,前者可以擷取/設定多個值。

(integer) 4

127.0.0.1:6379> mget bar foo

1) "3140000012.1399999345"

2) "banana"

127.0.0.1:6379> mset a 1 b 2
OK

127.0.0.1:6379>
           

位操作

getbit key offset

setbit key offset value

bitcount key [start][end]

bitop operation destkey key [key ….]

一個位元組由8個二進制位組成,redis提供了以上四個指令可以直接對二進制進行操作。