1. 程式人生 > >Redis部署與基本操作

Redis部署與基本操作

1.安裝

1)不指定安裝位置,則會把redis的可執行檔案安裝到  redis-2.8.6/src/目錄下

[[email protected] ~]# ls

anaconda-ks.cfg  httpd-2.2.9     install.log         redis-2.8.6.tar.gz  

[[email protected] ~]# tar xzf redis-2.8.6.tar.gz && cd redis-2.8.6 && make

[[email protected] ~]# make PREFIX=/usr/local/redis install

#指定安裝位置,如果沒有指定安裝位置PREFIX=/usr/local/redis,則make install會把redis 安裝到/usr/local/bin/目錄下

[[email protected] ~]# mkdir /usr/local/redis/etc

[[email protected] ~]# cp /root/redis-2.8.6/redis.conf /usr/local/redis/etc/

 

2)修改配置檔案

[[email protected]

redis]# vi /usr/local/redis/etc/redis.conf

daemonize no 改為   daemonize yes     #後臺啟動

埠 6379

3)啟動時要指定配置檔案才可以正常啟動-------路徑/redis-server  配置檔案

[[email protected] bin]# cd /usr/local/redis/bin/ && \

 ./redis-server  /usr/local/redis/etc/redis.conf

4)關閉redis

A)[[email protected] ~]# /usr/local/redis/bin/redis-cli shutdown

B)[[email protected] ~]# pkill  -9 redis

5)#客戶端連線

A)

-h  IP 連線指定的redis伺服器

-p  6379: 指定redis伺服器的埠

-a  密碼: 使用密碼登入

-n 資料庫號: 指定連線哪個資料庫

B)啟動客戶端連線[[email protected] redis]# /usr/local/redis/bin/redis-cli      

C)退出 quit

D)連線庫啟動-------預設16個庫0-15

[[email protected] bin]# /usr/local/redis/bin/redis-cli -n 1

127.0.0.1:6379[1]>

 

2.配置檔案

1)[[email protected] redis]# vi /usr/local/redis/etc/redis.conf

2)如果以後臺程序執行的話,就需要指定pid,你可以在此自定義redis.pid檔案的位置。

    pidfile /var/run/redis.pid    ----通過程序id判斷服務是否啟動執行

  3)#接受連線的埠號,如果埠是0則redis將不會監聽TCP socket連線

port 6379

  4)#連線超時時間,單位秒。(0 to disable)?

timeout 300 ----預設是0

 

 

5)#日誌級別,預設是verbose(詳細),各種日誌級別:

#notice:比較適合生產環境

6)日誌位置

# Specify the log file name. Also the empty string can be used to force

# Redis to log on the standard output. Note that if you use standard

# output for logging but daemonize, logs will be sent to /dev/null

logfile "/usr/local/redis/redis.log" 日誌儲存位置

 

7)設定資料庫數目。預設的資料庫是DB 0。------預設啟用了16個庫 0-15

databases 16

 

3.Redis的資料型別

1共計5種類型:string(字串)、hash(雜湊表) list(雙向佇列)、set(集合)和zset(有序集合)

2 String(子串型別)----一個Key對應一個Value

   Aset 鍵  ""   設定鍵值 若鍵已經存在會覆蓋

127.0.0.1:6379> set name machong

OK

127.0.0.1:6379>

   Bget 鍵 得到鍵值

127.0.0.1:6379> get name

"machong"

127.0.0.1:6379>

   Csetnx 鍵 值 當該鍵不存在時設定值,若鍵存在返回0表示失敗(防止覆蓋

127.0.0.1:6379> setnx name ma

(integer) 0

127.0.0.1:6379> setnx name1 ma

(integer) 1

   Dsetex 鍵 [有效時間] 值

 設定一個指定有效期的鍵和值(單位秒)。不寫有效時間則表示永久有效,等價於set

127.0.0.1:6379> setex test 30 11111

OK

127.0.0.1:6379> ttl test  ttl 鍵--以秒為單位,返回給定 key 的剩餘生存時間

(integer) 13--------------以秒為單位,返回 key 的剩餘生存時間

127.0.0.1:6379> ttl test---當 key 不存在時,返回 -2

(integer) -2

127.0.0.1:6379>

127.0.0.1:6379> get test

(nil)

127.0.0.1:6379> ttl name

(integer) -1----------------當 key 存在但沒有設定剩餘生存時間時,返回 -1 

127.0.0.1:6379>

    E) setrange 鍵 位置 子字串   替換子字串 (替換長度由子子串長度決定)

