常用命令:
常用數(shù)據(jù)類型redis:
- String: 字符串
- Hash: 散列
- List: 列表
- Set: 集合
- Sorted Set: 有序集合
簡(jiǎn)介:
Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
支持?jǐn)?shù)據(jù)持久化,可以將內(nèi)存重的數(shù)據(jù)保存到磁盤中,重啟時(shí)候可以再次進(jìn)行加載使用
支持類型豐富,string - list - hash - set - Ordered Sets 二進(jìn)制案例
原子性-redis所有的操作都是原子性的,要么成功執(zhí)行要么完全失敗,單個(gè)操作是原子性的,多個(gè)操作也支持事務(wù),用multi和exec指令包起來
Redis不僅僅支持簡(jiǎn)單的key-value類型的數(shù)據(jù)谒获,同時(shí)還提供list平挑,set安拟,zset癞志,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)锣笨。
Redis支持?jǐn)?shù)據(jù)的備份驻啤,即master-slave模式的數(shù)據(jù)備份菲驴。
key 相關(guān)命令:
set test bb // 生成 key:test val:bb 的值
127.0.0.1:6379[5]> dump test
"\x00\x02bb\x06\x00\x8aa\xb7\xdaa\xe7\xa18" //返回序列化的值
--------------------------------------------
127.0.0.1:6379[5]> exists teset
(integer) 0
127.0.0.1:6379[5]> exists test //判斷key是否存在,存在為1否則為0
(integer) 1
--------------------------------------------
127.0.0.1:6379[5]> expire test 10 //為給定 key 設(shè)置過期時(shí)間骑冗,以秒計(jì)
(integer) 1
127.0.0.1:6379[5]> get test
"bb"
127.0.0.1:6379[5]> get test
--------------------------------------------
127.0.0.1:6379[5]> expireat test 1999999999 //為給定 key 設(shè)置過期時(shí)間赊瞬,用unix時(shí)間戳
--------------------------------------------
PEXPIRE key milliseconds
127.0.0.1:6379[5]> pexpire test 10000 //設(shè)置 key 的過期時(shí)間以毫秒計(jì)
(integer) 1
--------------------------------------------
keys pattern
127.0.0.1:6379[5]> keys *a*
1) "aa"
--------------------------------------------
ttl 返回key的生序時(shí)間以秒計(jì) pttl為毫秒
127.0.0.1:6379[5]> ttl aa //key存在并且有設(shè)置有效期返回剩余時(shí)間
(integer) 432851313
127.0.0.1:6379[5]> ttl bb//key不存在返回-2
(integer) -2
127.0.0.1:6379[5]> ttl cc//key 存在并且永久有效返回-1
(integer) -1
--------------------------------------------
RANDOMKEY 返回隨機(jī)key先煎,當(dāng)數(shù)據(jù)庫為空的時(shí)候返回nil
--------------------------------------------
rename 改名,改名成功返回ok, 名字相同或者old_key_name 不存在返回error,如果new_key_name已經(jīng)存在會(huì)覆蓋
renamenx 改名成功返回1, 名字已經(jīng)存在返回0 不會(huì)修改成功
--------------------------------------------
type key //返回key的數(shù)據(jù)類型
127.0.0.1:6379[5]> lpush tt hello
(integer) 1
127.0.0.1:6379[5]> type tt
list
字符串string相關(guān)操作:
SET key value //存儲(chǔ)鍵值對(duì)aa=>bb
GET key //返回 key 的值,如果 key 不存在時(shí)巧涧,返回 nil薯蝎。 如果 key 不是字符串類型,那么返回一個(gè)錯(cuò)誤
--------------------------------------------
GETRANGE KEY 0 3//命令用于獲取存儲(chǔ)在指定 key 中字符串的子字符串谤绳。字符串的截取范圍由 start 和 end 兩個(gè)偏移量決定(包括 start 和 end 在內(nèi))
127.0.0.1:6379[5]> set kk 123456789
OK
127.0.0.1:6379[5]> getrange kk 0 3
"1234"
--------------------------------------------
GETSET KEY //返回給定 key 的舊值占锯。 當(dāng) key 沒有舊值時(shí),即 key 不存在時(shí)缩筛,返回 nil 消略。
127.0.0.1:6379[5]> get aa
"2"
127.0.0.1:6379[5]> getset aa opop
"2"
127.0.0.1:6379[5]> get opop
(nil)
127.0.0.1:6379[5]> get aa
"opop"
127.0.0.1:6379[5]> getset gg oop
(nil)
--------------------------------------------
SETEX Redis Setex 命令為指定的 key 設(shè)置值及其過期時(shí)間。如果 key 已經(jīng)存在瞎抛, SETEX 命令將會(huì)替換舊的值艺演。
127.0.0.1:6379[5]> setex testaa 20 valueB
OK
127.0.0.1:6379[5]> ttl testaa
(integer) 10
127.0.0.1:6379[5]> ttl testaa
(integer) 8
127.0.0.1:6379[5]> setex testaa 20 valueh
OK
127.0.0.1:6379[5]> ttl testaa
(integer) 18
--------------------------------------------
SETNX 命令在指定的 key 不存在時(shí),為 key 設(shè)置指定的值婿失。成功返回1 失敗返回0
127.0.0.1:6379[5]> get aa
"opop"
127.0.0.1:6379[5]> setnx aa oop
(integer) 0
127.0.0.1:6379[5]> setnx aab oop
(integer) 1
127.0.0.1:6379[5]> get aa
"opop"
127.0.0.1:6379[5]> get aab
"oop"
--------------------------------------------
SETRANGE KEY 0 VALUE //命令用指定的字符串覆蓋給定 key 所儲(chǔ)存的字符串值,覆蓋的位置從偏移量 offset 開始,返回被修改后的字符串長度
127.0.0.1:6379[5]> get kk
"123456789"
127.0.0.1:6379[5]> setrange kk 0 abc
(integer) 9
127.0.0.1:6379[5]> get kk
"abc456789"
--------------------------------------------
STRLEN 判斷字符串長度啄寡, 當(dāng) key 不存在時(shí)豪硅,返回 0。
127.0.0.1:6379[5]> strlen kk
(integer) 9
--------------------------------------------
Msetnx 當(dāng)所有 key 都成功設(shè)置挺物,返回 1 懒浮。 如果所有給定 key 都設(shè)置失敗(至少有一個(gè) key 已經(jīng)存在),那么返回 0 识藤。
127.0.0.1:6379[5]> msetnx ah 1 bh 1 ch 1
(integer) 1
127.0.0.1:6379[5]> msetnx ah 2 dh 2 fh 2
(integer) 0
--------------------------------------------
Incr 在指定key上+1砚著,返回值為+1完成后的值
Incrby 在指定key上+上指定的值
127.0.0.1:6379[5]> get aa
"211"
127.0.0.1:6379[5]> incrby aa 1000
(integer) 1211
Incrbyfloat 在指定key上+上指定的浮點(diǎn)型值,如果夠整數(shù)會(huì)自動(dòng)把0去掉
127.0.0.1:6379[5]> set aa 10.5
OK
127.0.0.1:6379[5]> get aa
"10.5"
127.0.0.1:6379[5]> incrbyfloat aa 0.21
"10.71"
127.0.0.1:6379[5]> incrbyfloat aa 0.29000000000
"11"
decr 減1痴昧,decrby 100 減少100稽穆,返回都是計(jì)算完成之后的數(shù)
127.0.0.1:6379[5]> decr aa
(integer) 10
127.0.0.1:6379[5]> decr aa
(integer) 9
127.0.0.1:6379[5]> decrby aa 5
(integer) 4
127.0.0.1:6379[5]> incr aa
(integer) 5
127.0.0.1:6379[5]> decr aa
(integer) 4
--------------------------------------------
Redis Append 命令用于為指定的 key 追加值。
如果 key 已經(jīng)存在并且是一個(gè)字符串赶撰, APPEND 命令將 value 追加到 key 原來的值的末尾舌镶。
如果 key 不存在, APPEND 就簡(jiǎn)單地將給定 key 設(shè)為 value 豪娜,就像執(zhí)行 SET key value 一樣餐胀。
127.0.0.1:6379[5]> decr aa
(integer) 4
127.0.0.1:6379[5]> apend aa uuy
127.0.0.1:6379[5]> append aa u
(integer) 2
127.0.0.1:6379[5]> get aa
"4u"
HASH的值
HDEL 刪除一個(gè)或者多個(gè)hashkey ,返回刪除key的數(shù)量
127.0.0.1:6379[5]> hset hash_test a 1
(integer) 1
127.0.0.1:6379[5]> hset hash_test b 2
(integer) 1
127.0.0.1:6379[5]> hset hash_test c 2
(integer) 1
127.0.0.1:6379[5]> hdel hash_test a b
(integer) 2
127.0.0.1:6379[5]> hkeys hash_test
1) "c"
------------------------------------------------------------------
HEXISTS 判斷hash表的key存不存在,存在返回1不存在返回0
127.0.0.1:6379[5]> hexists hash_test a
(integer) 0
127.0.0.1:6379[5]> hexists hash_test c
(integer) 1
------------------------------------------------------------------
HGET 獲取哈希表字段值瘤载,成功返回對(duì)應(yīng)的value 否灾,失敗返回nil
127.0.0.1:6379[5]> hget hash_test c
"2"
127.0.0.1:6379[5]> hget hash_test ca
(nil)
------------------------------------------------------------------
HGETALL 以列表list 形式 返回哈希表所有數(shù)據(jù),如果不存在返回一個(gè)空list
127.0.0.1:6379[5]> hgetall hash_test
1) "c"
2) "2"
3) "d"
4) "2000"
127.0.0.1:6379[5]> hgetall hash_test1
(empty list or set)
------------------------------------------------------------------
HINCRBY 在指定key上自增 value 鸣奔,value可以為負(fù)數(shù) 墨技,如若key不存在惩阶,會(huì)創(chuàng)建key,并且賦值為value 范圍為64位
127.0.0.1:6379[5]> hincrby hash_test c 1
(integer) 3
127.0.0.1:6379[5]> hincrby hash_test c 10
(integer) 13
127.0.0.1:6379[5]> hincrby hash_test ca 10
(integer) 10
127.0.0.1:6379[5]> hincrby hash_test cii 10
(integer) 10
127.0.0.1:6379[5]> hincrby hash_test cii -3
(integer) 7
------------------------------------------------------------------
HINCRBYFLOAT 在指定key上自增 value 健提,value可以為負(fù)數(shù) 琳猫,如若key不存在,會(huì)創(chuàng)建key
127.0.0.1:6379[5]> hincrbyfloat hash_test cii -6.09
"0.91"
127.0.0.1:6379[5]> hincrbyfloat hash_test ciio -6.09
"-6.09"
------------------------------------------------------------------
HKEYS 獲取哈希列表中所有的key 成功返回list私痹,不存在返回空list
127.0.0.1:6379[5]> hkeys hash_test
1) "c"
2) "d"
3) "ca"
4) "cii"
5) "ciio"
127.0.0.1:6379[5]> hkeys hash_test1
(empty list or set)
------------------------------------------------------------------
HLEN 返回哈希表中的字段數(shù)量,成功返回?cái)?shù)量脐嫂,失敗返回0
127.0.0.1:6379[5]> hlen hash_test
(integer) 5
127.0.0.1:6379[5]> hlen hash_test1
(integer) 0
------------------------------------------------------------------
HMGET 反對(duì)hash表中的多個(gè)key,如果key不存在返回nil
127.0.0.1:6379[5]> hmget hash_test c d ca
1) "13"
2) "2000"
3) "10"
127.0.0.1:6379[5]> hmget hash_test c d caa
1) "13"
2) "2000"
3) (nil)
------------------------------------------------------------------
HMSET 給hash表中多個(gè)字段賦值,會(huì)覆蓋原來的value
127.0.0.1:6379[5]> hmget hash_test c d caa
1) "13"
2) "2000"
3) (nil)
127.0.0.1:6379[5]> hmset hash_test c 1 d 100 caa 101
OK
127.0.0.1:6379[5]> hmget hash_test c d caa
1) "1"
2) "100"
3) "101"
------------------------------------------------------------------
HSET 當(dāng)hash表中紊遵,key不存在返回為1 账千,key已經(jīng)存在會(huì)覆蓋原值然后返回0
127.0.0.1:6379[5]> hget hash_test c
"100100"
127.0.0.1:6379[5]> hset hash_test c 1
(integer) 0
127.0.0.1:6379[5]> hset hash_test c1 1
(integer) 1
------------------------------------------------------------------
HSETNX 只有當(dāng)hash表中的key不存在時(shí),才會(huì)發(fā)生賦值操作暗膜,成功返回1 失敗返回0
127.0.0.1:6379[5]> hset hash_test c1 1
(integer) 1
127.0.0.1:6379[5]>
127.0.0.1:6379[5]> hsetnx hash_test c1 2
(integer) 0
127.0.0.1:6379[5]> hsetnx hash_test c2 2
(integer) 1
------------------------------------------------------------------
HVALS 返回hash表中的所有的值匀奏,成功返回所有value的list,失敗返回空list
127.0.0.1:6379[5]> hvals hash_test
1) "1"
2) "100"
3) "10"
4) "0.91"
5) "-6.09"
6) "101"
7) "1"
8) "2"
127.0.0.1:6379[5]> hvals hash_test1
(empty list or set)
LIST 列表命令
BLPOP 移除并且獲取列表的第一個(gè)元素,如果沒有列表沒用值学搜,等待n秒超時(shí)娃善,成功時(shí)返回值為列表名稱 和value ,失敗時(shí)返回 nil和超時(shí)等待時(shí)間
127.0.0.1:6379[5]> lpush list_test first
(integer) 1
127.0.0.1:6379[5]> lpush list_test second
(integer) 2
127.0.0.1:6379[5]> lpush list_test three
(integer) 3
127.0.0.1:6379[5]> blpop list_test 10
1) "list_test"
2) "three"
127.0.0.1:6379[5]> blpop list_test 10
1) "list_test"
2) "second"
127.0.0.1:6379[5]> blpop list_test 10
1) "list_test"
2) "first"
127.0.0.1:6379[5]> blpop list_test 10
(nil)
(10.09s)
------------------------------------------------------------------
BRPOP 移除并且返回列表的最后一個(gè)元素瑞佩,如果沒有值聚磺,會(huì)阻塞列表,直到等待n秒超時(shí)為止
127.0.0.1:6379[5]> lpush list_test first second three
(integer) 3
127.0.0.1:6379[5]> brpop list_test 10
1) "list_test"
2) "first"
127.0.0.1:6379[5]> brpop list_test 10
1) "list_test"
2) "second"
127.0.0.1:6379[5]> brpop list_test 10
1) "list_test"
2) "three"
127.0.0.1:6379[5]> brpop list_test 10
(nil)
(10.10s)
------------------------------------------------------------------
BRPOPLPUSH 返回列表的最后一個(gè)元素,插入到另外一個(gè)列表的頭部炬丸,如果沒有值瘫寝,會(huì)阻塞列表,直到等待n秒超時(shí)為止 ,成功返回獲取的元素值稠炬,失敗返回nil和等待超時(shí)時(shí)間
127.0.0.1:6379[5]> lpush list_test aa
(integer) 1
127.0.0.1:6379[5]> brpoplpush list_test list_test1 4
"aa"
127.0.0.1:6379[5]> brpoplpush list_test list_test1 4
(nil)
(4.07s)
------------------------------------------------------------------
LINDEX 按照索引返回列表中的數(shù)據(jù),也使用負(fù)數(shù)下標(biāo)焕阿,以 -1 表示列表的最后一個(gè)元素, -2 表示列表的倒數(shù)第二個(gè)元素首启,以此類推暮屡。 不移除值
127.0.0.1:6379[5]> lpush list_test first second three four five six seven eight nine ten
(integer) 10
127.0.0.1:6379[5]> lindex list_test 0
"ten"
127.0.0.1:6379[5]> lindex list_test -2 -4
(error) ERR wrong number of arguments for 'lindex' command
127.0.0.1:6379[5]> lindex list_test -2
"second"
127.0.0.1:6379[5]> lindex list_test -3
"three"
127.0.0.1:6379[5]> lindex list_test 3
"seven"
------------------------------------------------------------------
LINSERT LIST BEFORE|AFTER KEY VALUE 插入
redis> RPUSH mylist "Hello"
(integer) 1
redis> RPUSH mylist "World"
(integer) 2
redis> LINSERT mylist BEFORE "World" "There"
(integer) 3
redis> LRANGE mylist 0 -1
1) "Hello"
2) "There"
3) "World"
redis>
------------------------------------------------------------------
LPOP 從頭部獲取元素 ,
LPUSH從頭部插入一個(gè)或者多個(gè)元素, 插入成功時(shí)候返回列表長度
LPUSHX在一個(gè)已經(jīng)存在的頭部插入一個(gè)或者多個(gè)元素 毅桃,插入成功時(shí)返回列表長度
LRANGE 返回列表數(shù)據(jù)范圍,0從頭開始,-1為從尾部開始第一個(gè)元素
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "a"
2) "a"
3) "a"
4) "nine"
5) "eight"
6) "seven"
7) "six"
8) "five"
9) "four"
127.0.0.1:6379[5]> lrange list_test3 0 -1
------------------------------------------------------------------
LREM NAME COUNT VALUE 從列表中移除指定value的count 個(gè)元素栽惶,成功返回移除元素的數(shù)量
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "a"
3) "b"
4) "a"
5) "b"
6) "a"
7) "nine"
8) "eight"
9) "seven"
10) "five"
11) "four"
127.0.0.1:6379[5]>
127.0.0.1:6379[5]>
127.0.0.1:6379[5]> lrem list_test 1 a
(integer) 1
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "b"
3) "a"
4) "b"
5) "a"
6) "nine"
7) "eight"
8) "seven"
9) "five"
10) "four"
127.0.0.1:6379[5]> lrem list_test -1 a
(integer) 1
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "b"
3) "a"
4) "b"
5) "nine"
6) "eight"
7) "seven"
8) "five"
9) "four"
------------------------------------------------------------------
LSET 通過索引來更改數(shù)據(jù)的值,成功返回ok疾嗅,失敗或者越界返回error
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "b"
3) "a"
4) "b"
5) "nine"
6) "eight"
7) "seven"
8) "five"
9) "four"
127.0.0.1:6379[5]> lset list_test 0 c
OK
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "c"
2) "b"
3) "a"
4) "b"
5) "nine"
6) "eight"
7) "seven"
8) "five"
9) "four"
127.0.0.1:6379[5]> lset list_test 10 c
(error) ERR index out of range
127.0.0.1:6379[5]> lset list_test5 0 c
(error) ERR no such key
------------------------------------------------------------------
LTRIM 刪除list外厂,只保留指定區(qū)間 ,包含指定區(qū)間兩個(gè)臨界點(diǎn)
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "c"
2) "b"
3) "a"
4) "b"
5) "nine"
6) "eight"
7) "seven"
8) "five"
9) "four"
127.0.0.1:6379[5]> ltrim list_test 3 -3
OK
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "nine"
3) "eight"
4) "seven"
------------------------------------------------------------------
RPOP 移除列表最后一個(gè)元素
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "nine"
3) "eight"
4) "seven"
127.0.0.1:6379[5]>
127.0.0.1:6379[5]>
127.0.0.1:6379[5]> rpop list_test
"seven"
127.0.0.1:6379[5]> lrange list_test 0 -1
1) "b"
2) "nine"
3) "eight"
------------------------------------------------------------------
RPUSH 往列表最后追加元素 執(zhí)行 成功后,返回列表的長度,列表不存在會(huì)被創(chuàng)建
rpushx 往列表最后追加元素 執(zhí)行 成功后代承,返回列表的長度,列表不存在會(huì)返回0
set集合 特性:redis的set是一個(gè)string的無序集合汁蝶。集合成員是唯一的,這就意味著集合中不能出現(xiàn)相同的元素 redis的集合是通過hash表來實(shí)現(xiàn)的,所以添加掖棉、刪除墓律、查找的復(fù)雜度都是O(1),結(jié)合最大的元素是2的32次方 -1
SADD 插入一個(gè)或者多個(gè)集合元素,成功返回插入新元素?cái)?shù)量
127.0.0.1:6379[5]> sadd set_test a b c d a e f
(integer) 6
127.0.0.1:6379[5]> sadd set_test a
(integer) 0
------------------------------------------------------------------
SCARD 返回集合中的元素?cái)?shù)量
127.0.0.1:6379[5]> scard set_test
(integer) 6
------------------------------------------------------------------
SDIFF 返回前一個(gè)集合 和后一個(gè)集合的差集幔亥,只返回前一個(gè)集合的差集key
127.0.0.1:6379[5]> sadd set_test2 a b c
(integer) 3
127.0.0.1:6379[5]> sdiff set_test set_test2
1) "e"
2) "d"
3) "f"
SINTER 返回前一個(gè)集合 和后一個(gè)集合的交集耻讽,只返回前一個(gè)集合的交集key
SDIFFSTRORE 生成一個(gè)新的集合 保存前一個(gè)集合 和后一個(gè)集合的差集
SINTERSTORE 生成一個(gè)新的集合 保存前一個(gè)集合 和后一個(gè)集合的交集
------------------------------------------------------------------
SISMEMBER 判斷一個(gè)元素是否在集合內(nèi) 成功返回1 失敗返回0
127.0.0.1:6379[5]> sismember set_test a
(integer) 1
127.0.0.1:6379[5]> sismember set_test ab
(integer) 0
------------------------------------------------------------------
SMEMBERS key 返回集合中的所有成員
127.0.0.1:6379[5]> smembers set_test
1) "f"
2) "e"
3) "c"
4) "d"
5) "a"
6) "b"
------------------------------------------------------------------
SMOVE 移動(dòng)集合元素到另外一個(gè)集合中, 如果目標(biāo)結(jié)合不存在會(huì)被創(chuàng)建,如果移動(dòng)成功返回1 帕棉,如果移動(dòng)元素失敗返回0 针肥, 目標(biāo)集合元素存不存在都不影響返回
127.0.0.1:6379[5]> smembers set_test
1) "e"
2) "c"
3) "d"
4) "a"
5) "b"
127.0.0.1:6379[5]> sadd test_xx d
(integer) 1
127.0.0.1:6379[5]> smove set_test test_xx d
(integer) 1
127.0.0.1:6379[5]> smembers set_test
1) "e"
2) "c"
3) "a"
4) "b"
127.0.0.1:6379[5]> smembers test_xx
1) "d"
2) "f"
------------------------------------------------------------------
SPOP 隨機(jī)移除并返回集合中的一個(gè)元素
127.0.0.1:6379[5]> spop set_test
"b"
------------------------------------------------------------------
SRANDMEMBER 返回一個(gè)或者多個(gè)元素,但是不移除
127.0.0.1:6379[5]> srandmember set_test 2
1) "e"
2) "a"
127.0.0.1:6379[5]> srandmember set_test 2
1) "e"
2) "c"
------------------------------------------------------------------
SREM 刪除一個(gè)或者多個(gè)元素香伴,返回成功刪除元素?cái)?shù)量
127.0.0.1:6379[5]> srem set_test e c
(integer) 0
127.0.0.1:6379[5]> smembers set_test
1) "a"
127.0.0.1:6379[5]> srem set_test a k l
(integer) 1
------------------------------------------------------------------