Redis常用命令操作

Redis常用命令操作

1. 數據類型

  • string
  • hash
  • list
  • set
  • sortedset/zset

2. 操作命令

2.1 操作 string

2.1.1 string 基礎操作

添加/修改數據

set key value
示例:
127.0.0.1:6379> set username zhangsan
OK

獲取數據

get key
示例:
127.0.0.1:6379> get username
"zhangsan"    

刪除數據

del key
示例:
127.0.0.1:6379> del username
(integer) 1

判定性添加數據

setnx key value
示例:
127.0.0.1:6379> setnx username zhangsan
(integer) 1
127.0.0.1:6379> setnx username lisi
(integer) 0

添加/修改多個數據

mset key1 value1 key2 value2 …
示例:
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK

獲取多個數據

mget key1 key2 …
示例:
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

獲取數據字符個數(字符串長度)

strlen key
示例:
127.0.0.1:6379> strlen username
(integer) 8

127.0.0.1:6379> strlen k1
(integer) 2

追加信息到原始信息后部(如果原始信息存在就追加杀餐,否則新建)

append key value
示例:
127.0.0.1:6379> append username 1
(integer) 9
127.0.0.1:6379> get username
"zhangsan1"

127.0.0.1:6379> append password 123
(integer) 3
127.0.0.1:6379> get password
"123"

2.1.2 string 擴展操作

設置整形數值數據自增(默認自增1)

incr key
示例:
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3

設置整形數值數據增加指定整數值

語法:
incrby key increment
示例:
127.0.0.1:6379> incrby num 10
(integer) 13

設置數據數據增加指定小數值

語法:
incrbyfloat key increment
示例:
127.0.0.1:6379> incrbyfloat num 1.5
"14.5"

設置整形數值數據自減(默認自減1)

語法:
decr key
示例:
127.0.0.1:6379> set num2 10
OK
127.0.0.1:6379> decr num2
(integer) 9

設置設置整形數值數據減小指定值

語法:
decrby key decrement
示例:
127.0.0.1:6379> decrby num2 2
(integer) 7

設置數據具有指定的生命周期(支持自動過期)

1.單位為秒
語法: 
setex key seconds value
示例:
127.0.0.1:6379> setex code 10 abcd
OK
10秒內獲取
127.0.0.1:6379> get code
"abcd"
10秒后獲取
127.0.0.1:6379> get code
(nil)

2.單位為毫秒秒
語法: 
psetex key milliseconds value
使用方式一致弃榨,不再演示

2.2 操作 hash

2.2.1 hash 基礎操作

添加菱肖、修改數據

語法1-單值保存:
hset key field value
示例:
127.0.0.1:6379> hset user:001 name zhangsan
(integer) 1

語法2-批量保存:
hmset key field1 value1 field2 value2 …
示例:
127.0.0.1:6379> hmset user:001 password 123 age 18
OK

語法3-設置field的值,如果該field存在則不做任何操作:
hsetnx key field value
示例:
127.0.0.1:6379> hsetnx user:001 name lisi
(integer) 0

根據key和field獲取單個vlaue

語法:
hget key field
示例:
127.0.0.1:6379> hget user:001 name
"zhangsan"

根據key獲取所有的field和value

語法:
hgetall key
示例:
127.0.0.1:6379> hgetall user:001
1) "name"
2) "zhangsan"
3) "password"
4) "123"
5) "age"
6) "18"

刪除數據

語法:
hdel key field1 [field2 field3...]
示例:
127.0.0.1:6379> hdel user:001 name
(integer) 1

127.0.0.1:6379> hdel user:001 password age
(integer) 2

根據key獲取field的數量

語法:
hlen key
示例:
127.0.0.1:6379> hmset user:001 name zhangsan password 123 age 18
OK
127.0.0.1:6379> hlen user:001
(integer) 3

判斷指定field是否存在

語法:
hexists key field
示例:
127.0.0.1:6379> hexists user:001 name
(integer) 1
127.0.0.1:6379> hexists user:001 name111
(integer) 0

2.2.2 hash 擴展操作

根據key獲取所有的字段名field

語法:
hkeys key
示例:
127.0.0.1:6379> hkeys user:001
1) "name"
2) "password"
3) "age"

