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]
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
A)set 鍵 "值" 設定鍵值 若鍵已經存在會覆蓋
127.0.0.1:6379> set name machong
OK
127.0.0.1:6379>
B)get 鍵 得到鍵值
127.0.0.1:6379> get name
"machong"
127.0.0.1:6379>
C)setnx 鍵 值 當該鍵不存在時設定值,若鍵存在返回0表示失敗(防止覆蓋)
127.0.0.1:6379> setnx name ma
(integer) 0
127.0.0.1:6379> setnx name1 ma
(integer) 1
D)setex 鍵 [有效時間] 值
設定一個指定有效期的鍵和值(單位秒)。不寫有效時間則表示永久有效,等價於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功能。集合不允許有重複值。
A) sadd 鍵 值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 新