127.0.0.1:6379> set str abcdef

OK

127.0.0.1:6379> setrange str 5 a

(integer) 6

127.0.0.1:6379> get str

"abcdea"

127.0.0.1:6379>

#將str鍵對應值的第5個位置開始替換(字串位置從0開始計算)

    F) mset 鍵1 值1 鍵2 值2 鍵3 值3 ....

批量設定鍵和值,成功則返回ok

127.0.0.1:6379> mset name machong age 23 sex man

OK

127.0.0.1:6379>

    G) mget 鍵1 鍵2 鍵3....

批量獲取值

127.0.0.1:6379> mget name age sex

1) "machong"

2) "23"

3) "man"

127.0.0.1:6379>

    H) msetnx 鍵1 值1 鍵2 值2 鍵3 值3 ....

批量設定不存在的鍵和值,成功則返回ok

127.0.0.1:6379> msetnx name xiaofei age 20 sex nv

(integer) 0

127.0.0.1:6379>

127.0.0.1:6379> msetnx name2 xiaofei age2 20 sex2 nv

(integer) 1

127.0.0.1:6379>

127.0.0.1:6379> mget name2 age2 sex2

1) "xiaofei"

2) "20"

3) "nv"

127.0.0.1:6379>

    I) getset 鍵 新值

獲取原值,並設定新值

127.0.0.1:6379> getset name2 xiaofeifei

"xiaofei"

127.0.0.1:6379> get name2

"xiaofeifei"

127.0.0.1:6379>

   J) getrange 鍵 0 4  

獲取指定範圍的值(獲取指定0到4位置上的值,字串位置從0開始計算)

127.0.0.1:6379> getrange name2 4 6

"fei"

127.0.0.1:6379>    

   K) incr 鍵  

指定鍵的值做加1操作,返回加後的結果(只能加數字)。

127.0.0.1:6379> incr age

(integer) 24

127.0.0.1:6379> incr age

(integer) 25

127.0.0.1:6379>

   L) incrby 鍵 m    

//其中m可以是正整數或負整數

加指定值,鍵不存在時候會設定鍵

127.0.0.1:6379> incrby age 10

(integer) 35

127.0.0.1:6379>

127.0.0.1:6379> incrby age -15

(integer) 20

127.0.0.1:6379>

   M) decr 鍵

指定鍵的值做減1操作,返回減後的結果。

127.0.0.1:6379> decr age

(integer) 19

127.0.0.1:6379>

   N) decrby 鍵 n

//其中n可以是正整數或負整數

設定某個鍵減上指定值

127.0.0.1:6379> decrby age 4

(integer) 15

127.0.0.1:6379> decrby age -5

(integer) 20

127.0.0.1:6379>

   0)append  鍵 追加字串

給指定key的字串追加value,返回新字串值的長度

127.0.0.1:6379> append name2 " have a hot body!"

(integer) 27

127.0.0.1:6379> get name2

"xiaofeifei have a hot body!"

127.0.0.1:6379>   

   P) strlen 鍵名

strlen求一個鍵長度

127.0.0.1:6379> strlen name2

(integer) 27

127.0.0.1:6379>

Q)del命令:刪除一個鍵

127.0.0.1:6379> set test aaaa

OK

127.0.0.1:6379> get test

"aaaa"

127.0.0.1:6379> del test

(integer) 1

127.0.0.1:6379> keys *

1) "age2"

2) "name1"

3) "str"

4) "sex2"

5) "name2"

6) "name"

7) "sex"

8) "age"

127.0.0.1:6379>

3) hashs型別

#注意:redis中沒有表概念,所有的資料都存入鍵中。

string鍵型別:所有的值(可以是任何資料型別)都儲存在一個鍵當中,放在一個記憶體塊中

hashs鍵型別:所有的值也都儲存在一個鍵當中,只是放在不同的記憶體塊中,每個塊稱作欄位

 

  A)hset key field value

