String 結構 結構:Key Value對 Value:可以是字元串、數字,也可以是二進位數組 限制:Value最大值為512MB String 常用命令 1.get key • 含義:獲取指定key的值 2.set key value • 含義:設置指定key的值 3.incr key • 含 ...
String-結構
結構:Key-Value對
Value:可以是字元串、數字,也可以是二進位數組
限制:Value最大值為512MB
String-常用命令
1.get key
• 含義:獲取指定key的值
2.set key value
• 含義:設置指定key的值
3.incr key
• 含義:將key中存儲的數字值增一
4.incrby key increment
• 含義:將key所存儲的數字值加上給定的增量
5.decr key
• 含義:將key中存儲的數字值減一
6.decrby key decrement
• 含義:將key所存儲的數字值減去給定的減量
7.setnx key value
• 含義:只有當key不存在時才設置key的值
8.set key value nx
• 含義:與⑦相同,只有當key不存在時才設置key的值
9.setex key second value
• 含義:設置指定key的值,同時設置該key的過期時間,單位為秒
10.set key second value ex
• 含義:與⑨相同,設置指定key的值,同時設置該key的過期時間,單位為秒
11.set key value xx
• 含義:只有key存在時才設置key的值
12.mget key1 [key2...]
• 含義:獲取所有(一個或多個)指定key的值
13.mset key1 value1 [key2 value2...]
• 含義:同時設置一個或多個key-value對
String-不太常用命令
1.getset key value
• 含義:將給定key的值設置為value,並返回key的舊值
2.append key value
• 含義:將value追加到舊值的末尾
3.strlen key
• 含義:返回key所存儲的字元串值的長度
o 當key不存在時,返回0
o 一個中文占2個位元組
o 時間複雜度為O(1),strlen在redis內部不需要查詢整個字元串來得到長度
4.incrbyfloat key increment
• 含義:將key所存儲的值加上給定的浮點值
5.getrange key start end
• 含義:返回key中字元串區間為[start,end]的子串,索引從0開始
6.setrange key offset value
• 含義:用value擦書覆蓋指定key所存儲的字元串值,從偏移量offset開始,索引從0開始
o key = content的時候,執行setrange key 1 haha 之後,key=chahant
適用場景
分散式ID生成
頁面訪問次數統計
常用數據緩存
Hash數據類型
Hash-常用命令
1.hget key field
• 含義:獲取存儲在哈希表中指定field的值
2.hset key field value
• 含義:將哈希表中指定field的值設置為value
3.hdel key field1 [field2...]
• 含義:刪除哈希表中一個或多個field
4.hexists key field
• 含義:判斷哈希表中,指定field是否存在
5.hlen key
• 含義:獲取哈希表中欄位的數量
6.hmget key field1 [field2...]
• 含義:獲取哈希表中所有給定field的值
7.hmset key field1 value1 [field2 value2...]
• 含義:同時將一個或多個field-value對設置到哈希表中
8.hincrby key fiel increment
• 含義:為哈希表中指定field的值加上一個整型增量
9.hgetall key
• 含義:獲取哈希表中所有欄位和值
• 時間複雜度為O(n),不建議使用
10.hkeys key
• 含義:獲取哈希表中的所有欄位
• 時間複雜度為O(n),不建議使用
11.hvals key
• 含義:獲取哈希表中的所有值
• 時間複雜度為O(n),不建議使用
12.hsetnx key field value
• 含義:只有當哈希表中field不存在時,才設置該field的值
13.hincrbyfloat key field increment
• 含義:為哈希表中指定field的值加上一個浮點數增量
理解
相當於關係型資料庫 庫名 表名 數據關係
List數據類型
List-結構
列表:有序、可以有重覆元素
索引相關知識
索引從左往右,從0開始逐個增大 0 1 2 3 4 5
索引從右往左,從-1開始逐個減小 -6 -5 -4 -3 -2 -1
List-常用命令
1.rpush key value1 [value2...]
含義:在列表後側添加一個或多個值
2.lpush key value1 [value2...]
含義:在列表左側添加一個或多個值
3.linsert key before/after value newValue
• 含義:在列表指定的value前/後插入newValue,時間複雜度為O(n)
4.lpop key
• 含義:從列表左側彈出一個值
5.rpop key
含義:從列表右側彈出一個值
6.lrem key count value
含義:根據count值,從列表中刪除值為value的項,時間複雜度為O(n)
count > 0 時,從左往右遍歷,刪除最多count個與value相等的值
count < 0 時,從右往左遍歷,刪除最多Math.abs(count)個與value相等的值
count = 0 時,刪除所有與value相等的值
7.ltrim key start end
含義:對一個列表進行修剪,只保留指定區間內的元素,不在區間內的元素都將被刪除,時間複雜度為O(n)
8.lrange key start end
含義:獲取列表指定索引範圍的所有元素,時間複雜度為O(n)
9.lindex key index
含義:獲取列表指定索引的元素,時間複雜度為O(n)
10.llen key
• 含義:獲取列表長度,時間複雜度為O(1)
11.lset key index newValue
含義:設置列表指定索引的值為newValue,時間複雜度為O(n)
註意:
必須存在這個值才能設置成功,否則會報錯
12.blpop key timeout
含義:移除並獲取列表左邊第一個元素,如果列表沒有元素會阻塞直到等待超時或可彈出元素為止
timeout單位為秒,timeout=0時不阻塞
13.brpop key timeout
含義:移除並獲取列表右邊第一個元素,如果列表沒有元素會阻塞直到等待超時或可彈出元素為止
timeout單位為秒,timeout=0時不阻塞
應用場景
Set數據類型
Set-結構
集合:無序、不能包含重覆元素
Set-集合內操作
1.sadd key memebr1 [member2...]
• 含義:向集合中添加一個或多個成員
2.srem key member1 [member2...]
含義:從集合中刪除一個或多個成員
3.scard key
含義:獲取集合中的元素個數
4.sismember key member
含義:判斷member元素是不是集合的成員
5.srandmember key count
含義:隨機從集合中取出count個成員
6.spop key
含義:隨機移除並返回集合中的一個成員
7.smembers key
含義:獲取集合中的所有成員
時間複雜度為O(n),不建議使用,類似的操作可以使用SSCAN
Set-集合間操作
1.sdiff key1 [key2...]
含義:返回給定所有集合的差集
2.sdiffstore destKey key1 [key2...]
含義:計算給定所有集合的差集,並存入destKey
3.sinter key1 [key2...]
含義:返回給定所有集合的交集
4.sinterstore destKey key1 [key2...]
含義:計算給定所有集合的交集,並存入destKey
5.sunion key1 [key2...]
含義:返回給定所有集合的並集
6.sunionstore destKey key1 [key2...]
含義:計算給定所有集合的並集,並存入destKey
ZSet數據類型
ZSet-結構
有序集合:有序、不能包含重覆元素
每個節點包含:score和value兩個屬性,根據score進行排序
索引相關知識
索引從左往右,從0開始逐個增大 0 1 2 3 4 5
索引從右往左,從-1開始逐個減小 -6 -5 -4 -3 -2 -1
ZSet-常用命令
1.zadd key score1 member1 [score2 member2...]
含義:向有序集合添加一個或多個成員,或者更新已存在成員的分數
2.zrem key member1 [member2...]
含義:從有序集合中刪除一個或多個成員
3.zscore key member
含義:獲取有序集合中成員的分數
4.zincrby key increment member
含義:對有序集合中指定成員的分數加上增量increment
5.zcard key
含義:返回有序集合中元素的總個數
6.zrange key start end [withscores]
含義:通過索引返回有序集合中指定區間的成員信息
o withscores 參數,加上代表一併將score數據返回
時間複雜度:O(log(n) + m) , n=有序集合中的元素個數,m=返回的總個數
7.zrangebyscore key min max [withscores][limit]
含義:通過score返回有序集合中指定分數區間的成員信息
withscores 參數,加上代表一併將score數據返回
limit參數,加上代表限制返回多少條數據
時間複雜度:O(log(n) + m) , n=有序集合中的元素個數,m=返回的總個數
8.zscore key min max
含義:返回有序集合中指定分數範圍內的元素個數
時間複雜度:O(log(n) + m) , n=有序集合中的元素個數,m=指定分數範圍內的元素個數
9.zremrangebyscore key min max
含義:刪除有序集合中指定分數區間的所有成員
時間複雜度:O(log(n) + m) , n=有序集合中的元素個數,m=指定分數範圍內的元素個數
10.zremrangebyrank key start end
含義:刪除有序集合中給定索引區間的所有成員
時間複雜度:O(log(n) + m) , n=有序集合中的元素個數,m=指定索引範圍內的元素個數
String VS Hash
相似的API
String Hash
get hget
set setnx hset hsetnx
del hdel
incrby hincrby
mget mset hmget hmset
保存對象的三種方式與優缺點
方式一:採用string,將整個對象進行序列化,設計Key為對象的業務ID
方式二:採用string,設計Key為對象的業務ID+屬性名,對各個屬性分散存儲
方式三:採用hash,設計Key為對象的業務ID,屬性名為field
優點 缺點
方式一 訪問Redis編程簡單 相比方式二比較節約記憶體 序列化開銷 修改屬性需要操作整個數據
方式二 Redis數據直觀可查 可以方便更新屬性 記憶體占用較大 key較為分散
方式三 Redis數據直觀可查 比起方式二比較節約記憶體 可以方便更新屬性 訪問Redis編碼稍微比較複雜 TTL不好控制