根據key獲取所有的字段值value

語法:
hvals key
示例:
127.0.0.1:6379> hvals user:001
1) "zhangsan"
2) "123"
3) "18"

設置指定字段的數值數據增加指定范圍的值

語法:
hincrby key field increment
hincrbyfloat key field increment
示例:
127.0.0.1:6379> hget user:001 age
"18"
127.0.0.1:6379> hincrby user:001 age 1
(integer) 19
127.0.0.1:6379> hincrby user:001 age -2
(integer) 17

2.3 操作list

2.3.1 list 基礎操作

添加數據

  • 從左側添加
語法:
lpush key value1 [value2 value3...]
示例:
127.0.0.1:6379> lpush list1 a b c
(integer) 3

當前數據為: c b a

  • 從右側添加
語法:
rpush key value1 [value2 value3...]
示例:
127.0.0.1:6379> rpush list1 d e f
(integer) 6

當前數據為: c b a d e f

獲取數據

  • 范圍獲取
語法:
lrange key start stop
示例1:
127.0.0.1:6379> lrange list1 0 -1
1) "c"
2) "b"
3) "a"
4) "d"
5) "e"
6) "f"
示例2:
127.0.0.1:6379> lrange list1 0 2
1) "c"
2) "b"
3) "a"
示例3:
127.0.0.1:6379> lrange list1 -3 -1
1) "d"
2) "e"
3) "f"

獲取規(guī)則:

  1. 從左到右舰蟆,索引分別為0、1声滥、2呜叫、3、4...

    如:c(0) b(1) a(2) d(3) e(4) f(5)

  2. 從右到左怠李,索引分別為 -1圾叼、-2、-3捺癞、-4...

    如:c(-6) b(-5) a(-4) d(-3) e(-2) f(-1)

  • 獲取指定索引的value
語法:
lindex key index
示例:
127.0.0.1:6379> lindex list1 0
"c"
127.0.0.1:6379> lindex list1 1
"b"
127.0.0.1:6379> lindex list1 -1
"f"
  • 移除并返回最左側或最右側的元素
語法:
lpop key
rpop key
示例:
127.0.0.1:6379> lpop list1
"c"
127.0.0.1:6379> rpop list1
"f"
  • 根據key獲取value的個數
語法:
llen key
示例:
127.0.0.1:6379> llen list1
(integer) 4

2.3.2 list 擴展操作

刪除指定key中指定數量的field

語法:
lrem key count value
示例:
127.0.0.1:6379> rpush list2 a b b b b c d d d d
(integer) 10
127.0.0.1:6379> lrem list2 4 b
(integer) 4
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "c"
3) "d"
4) "d"
5) "d"
6) "d"
127.0.0.1:6379> lrem list2 5 d
(integer) 4
127.0.0.1:6379> lrange list2 0 -1
1) "a"
2) "c"

規(guī)定時間內獲取并移除數據

語法:
blpop key1 [key2 key3...] timeout
brpop key1 [key2 key3...] timeout
示例:
127.0.0.1:6379> lpush a a1
(integer) 1
127.0.0.1:6379> lpush b b1
(integer) 1
127.0.0.1:6379> lpush c c1
(integer) 1
127.0.0.1:6379> blpop a b c 5
1) "a"
2) "a1"
127.0.0.1:6379> blpop a b c 5
1) "b"
2) "b1"
127.0.0.1:6379> blpop a b c 5
1) "c"
2) "c1"
127.0.0.1:6379> blpop a b c 5
(nil)
(5.76s)

最后一次沒有獲取到數據夷蚊,但是如果在等待的5秒中之內,另一個連接向 a b c 任意一個key中存入了value髓介,則可以獲取到數據惕鼓,操作如下:

  1. 在當前連接窗口中執(zhí)行指定時間內獲取命令,命令會處于等待狀態(tài)
127.0.0.1:6379> blpop a b c 20
|
  1. 打開一個新的連接唐础,20秒之內在新連接窗口中向a或b或c中存入數據
127.0.0.1:6379> lpush a a1
(integer) 1
  1. 窗口1會立馬獲取到向a中存入的數據
127.0.0.1:6379> blpop a b c 20
1) "a"
2) "a1"
(3.05s)