設定一個鍵,在鍵中儲存欄位和值

    hset 雜湊集(鍵) 欄位 值

127.0.0.1:6379> hset user1 name xiaoqiang

(integer) 1

127.0.0.1:6379> keys *

1) "age2"

2) "name1"

3) "str"

4) "sex2"

5) "name2"

6) "name"

7) "user1"

8) "sex"

9) "age"

127.0.0.1:6379>

  B)>hsetnx  鍵  欄位  值

設定一個鍵中,不存在的欄位和值。如果欄位存在則報錯(成功返回1,失敗返回0)  

   hget 鍵 欄位  獲取鍵中的一個指定欄位的值

127.0.0.1:6379> hsetnx user1 name xiaoyou

(integer) 0

127.0.0.1:6379> hget user1 name

"xiaoqiang"

127.0.0.1:6379>

 

  C)hmset  鍵  欄位1  值1  欄位2  值2   在一個鍵中,批量設定欄位

hmget 鍵 欄位1 [欄位2]  獲取鍵中一個或多個欄位的值

127.0.0.1:6379> hmset user2 name youyou age 23 sex man

OK

127.0.0.1:6379> hmget user2 name age sex

1) "youyou"

2) "23"

3) "man"

127.0.0.1:6379>

 

   D) hexists :判斷指定的欄位是否存在於鍵中

127.0.0.1:6379> HEXISTS user2 nam

(integer) 0---------------------------不存在

127.0.0.1:6379> HEXISTS user2 name

(integer) 1---------------------------存在

127.0.0.1:6379>

   E) hlen :獲取鍵中的欄位數量

127.0.0.1:6379> hlen user2

(integer) 3

127.0.0.1:6379>

   F)hkeys :獲取鍵中的所有欄位名

127.0.0.1:6379> hkeys user2

1) "name"

2) "age"

3) "sex"

127.0.0.1:6379>

   G)hvals:獲取鍵中所有欄位的值

127.0.0.1:6379> HVALS user2

1) "youyou"

2) "23"

3) "man"

127.0.0.1:6379>

   H) hgetall :獲取鍵中的所有欄位和值

127.0.0.1:6379> hgetall user2

1) "name"

2) "youyou"

3) "age"

4) "23"

5) "sex"

6) "man"

127.0.0.1:6379>

   I)hincrby:將鍵中指定欄位的值,增加指定的數字

127.0.0.1:6379> hincrby user2 age 5 ----只有數字的值才可增加

(integer) 28

127.0.0.1:6379>

 

             J)hdel 鍵 欄位1 欄位2

  刪除鍵中的一個或多個欄位

127.0.0.1:6379> hdel user2 age sex

(integer) 2

127.0.0.1:6379> HGETALL user2

1) "name"

2) "youyou"

127.0.0.1:6379>

K)刪除一個鍵,還是要使用del命令

127.0.0.1:6379> del user2

(integer) 1

127.0.0.1:6379> HGETALL user2

(empty list or set)

127.0.0.1:6379>

4) list型別(雙向連結串列結構)

List是一個連結串列結構,主要功能是push、pop、獲取一個範圍的所有值等等,操作中key理解為連結串列的名字。Redis的list型別其實就是一個每個子元素都是string型別的雙向連結串列。列表允許有重複值

 

A)lpush 鍵 值1 [值2]

從佇列左邊向佇列寫入一個或多個值(認為佇列的左面為佇列頭,右邊為佇列尾)

 

lrange 鍵 起始下標 終止下標

從佇列中獲取指定的返回值(從佇列左邊向右獲取)

 

下標:0代表隊列中第一個元素,1代表第二個元素,依次類推

-1代表隊列中最後一個元素,-2代表倒數第二個元素

127.0.0.1:6379> lpush list 1 2 3 4 5 6

(integer) 6

127.0.0.1:6379> LRANGE list 0 -1

1) "6"----------是從左面寫入佇列的最後一個值,所以在佇列的開頭

2) "5"

3) "4"

4) "3"

5) "2"

6) "1"-----------是從左面寫入佇列的第一個值,所以直接放到了佇列尾

127.0.0.1:6379>

 

