通用命令
1.keys pattern
含義:查找所有符合給定模式(pattern)的key
keys * ? ? ? ? ? ? 遍歷所有key
keys he[h-l]*? ? 遍歷以he開(kāi)頭,第三個(gè)字符為h-l之間的所有key
keys ph?? ? ? ? ? ? ?代表一個(gè)字符
注意:keys命令一般不在生產(chǎn)環(huán)境中使用
生產(chǎn)環(huán)境的key比較多,keys這個(gè)命令是一個(gè)O(n)的命令
由于Redis是單線程的,這個(gè)命令的操作會(huì)阻塞其他操作
可以在從節(jié)點(diǎn)上執(zhí)行keys命令
使用SCAN命令代替keys命令
2.dbsize
含義:查找當(dāng)前數(shù)據(jù)庫(kù)的key的數(shù)量
3.exists key
含義:檢查給定的key是否存在
4.del key1 [key2...]
含義:在key存在時(shí)刪除key
5.expire key second
含義:為給定key設(shè)置過(guò)期時(shí)間,單位為秒
6. ttl key
含義:以秒為單位,返回給定key的剩余生存時(shí)間(TTL , time to live)
不存在key返回-2
無(wú)過(guò)期時(shí)間的key返回-1
7.persist key
含義:移除key的過(guò)期時(shí)間,key將持久保存
8.type key
含義:返回key所存儲(chǔ)的值的類(lèi)型
不存在的key返回none
String數(shù)據(jù)類(lèi)型
String-結(jié)構(gòu)
結(jié)構(gòu):Key-Value對(duì)
Value:可以是字符串、數(shù)字,也可以是二進(jìn)制數(shù)組
限制:Value最大值為512MB
String-常用命令
1.get? key
含義:獲取指定key的值
2.set key value
含義:設(shè)置指定key的值
3.incr key
含義:將key中存儲(chǔ)的數(shù)字值增一
4.incrby key increment
含義:將key所存儲(chǔ)的數(shù)字值加上給定的增量
5.decr key
含義:將key中存儲(chǔ)的數(shù)字值減一
6.decrby key decrement
含義:將key所存儲(chǔ)的數(shù)字值減去給定的減量
7.setnx key value
含義:只有當(dāng)key不存在時(shí)才設(shè)置key的值
8.set key value nx
含義:與⑦相同,只有當(dāng)key不存在時(shí)才設(shè)置key的值
###9.setex key second value
含義:設(shè)置指定key的值,同時(shí)設(shè)置該key的過(guò)期時(shí)間,單位為秒
10.set key second value ex
含義:與⑨相同,設(shè)置指定key的值,同時(shí)設(shè)置該key的過(guò)期時(shí)間,單位為秒
11.set key value xx
含義:只有key存在時(shí)才設(shè)置key的值
12.mget key1 [key2...]
含義:獲取所有(一個(gè)或多個(gè))指定key的值
13.mset key1 value1 [key2 value2...]
含義:同時(shí)設(shè)置一個(gè)或多個(gè)key-value對(duì)
String-不太常用命令
1.getset key value
含義:將給定key的值設(shè)置為value,并返回key的舊值
2.append key value
含義:將value追加到舊值的末尾
3.strlen key
含義:返回key所存儲(chǔ)的字符串值的長(zhǎng)度
當(dāng)key不存在時(shí),返回0
一個(gè)中文占2個(gè)字節(jié)
時(shí)間復(fù)雜度為O(1),strlen在redis內(nèi)部不需要查詢(xún)整個(gè)字符串來(lái)得到長(zhǎng)度
4.incrbyfloat key increment
含義:將key所存儲(chǔ)的值加上給定的浮點(diǎn)值
5.getrange key start end
含義:返回key中字符串區(qū)間為[start,end]的子串,索引從0開(kāi)始
6.setrange key offset value
含義:用value擦?xí)采w指定key所存儲(chǔ)的字符串值,從偏移量offset開(kāi)始,索引從0開(kāi)始
key = content的時(shí)候,執(zhí)行setrange key 1 haha 之后,key=chahant
Hash數(shù)據(jù)類(lèi)型
Hash-常用命令
1.hget key field
含義:獲取存儲(chǔ)在哈希表中指定field的值
2.hset key field value
含義:將哈希表中指定field的值設(shè)置為value
3.hdel key field1 [field2...]
含義:刪除哈希表中一個(gè)或多個(gè)field
4.hexists key field
含義:判斷哈希表中,指定field是否存在
5.hlen key
含義:獲取哈希表中字段的數(shù)量
6.hmget key field1 [field2...]
含義:獲取哈希表中所有給定field的值
7.hmset key field1 value1 [field2 value2...]
含義:同時(shí)將一個(gè)或多個(gè)field-value對(duì)設(shè)置到哈希表中
8.hincrby key fiel increment
含義:為哈希表中指定field的值加上一個(gè)整型增量
9.hgetall key
含義:獲取哈希表中所有字段和值
時(shí)間復(fù)雜度為O(n),不建議使用
10.hkeys key
含義:獲取哈希表中的所有字段
時(shí)間復(fù)雜度為O(n),不建議使用
11.hvals key
含義:獲取哈希表中的所有值
時(shí)間復(fù)雜度為O(n),不建議使用
12.hsetnx key field value
含義:只有當(dāng)哈希表中field不存在時(shí),才設(shè)置該field的值
13.hincrbyfloat key field increment
含義:為哈希表中指定field的值加上一個(gè)浮點(diǎn)數(shù)增量
List數(shù)據(jù)類(lèi)型
List-結(jié)構(gòu)
列表:有序、可以有重復(fù)元素
索引相關(guān)知識(shí)
索引從左往右,從0開(kāi)始逐個(gè)增大? ? ? 0? ? ? 1? ? ? 2? ? ? 3? ? ? 4? ? ? 5
索引從右往左,從-1開(kāi)始逐個(gè)減小? ? -6? ? -5? ? -4? ? -3? ? ? -2? ? -1? ?
List-常用命令
1.rpush key value1 [value2...]
含義:在列表后側(cè)添加一個(gè)或多個(gè)值
2.lpush key value1 [value2...]
含義:在列表左側(cè)添加一個(gè)或多個(gè)值
3.linsert key before/after value newValue
含義:在列表指定的value前/后插入newValue,時(shí)間復(fù)雜度為O(n)
4.lpop key
含義:從列表左側(cè)彈出一個(gè)值
5.rpop key
含義:從列表右側(cè)彈出一個(gè)值
6.lrem key count value
含義:根據(jù)count值,從列表中刪除值為value的項(xiàng),時(shí)間復(fù)雜度為O(n)
count > 0 時(shí),從左往右遍歷,刪除最多count個(gè)與value相等的值
count < 0 時(shí),從右往左遍歷,刪除最多Math.abs(count)個(gè)與value相等的值
count = 0 時(shí),刪除所有與value相等的值
7.ltrim key start end
含義:對(duì)一個(gè)列表進(jìn)行修剪,只保留指定區(qū)間內(nèi)的元素,不在區(qū)間內(nèi)的元素都將被刪除,時(shí)間復(fù)雜度為O(n)
8.lrange key start end
含義:獲取列表指定索引范圍的所有元素,時(shí)間復(fù)雜度為O(n)
9.lindex key index
含義:獲取列表指定索引的元素,時(shí)間復(fù)雜度為O(n)
10.llen key
含義:獲取列表長(zhǎng)度,時(shí)間復(fù)雜度為O(1)
11.lset key index newValue
含義:設(shè)置列表指定索引的值為newValue,時(shí)間復(fù)雜度為O(n)
注意:
必須存在這個(gè)值才能設(shè)置成功,否則會(huì)報(bào)錯(cuò)
12.blpop key timeout
含義:移除并獲取列表左邊第一個(gè)元素,如果列表沒(méi)有元素會(huì)阻塞直到等待超時(shí)或可彈出元素為止
timeout單位為秒,timeout=0時(shí)不阻塞
13.brpop key timeout
含義:移除并獲取列表右邊第一個(gè)元素,如果列表沒(méi)有元素會(huì)阻塞直到等待超時(shí)或可彈出元素為止
timeout單位為秒,timeout=0時(shí)不阻塞
Set數(shù)據(jù)類(lèi)型
Set-結(jié)構(gòu)
集合:無(wú)序、不能包含重復(fù)元素
Set-集合內(nèi)操作
1.sadd key memebr1 [member2...]
含義:向集合中添加一個(gè)或多個(gè)成員
2.srem key member1 [member2...]
含義:從集合中刪除一個(gè)或多個(gè)成員
3.scard key
含義:獲取集合中的元素個(gè)數(shù)
4.sismember key member
含義:判斷member元素是不是集合的成員
5.srandmember key count
含義:隨機(jī)從集合中取出count個(gè)成員
6.spop key
含義:隨機(jī)移除并返回集合中的一個(gè)成員
7.smembers key
含義:獲取集合中的所有成員
時(shí)間復(fù)雜度為O(n),不建議使用,類(lèi)似的操作可以使用SSCAN
Set-集合間操作
1.sdiff key1 [key2...]
含義:返回給定所有集合的差集
2.sdiffstore destKey key1 [key2...]
含義:計(jì)算給定所有集合的差集,并存入destKey
3.sinter key1 [key2...]
含義:返回給定所有集合的交集
4.sinterstore destKey key1 [key2...]
含義:計(jì)算給定所有集合的交集,并存入destKey
5.sunion key1 [key2...]
含義:返回給定所有集合的并集
6.sunionstore destKey key1 [key2...]
含義:計(jì)算給定所有集合的并集,并存入destKey
ZSet數(shù)據(jù)類(lèi)型
ZSet-結(jié)構(gòu)
有序集合:有序、不能包含重復(fù)元素
每個(gè)節(jié)點(diǎn)包含:score和value兩個(gè)屬性,根據(jù)score進(jìn)行排序
索引相關(guān)知識(shí)
索引從左往右,從0開(kāi)始逐個(gè)增大? ? ? 0? ? ? 1? ? ? 2? ? ? 3? ? ? 4? ? ? 5
索引從右往左,從-1開(kāi)始逐個(gè)減小? ? -6? ? -5? ? -4? ? -3? ? ? -2? ? -1? ?
ZSet-常用命令
1.zadd key score1 member1 [score2 member2...]
含義:向有序集合添加一個(gè)或多個(gè)成員,或者更新已存在成員的分?jǐn)?shù)
2.zrem key member1 [member2...]
含義:從有序集合中刪除一個(gè)或多個(gè)成員
3.zscore key member
含義:獲取有序集合中成員的分?jǐn)?shù)
4.zincrby key increment member
含義:對(duì)有序集合中指定成員的分?jǐn)?shù)加上增量increment
5.zcard key
含義:返回有序集合中元素的總個(gè)數(shù)
6.zrange key start end [withscores]
含義:通過(guò)索引返回有序集合中指定區(qū)間的成員信息
withscores 參數(shù),加上代表一并將score數(shù)據(jù)返回
時(shí)間復(fù)雜度:O(log(n) + m) , n=有序集合中的元素個(gè)數(shù),m=返回的總個(gè)數(shù)
###7.zrangebyscore key min max [withscores][limit]
含義:通過(guò)score返回有序集合中指定分?jǐn)?shù)區(qū)間的成員信息
withscores 參數(shù),加上代表一并將score數(shù)據(jù)返回
limit參數(shù),加上代表限制返回多少條數(shù)據(jù)
時(shí)間復(fù)雜度:O(log(n) + m) , n=有序集合中的元素個(gè)數(shù),m=返回的總個(gè)數(shù)
###8.zscore key min max
含義:返回有序集合中指定分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù)
時(shí)間復(fù)雜度:O(log(n) + m) , n=有序集合中的元素個(gè)數(shù),m=指定分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù)
9.zremrangebyscore key min max
含義:刪除有序集合中指定分?jǐn)?shù)區(qū)間的所有成員
時(shí)間復(fù)雜度:O(log(n) + m) , n=有序集合中的元素個(gè)數(shù),m=指定分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù)
10.zremrangebyrank key start end
含義:刪除有序集合中給定索引區(qū)間的所有成員
時(shí)間復(fù)雜度:O(log(n) + m) , n=有序集合中的元素個(gè)數(shù),m=指定索引范圍內(nèi)的元素個(gè)數(shù)
String VS Hash
相似的API
StringHash
gethget
set setnxhset hsetnx
delhdel
incrbyhincrby
mget msethmget hmset
保存對(duì)象的三種方式與優(yōu)缺點(diǎn)
方式一:采用string,將整個(gè)對(duì)象進(jìn)行序列化,設(shè)計(jì)Key為對(duì)象的業(yè)務(wù)ID
方式二:采用string,設(shè)計(jì)Key為對(duì)象的業(yè)務(wù)ID+屬性名,對(duì)各個(gè)屬性分散存儲(chǔ)
方式三:采用hash,設(shè)計(jì)Key為對(duì)象的業(yè)務(wù)ID,屬性名為field
優(yōu)點(diǎn)缺點(diǎn)
方式一訪問(wèn)Redis編程簡(jiǎn)單相比方式二比較節(jié)約內(nèi)存序列化開(kāi)銷(xiāo)修改屬性需要操作整個(gè)數(shù)據(jù)
方式二Redis數(shù)據(jù)直觀可查可以方便更新屬性?xún)?nèi)存占用較大key較為分散
方式三Redis數(shù)據(jù)直觀可查比起方式二比較節(jié)約內(nèi)存可以方便更新屬性訪問(wèn)Redis編碼稍微比較復(fù)雜TTL不好控制