規(guī)定時間內取出一個list的尾部元素并添加到另一個list的頭部

語法:
brpoplpush source destination timeout
source:被移除的list
destination:要添加的list
示例:
127.0.0.1:6379> rpush list3 a b c
(integer) 3
127.0.0.1:6379> lrange list3 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> rpush list4 aa bb cc
(integer) 3
127.0.0.1:6379> lrange list4 0 -1
1) "aa"
2) "bb"
3) "cc"
127.0.0.1:6379> brpoplpush list3 list4 10
"c"
127.0.0.1:6379> lrange list3 0 -1
1) "a"
2) "b"
127.0.0.1:6379> lrange list4 0 -1
1) "c"
2) "aa"
3) "bb"
4) "cc"

2.4 操作 set

2.4.1 set 基礎操作

添加數據

語法:
sadd key member1 [member2]
示例:
127.0.0.1:6379> sadd set1 a a b c d
(integer) 4

獲取全部數據

語法:
smembers key
示例:
127.0.0.1:6379> smembers set1
1) "a"
2) "d"
3) "c"
4) "b"

刪除數據

語法:
srem key member1 [member2]
示例:
127.0.0.1:6379> srem set1 a b
(integer) 2
127.0.0.1:6379> smembers set1
1) "d"
2) "c"

獲取集合數據member的個數

語法:
scard key
示例:
127.0.0.1:6379> scard set1
(integer) 2

判斷集合中是否包含指定數據

語法:
sismember key member
示例:
127.0.0.1:6379> sismember set1 d
(integer) 1
127.0.0.1:6379> sismember set1 ddd
(integer) 0

隨機獲取集合中[指定數量]的數據

語法:
srandmember key [count]
示例:
127.0.0.1:6379> sadd set2 a b c d e f g h i
(integer) 9
127.0.0.1:6379> srandmember set2
"b"
127.0.0.1:6379> srandmember set2
"b"
127.0.0.1:6379> srandmember set2
"h"
127.0.0.1:6379> srandmember set2
"e"
127.0.0.1:6379>  
127.0.0.1:6379> srandmember set2 3
1) "f"
2) "e"
3) "h"
127.0.0.1:6379> srandmember set2 3
1) "d"
2) "c"
3) "i"
127.0.0.1:6379> srandmember set2 3
1) "e"
2) "h"
3) "g"

隨機移除并返回集合中的某個數據

語法:
spop key
示例:
127.0.0.1:6379> spop set2
"i"
127.0.0.1:6379> spop set2
"d"
127.0.0.1:6379> smembers set2
1) "a"
2) "h"
3) "f"
4) "b"
5) "e"
6) "g"
7) "c"

2.4.1 set 擴展操作

求多個集合的交箱歧、并矾飞、差集

  • 交集
語法:
sinter key1 [key2 …]  
示例:
127.0.0.1:6379> sadd s1 a b c d e f
(integer) 6
127.0.0.1:6379> sadd s2 a bb c dd e ff
(integer) 6
127.0.0.1:6379> sinter s1 s2
1) "c"
2) "a"
3) "e"
  • 并集
語法:
sunion key1 [key2 …]  
示例:
127.0.0.1:6379> sunion s1 s2
1) "f"
2) "dd"
3) "b"
4) "a"
5) "d"
6) "bb"
7) "e"
8) "c"
9) "ff"
  • 差集
語法:
sdiff key1 [key2 …]
示例:
127.0.0.1:6379> sdiff s1 s2
1) "f"
2) "d"
3) "b"
127.0.0.1:6379> sdiff s2 s1
1) "ff"
2) "dd"
3) "bb"

求多個集合的交、并呀邢、差集并存儲到指定集合中

語法:
交集: sinterstore destination key1 [key2 …]  
并集: sunionstore destination key1 [key2 …]  
差集: sdiffstore destination key1 [key2 …]
示例(以交集為例):
127.0.0.1:6379> smembers s3
(empty list or set)
127.0.0.1:6379> sinter s1 s2
1) "a"
2) "e"
3) "c"
127.0.0.1:6379> sinterstore s3 s1 s2
(integer) 3
127.0.0.1:6379> smembers s3
1) "e"
2) "a"
3) "c"