127.0.0.1:6379> LRANGE list -5 3

1) "5"----------從後面數第5個元素

2) "4"

3) "3"---------從左邊數下標為3的元素

127.0.0.1:6379>

B)rpush 鍵 值1 [值2]

從佇列右邊向佇列寫入一個或多個值

127.0.0.1:6379> rpush list1 1 2 3 4 5 6

(integer) 6

127.0.0.1:6379> LRANGE list1 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

6) "6"

127.0.0.1:6379>

C)linsert  鍵  before|after  原值  新值

在佇列中指定元素之前或之後插入新值

127.0.0.1:6379> linsert list1 before 3 abc

(integer) 7

127.0.0.1:6379> LRANGE list1 0 -1

1) "1"

2) "2"

3) "abc"

4) "3"

5) "4"

6) "5"

7) "6"

127.0.0.1:6379>

 

D)lset  鍵  下標  新值

給佇列中指定元素設定新值

127.0.0.1:6379> lset list1 0 11

OK

127.0.0.1:6379> LRANGE list1 0 -1

1) "11"

2) "2"

3) "abc"

4) "3"

5) "4"

6) "5"

7) "6"

127.0.0.1:6379>

E)lrem  鍵  n  指定值

從佇列中刪除n個值為“指定值”的元素

n > 0 從佇列頭向尾刪除n個元素

n < 0 從佇列尾向頭刪除n個元素

n = 0 刪除所有值為“指定值”的元素

127.0.0.1:6379> rpush list3 a 1 a 2 a 3 a 4 a 5 a 6

(integer) 12

127.0.0.1:6379> LRANGE list3 0 -1

 1) "a"

 2) "1"

 3) "a"

 4) "2"

 5) "a"

 6) "3"

 7) "a"

 8) "4"

 9) "a"

10) "5"

11) "a"

12) "6"

127.0.0.1:6379> lrem list3 -2 a

(integer) 2

127.0.0.1:6379> LRANGE list3 0 -1

 1) "a"

 2) "1"

 3) "a"

 4) "2"

 5) "a"

 6) "3"

 7) "a"

 8) "4"

 9) "5"

10) "6"

127.0.0.1:6379>

 

127.0.0.1:6379> lrem list3 0 a

(integer) 4

127.0.0.1:6379> LRANGE list3 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

6) "6"

127.0.0.1:6379>

F)ltrim  鍵  起始下標  結束下標

修剪佇列,讓佇列只保留指定指定範圍內的元素

127.0.0.1:6379> rpush list4 1 2 3 4

(integer) 4

127.0.0.1:6379> LRANGE list4 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

127.0.0.1:6379> ltrim list4 1 2

OK

127.0.0.1:6379> LRANGE list4 0 -1

1) "2"

2) "3"

127.0.0.1:6379>

G)lpop  鍵

從指定的佇列左面移除一個值

127.0.0.1:6379> LRANGE list1 0 -1

1) "11"

2) "2"

3) "abc"

4) "3"

5) "4"

6) "5"

7) "6"

127.0.0.1:6379> lpop list1

"11"

127.0.0.1:6379> LRANGE list1 0 -1

1) "2"

2) "abc"

3) "3"

4) "4"

5) "5"

6) "6"

127.0.0.1:6379>

H)rpop  鍵

從指定佇列的右邊移除一個值

127.0.0.1:6379> rpop list1

"6"

127.0.0.1:6379> LRANGE list1 0 -1

1) "2"

2) "abc"

3) "3"

4) "4"

5) "5"

127.0.0.1:6379>

I)rpoplpush  源佇列  目標佇列

移除源佇列的最後一個元素,並把該元素寫入目標佇列

127.0.0.1:6379> LRANGE list1 0 -1

1) "2"

2) "abc"

3) "3"

4) "4"

5) "5"

127.0.0.1:6379> LRANGE list2 0 -1

(empty list or set)

127.0.0.1:6379> LRANGE list3 0 -1

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

6) "6"

127.0.0.1:6379> RPOPLPUSH list1 list3

"5"

127.0.0.1:6379> LRANGE list3 0 -1

1) "5"

2) "1"

3) "2"

4) "3"

5) "4"

6) "5"

