Redis是一個Key-Value的儲存系統,使用ANSI C語言編寫。 key的型別是字串。【相關推薦:Redis視訊教學】
value的資料型別8種資料型別:
常見資料型別
string字串型別
list列表型別
set集合型別
sortedset(zset)有序集合型別
hash型別
不常見資料型別
bitmap點陣圖型別
geo地理位置型別
stream型別
注意
Redis中命令是忽略大小寫,(set SET),key是不忽略大小寫的 (NAME name)
Redis的String能表達3種值的型別:字串、整數、浮點數 100.01 是個六位的串
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
set | set key value | 賦值 |
get | get key | 取值 |
getset | getset key value | 取值並賦值 |
mset | MSET key1 value1 key2 value2 .. keyN valueN | 設定多個 key 的值為各自對應的 value。 |
mget | MGET KEY1 KEY2 .. KEYN | 返回所有(一個或多個)給定 key 的值 |
EXPIRE | EXPIRE key seconds | 設定一個鍵的過期時間(秒) |
append | append key value | 向尾部追加值 |
strlen | strlen key | 獲取字串長度 |
setnx | setnx key value | 當value不存在時採用賦值 set key value NX PX 3000 原子操作,px 設定毫秒數 |
incr | incr key | 遞增數位 |
incrby | incrby key increment | 增加指定的整數 |
decr | decr key | 遞減數位 |
decrby | decrby key decrement | 減少指定的整數 |
1、物件快取
2、單值快取
3、incr用於樂觀鎖 incr:遞增數位,可用於實現樂觀鎖 watch(事務)
4、setnx用於分散式鎖 當value不存在時採用賦值,可用於實現分散式鎖
5、計數器
6、Web叢集session共用
dockerRedis:0>keys * dockerRedis:0>append testName 2 "1" dockerRedis:0>exists testName "1" dockerRedis:0>append testName " 1234" "6" dockerRedis:0>get testName "2 1234" dockerRedis:0>set testName1 "testName1" "OK" dockerRedis:0>get testName1 "testName1" dockerRedis:0>getset testName2 "testName2" null dockerRedis:0>get testName2 "testName2" dockerRedis:0>strlen testName "6" dockerRedis:0>set incrTest "10" "OK" dockerRedis:0>incr incrTest "11" dockerRedis:0>get incrTest "11" dockerRedis:0>decr incrTest "10" dockerRedis:0>decrby incrTest 5 "5" dockerRedis:0>mset set01 1 set02 2 set03 3 "OK" dockerRedis:0>mget set01 set02 set03 1) "1" 2) "2" 3) "3"
list列表型別可以儲存有序、可重複的元素獲取頭部或尾部附近的記錄是極快的 list的元素個數最多為2^32-1個(40億)
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
lpush | lpush key v1 v2 v3 ... | 從左側插入列表 |
lpop | lpop key | 從列表左側取出 |
rpush | rpush key v1 v2 v3 ... | 從右側插入列表 |
rpop | rpop key | 從列表右側取出 |
lpushx | lpushx key value | 將值插入到列表頭部 |
blpop | blpop key timeout | 從列表左側取出,當列表為空時阻塞,可以設定最大阻塞時間,單位為秒 |
llen | llen key | 獲得列表中元素個數 |
lrange | lrange key start end | 返回列表中指定區間的元素,區間通過start和end指定 |
lset | lset key index value | 將列表index位置的元素設定成value的值 |
rpoplpush | rpoplpush key1 key2 | 從key1列表右側彈出並插入到key2列表左側 |
rpushx | rpushx key | 將值插入到列表尾部 value |
brpop | blpop key | 從列表右側取出,當列表為空時阻塞,可以設定最大阻塞時 timeout 間,單位為秒 |
lindex | lindex key value | 獲得列表中下標為index的元素 index從0開始 index |
ltrim | ltrim key start end | 對列表進行修剪,只保留start到end區間 end |
brpoplpush | brpoplpush | 從key1列表右側彈出並插入到key2列表左側,會阻塞 key1 key2 |
linsert | linsert key BEFORE/AFTER pivot value | 將value插入到列表,且位於值pivot之前或之後 |
1、Stack(棧)=LPUSH + LPOP
2、Queue(佇列)=LPUSH + RPOP
3、Blocking MQ(阻塞佇列)=LPUSH + BRPOP
4、使用者列表、商品列表、評論列表
Set:無序、唯一元素 集合中最大的成員數為 2^32 - 1
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
sadd | sadd key value1 value2 .... | 往集合key中存入元素,元素存在則忽略,若key不存在則新建 |
srem | srem key value1 value2 .... | 從集合key中刪除元素 |
smembers | smembers key | 獲得集合中所有元素 |
spop | spop key count | 從集合key中選出count個元素,元素從key中刪除 |
srandmember | srandmember key count | 從集合key中選出count個元素,元素不從key中刪除 |
scard | scard key | 獲取集合key的元素個數 |
sismember | sismember key member | 判斷member元素是否存在於集合key中 |
sinter | sinter key1 key2 key3 | 求多集合的交集 |
sdiff | sdiff key1 key2 key3 | 求多集合的差集 |
sunion | sunion key1 key2 key3 | 求多集合的並集 |
微信抽獎小程式
微博點贊、收藏、標籤
微博微信關注模型
電商商品篩選
SortedSet(ZSet) 有序集合: 元素本身是無序不重複的 每個元素關聯一個分數(score) 可按分數排序,分數可重複
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
zadd | zadd key score1 member1 score2 member2 ... | 往有序集合key中加入帶分值元素 |
zrem | zrem key mem1 mem2 .... | 從有序集合key中刪除元素 |
zcard | zcard key | 獲得有序集合中的元素數量 |
zcount | zcount key min max | 返回集合中score值在[min,max]區間 的元素數量 |
zincrby | zincrby key increment member | 為有序集合key中元素member的分值加上increment |
zscore | zscore key member | 返回有序集合key中元素member的分值 |
zrank | zrank key member | 獲得集合中member的排名(按分值從 小到大) |
zrange | zrange key start end | 正 序獲取有序集合key從start下標到stop下標的元素 |
zrevrank | zrevrank key member | 獲得集合中member的排名(按分值從 大到小) |
zrevrange | zrevrange key start end | 倒序獲取有序集合key從start下標到stop下標的元素 |
Redis hash是一個string型別的field和value的對映表,它提供了欄位和欄位值的對映。每個 hash 可以儲存 2^32-1鍵值對(40多億)。
優點
1、同類資料歸類整合儲存,方便資料管理
2、相比string操作消耗記憶體與cpu更小
3、相比string儲存更節省空間
缺點
1、過期功能不能使用在field上,只能用在key上
2、Redis叢集架構下不適合大規模使用
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
hset | hset key field value | 儲存一個雜湊表key的鍵值 |
hmset | hmset key field1 value1 field2 value2 | 在一個雜湊表key中儲存多個鍵值對 |
hget | hget key field | 檢視某個field是否存在 |
hmget | hmget key field1 field2 ... | 獲取一個欄位值 |
hsetnx | hsetnx key field value | 儲存一個不存在的雜湊表key的鍵值 |
hexists | hexists key filed | 判斷filed是否存在 |
hgetall | hgetall key | 獲取多個欄位值 |
hdel | hdel key field1 field2... | 刪除指定欄位 |
hincrby | hincrby key field increment | 指定欄位自增increment |
hlen | hlen key | 獲得欄位數量 |
物件快取
購物車操作
bitmap是進行位元運算的 通過一個bit位來表示某個元素對應的值或者狀態,其中的key就是對應元素本身。 bitmap本身會極大的節省儲存空間。
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
setbit | setbit key offset value | 設定key在offset處的bit值(只能是0或者 1)。 |
getbit | getbit key offset | 獲得key在offset處的bit值 |
bitcount | bitcount key | 獲得key的bit位為1的個數 |
bitpos | bitpos key value | 返回第一個被設定為bit值的索引值 |
bitop | bitop and[or/xor/not] destkey key [key ...] | 對多個key 進行邏輯運算後存入destkey 中 |
geo是Redis用來處理位置資訊的。在Redis3.2中正式使用。主要是利用了Z階曲線、Base32編碼和geohash演演算法
命令名稱 | 命令格式 | 命令描述 |
---|---|---|
geoadd | geoadd key 經度 緯度 成員名稱1 經度1 緯度1 成 員名稱2 經度2 緯度 2 ... | 新增地理座標 |
geopos | geopos key 成員名稱1 成員名稱2... | 返回成員經緯度 |
geodist | geodist key 成員1 成員2 單位 | 計算成員間距離 |
georadiusbymember | georadiusbymember key 成員 值單位 count 數 asc[desc] | 根據成員查詢附近的成員 |
geohash | geohash key 成員名稱1 成員名稱2... | 返回標準的 geohash串 |
1、記錄地理位置
2、計算距離
3、查詢"附近的人"
stream是Redis5.0後新增的資料結構,用於可持久化的訊息佇列。
幾乎滿足了訊息佇列具備的全部內容,包括:
每個Stream都有唯一的名稱,它就是Redis的key,首次使用 xadd 指令追加訊息時自動建立
訊息佇列的使用
更多程式設計相關知識,請存取:!!
以上就是深入解析Redis中的資料結構,聊聊應用場景的詳細內容,更多請關注TW511.COM其它相關文章!