將指定數據從原始集合中移動到目標集合中

語法:
smove source destination member
示例:
127.0.0.1:6379> smembers s4
(empty list or set)
127.0.0.1:6379> smove s1 s4 a
(integer) 1
127.0.0.1:6379> smembers s4
1) "a"
127.0.0.1:6379> smembers s1
1) "e"
2) "d"
3) "c"
4) "f"
5) "b"

2.5 key 的操作

2.5.1 key 的基本操作

刪除指定key(根據key刪除任意類型數據)

語法:
del key
示例1-刪除string:
127.0.0.1:6379> set aa bb
OK
127.0.0.1:6379> get aa
"bb"
127.0.0.1:6379> del aa
(integer) 1
127.0.0.1:6379> get aa
(nil)
示例2-刪除hash:
127.0.0.1:6379> hset hash1 k1 v1
(integer) 1
127.0.0.1:6379> hgetall hash1
1) "k1"
2) "v1"
127.0.0.1:6379> del hash1
(integer) 1
127.0.0.1:6379> hgetall hash1
(empty list or set)

...其它數據類型同理...

判斷key是否存在

語法:
exists key
示例:
127.0.0.1:6379> set aaa bbb
OK
127.0.0.1:6379> exists aaa
(integer) 1
127.0.0.1:6379> exists bbb
(integer) 0

獲取key的類型

語法:
type key
示例:
127.0.0.1:6379> set mystring hellostring
OK
127.0.0.1:6379> hset myhash k1 v1
(integer) 1
127.0.0.1:6379> type mystring
string
127.0.0.1:6379> type myhash
hash

對list洒沦、set中的數值數據進行排序

語法:
sort key
sort key desc
示例:
127.0.0.1:6379> del list1
(integer) 0
127.0.0.1:6379> lpush list1 11 2 33 7 5 18
(integer) 6
127.0.0.1:6379> sort list1
1) "2"
2) "5"
3) "7"
4) "11"
5) "18"
6) "33"
127.0.0.1:6379> sort list1 desc
1) "33"
2) "18"
3) "11"
4) "7"
5) "5"
6) "2"

對list、set中的字符串數據進行排序

語法:
sort key alpha
sort key desc alpha
示例:
127.0.0.1:6379> del list2
(integer) 0
127.0.0.1:6379> lpush list2 a b c d
(integer) 4
127.0.0.1:6379> sort list2
(error) ERR One or more scores can't be converted into double
127.0.0.1:6379> sort list2 alpha
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> sort list2 desc alpha
1) "d"
2) "c"
3) "b"
4) "a"

重命名key

語法1-如果新的key已存在會先刪除新key然后在重命名:
rename key newkey
示例:
127.0.0.1:6379> del username
(integer) 0
127.0.0.1:6379> set username zhangsan
OK
127.0.0.1:6379> set username2 lisi
OK
127.0.0.1:6379> rename username username2
OK
127.0.0.1:6379> get username
(nil)
127.0.0.1:6379> get username2
"zhangsan"

語法2-如果新的key不存在則重命名:
renamenx key newkey
示例:
127.0.0.1:6379> set username3 wangwu
OK
127.0.0.1:6379> renamenx username2 username3
(integer) 0
127.0.0.1:6379> renamenx username2 username4
(integer) 1
127.0.0.1:6379> get username4
"zhangsan"

2.5.2 key 的擴展操作

獲取key的有效時間

語法1-獲取秒為單位的時效:
ttl key
語法2-獲取毫秒為單位的時效:
pttl key
示例:
127.0.0.1:6379> del username
(integer) 0
127.0.0.1:6379> set username zhangsan
OK
127.0.0.1:6379> ttl username
(integer) -1
127.0.0.1:6379> ttl username2
(integer) -2
127.0.0.1:6379> setex username3 30 wangwu
OK
127.0.0.1:6379> ttl username3
(integer) 21
127.0.0.1:6379> pttl username3
(integer) 15840

返回-1代表key沒有設置有效時間价淌,返回-2代表key不存在

為指定key設置有效期