7) "6"

127.0.0.1:6379>

J)lindex  鍵  下標 獲取佇列中指定下標元素的值

127.0.0.1:6379> LRANGE list3 0 -1

1) "5"

2) "1"

3) "2"

4) "3"

5) "4"

6) "5"

7) "6"

127.0.0.1:6379> lindex list3 0

"5"

127.0.0.1:6379>

K)llen  鍵   獲得佇列的長度

127.0.0.1:6379> llen list3

(integer) 7

127.0.0.1:6379>

 

 

  5) sets型別和操作

Set是集合,它是string型別的無序集合。對集合我們可以取並集、交集、差集。通過這些操作我們可以實現社交網站中的好友推薦和blog的tag功能。集合不允許有重複值。

 

Asadd  鍵  值1[值2]

新增一個或多個元素到集合中

127.0.0.1:6379> sadd jihe aa bb cc dd

(integer) 4

127.0.0.1:6379>

B) smembers  鍵    獲取集合裡面所有的元素

127.0.0.1:6379> smembers jihe

1) "dd"

2) "bb"

3) "aa"

4) "cc"

127.0.0.1:6379>

C) srem  鍵  值1[值2]   從集合中刪除指定的一個或多個元素

(刪除鍵,依然使用“del 鍵” 命令)

127.0.0.1:6379> srem jihe aa bb

(integer) 2

127.0.0.1:6379> smembers jihe

1) "dd"

2) "cc"

127.0.0.1:6379>

 

D) spop  鍵   隨機從集合中刪除一個元素,並返回

127.0.0.1:6379> smembers jihe

1) "cc"

2) "ff"

3) "dd"

4) "gg"

5) "ee"

6) "tt"

7) "rr"

127.0.0.1:6379> spop jihe

"ee"

127.0.0.1:6379> spop jihe

"rr"

127.0.0.1:6379>

E) srandmember  鍵  值 隨機返回集合中一個元素,但不刪除

127.0.0.1:6379> SRANDMEMBER jihe

"gg"

127.0.0.1:6379> SRANDMEMBER jihe

"ff"

F) scard  鍵 獲取集合裡面元素個數

127.0.0.1:6379> scard jihe

(integer) 5

127.0.0.1:6379>

G) sismember  鍵  值

確定一個指定的值是否是集合中的元素

127.0.0.1:6379> smembers jihe

1) "ff"

2) "dd"

3) "gg"

4) "cc"

5) "tt"

127.0.0.1:6379> SISMEMBER jihe ii

(integer) 0

127.0.0.1:6379> SISMEMBER jihe tt

(integer) 1

127.0.0.1:6379>

H) sdiff  集合1  集合2         返回集合1與集合2的差集。以集合1為主

127.0.0.1:6379> sadd jihe1 1 2 3 4

(integer) 4

127.0.0.1:6379> sadd jihe2  2 3 4 5

(integer) 4

127.0.0.1:6379> sdiff jihe1 jihe2

1) "1"

127.0.0.1:6379>

I) sdiffstore  新集合  集合1  集合2 

返回集合1和集合2的差集,並把結果存入新集合

127.0.0.1:6379> sdiffstore xinjihe jihe1 jihe2

(integer) 1

127.0.0.1:6379> SMEMBERS xinjihe

1) "1"

127.0.0.1:6379>

J) sinter  集合1  集合2(jihe1:1 2 3 4;jihe2:2 3 4 5)

獲得兩個集合的交集

127.0.0.1:6379> sinter jihe1 jihe2

1) "2"

2) "3"

3) "4"

127.0.0.1:6379>

K) sinterstore  新集合  集合1  集合2

獲得集合1和集合2的交集,並把結果存入新集合

127.0.0.1:6379> SINTERSTORE xinjihe1 jihe1 jihe2

(integer) 3

127.0.0.1:6379> SMEMBERS xinjihe1

1) "2"

2) "3"

3) "4"

127.0.0.1:6379>

12) sunion  集合1  集合2

獲得指定集合的並集

127.0.0.1:6379> sunion jihe1 jihe2

1) "1"

2) "2"

3) "3"

4) "4"

5) "5"

127.0.0.1:6379>

13) sunionstore  新