語法:
expire key seconds
pexpire key milliseconds
示例:
127.0.0.1:6379> del hash1
(integer) 0
127.0.0.1:6379> hset hash1 k1 v1
(integer) 1
127.0.0.1:6379> ttl hash1
(integer) -1
127.0.0.1:6379> expire hash1 30
(integer) 1
127.0.0.1:6379> ttl hash1
(integer) 20

127.0.0.1:6379> del hash2
(integer) 1
127.0.0.1:6379> hset hash2 k2 v2
(integer) 1
127.0.0.1:6379> ttl hash2
(integer) -1
127.0.0.1:6379> pexpire hash2 30000
(integer) 1
127.0.0.1:6379> ttl hash2
(integer) 26
127.0.0.1:6379> pttl hash2
(integer) 21380

切換key從時效性轉換為永久性

語法:
persist key
示例:
127.0.0.1:6379> del username
(integer) 0
127.0.0.1:6379> setex username 60 zhangsan
OK
127.0.0.1:6379> ttl username
(integer) 55
127.0.0.1:6379> persist username
(integer) 1
127.0.0.1:6379> ttl username
(integer) -1

查找key

語法:
keys pattern
示例:
127.0.0.1:6379> del username
(integer) 1
127.0.0.1:6379> set username1 zhangsan1
OK
127.0.0.1:6379> set username2 zhangsan2
OK
127.0.0.1:6379> set username3 zhangsan3
OK
127.0.0.1:6379> keys *
1) "username3"
2) "username1"
3) "username2"
127.0.0.1:6379> keys username*
1) "username3"
2) "username1"
3) "username2"
127.0.0.1:6379> keys *3
1) "username3"

2.6 db 常用指令

2.6.1 存在的問題

redis在使用過程中申眼,伴隨著操作數據量的增加,會出現大量的數據以及對應的key蝉衣。這是key重名沖突的幾率就比較高括尸。要解決這個問題,除了我們在命名時盡量做到統(tǒng)一和規(guī)范以外病毡,redis 自身也提供了一個解決機制濒翻。

2.6.2 解決方式

redis為每個服務提供有16個數據庫,編號從0到15剪验,每個數據庫之間是相互獨立的肴焊。如果沒有進行過特殊設置,默認使用的是0號數據庫功戚。

2.6.3 db 基礎操作

切換數據庫

語法:
select index
示例:
select 1

2.6.4 db 擴展操作

數據移動

語法:
move key index
示例:
move username 1

統(tǒng)計當前db中key的數量

語法:
dbsize
示例:
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> dbsize
(integer) 1

清除數據

語法1-清除當前db中所有數據:
flushdb
語法2-清除所有db中的數據:
flushall
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末娶眷,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子啸臀,更是在濱河造成了極大的恐慌届宠,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乘粒,死亡現場離奇詭異豌注,居然都是意外死亡,警方通過查閱死者的電腦和手機灯萍,發(fā)現死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門轧铁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旦棉,你說我怎么就攤上這事齿风。” “怎么了绑洛?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵救斑,是天一觀的道長。 經常有香客問我真屯,道長脸候,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮运沦,結果婚禮上泵额,老公的妹妹穿的比我還像新娘。我一直安慰自己携添,他們只是感情好梯刚,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著薪寓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澜共。 梳的紋絲不亂的頭發(fā)上向叉,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音嗦董,去河邊找鬼母谎。 笑死,一個胖子當著我的面吹牛京革,可吹牛的內容都是我干的奇唤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼匹摇,長吁一口氣:“原來是場噩夢啊……” “哼咬扇!你這毒婦竟也來了?” 一聲冷哼從身側響起廊勃,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤懈贺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后坡垫,有當地人在樹林里發(fā)現了一具尸體梭灿,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年冰悠,在試婚紗的時候發(fā)現自己被綠了堡妒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡溉卓,死狀恐怖皮迟,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情的诵,我是刑警寧澤万栅,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站西疤,受9級特大地震影響烦粒,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一扰她、第九天 我趴在偏房一處隱蔽的房頂上張望兽掰。 院中可真熱鬧,春花似錦徒役、人聲如沸孽尽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杉女。三九已至,卻和暖如春鸳吸,著一層夾襖步出監(jiān)牢的瞬間熏挎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工晌砾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坎拐,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓养匈,卻偏偏與公主長得像哼勇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子呕乎,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容