您好,登錄后才能下訂單哦!
Redis基礎(chǔ)類型及常用操作、命令有哪些,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
概念:Redis是用C語(yǔ)言開(kāi)發(fā)的一個(gè)開(kāi)源的高性能鍵值對(duì)數(shù)據(jù)庫(kù)。
特征:
數(shù)據(jù)間沒(méi)有必然的聯(lián)系
內(nèi)部采用單線程機(jī)制進(jìn)行工作
高性能
多數(shù)據(jù)類型支持字符串類型 String列表類型 List散列類型 Map集合類型 Set有序集合類型 SortedSet
持久化支持
為熱點(diǎn)數(shù)據(jù)加速查詢;如:熱點(diǎn)商品、熱點(diǎn)新聞、熱點(diǎn)資訊等高訪問(wèn)量信息。
任務(wù)隊(duì)列;如:秒殺、搶購(gòu)、購(gòu)票等。
即時(shí)信息查詢;如:排行榜等。
時(shí)效性信息控制;如:驗(yàn)證碼、投票控制等。
分布式數(shù)據(jù)共享;如:分布式架構(gòu)中的session等。
消息隊(duì)列
分布式鎖
單個(gè)string類型的存儲(chǔ)空間為512MB
string基本操作
添加或修改數(shù)據(jù)
set key value
獲取數(shù)據(jù)
get key
刪除數(shù)據(jù)
del key
設(shè)置過(guò)期時(shí)間(默認(rèn)單位為秒)
expire key second
追加信息到初始value后邊
append key value
添加/修改多個(gè)數(shù)據(jù)
mset key1 value1 key2 value2...
獲取多個(gè)數(shù)據(jù)
mget key1 key2 ...
獲取字符串長(zhǎng)度
strlen key
設(shè)置key的生命周期 控制生命周期
setex key seconds value (秒) psetex key millisexxonds value (毫秒)
key的設(shè)置約定與數(shù)據(jù)庫(kù)中的表-主鍵-字段一一對(duì)應(yīng)表名主鍵名主鍵值字段名eg1orderid443523454nameeg2equireid435432543typeeg3newsid45435454title
存儲(chǔ)需求: 對(duì)一系列存儲(chǔ)的數(shù)據(jù)進(jìn)行編排,方便管理,典型應(yīng)用存儲(chǔ)對(duì)象信息
存儲(chǔ)結(jié)構(gòu):一個(gè)存儲(chǔ)空間存儲(chǔ)多個(gè)鍵值對(duì)數(shù)據(jù)
hash類型:底層使用哈希表結(jié)構(gòu)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)
hash存儲(chǔ)結(jié)構(gòu)優(yōu)化
如果field數(shù)量較少,存儲(chǔ)結(jié)構(gòu)優(yōu)化為類數(shù)組結(jié)構(gòu)
如果field數(shù)量較多,存儲(chǔ)結(jié)構(gòu)使用HashMap結(jié)構(gòu)
hash類型基本操作
添加/修改數(shù)據(jù)
hset key field value
獲取數(shù)據(jù)
hget key field hgetall key
刪除數(shù)據(jù)
hdel key field [field2 ...]
添加或刪除多個(gè)數(shù)據(jù)
hmset key field1 value1 field2 value2 ...
獲取多個(gè)數(shù)據(jù)
hmget key field1 field2 ...
獲取hash表中的字段的數(shù)量
hlen key
獲取hash表中是否存在指定的字段
hexists key field
獲取哈希表中所用的字段名或字段值
hkeys keyhvalues key
設(shè)置指定字段的數(shù)值數(shù)據(jù)增加指定范圍的值
hincrby key field increment hincrbyfloat key field increment
如果key值下的field存在則不做操作 不存在則添加進(jìn)去
hsetnx key field value
hash類型數(shù)據(jù)操作的注意事項(xiàng)
hash類型下的value只能存儲(chǔ)字符串,不允許存儲(chǔ)其他數(shù)據(jù)類型,不存在嵌套現(xiàn)象,如果數(shù)據(jù)未獲取到,對(duì)應(yīng)的值為(nil)
每個(gè)hash存儲(chǔ)的鍵值對(duì)上限為$$2^{32}-1$$個(gè)鍵值對(duì)
hash類型十分貼近對(duì)象的存儲(chǔ)形式,并且可以靈活刪除對(duì)象屬性。但hash設(shè)計(jì)初衷并不是為了存儲(chǔ)大量對(duì)象而設(shè)計(jì)的,切記不可濫用,更不可將hash作為對(duì)象列表使用
hgetall操作可以獲取全部屬性,如果內(nèi)部field過(guò)多,遍歷整體數(shù)據(jù)效率會(huì)很低,有可能會(huì)成為數(shù)據(jù)訪問(wèn)瓶頸
應(yīng)用場(chǎng)景
電商網(wǎng)站購(gòu)物車設(shè)計(jì)實(shí)現(xiàn)
基礎(chǔ)數(shù)據(jù)類型之:list
數(shù)據(jù)存儲(chǔ)需求:存儲(chǔ)多個(gè)數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)入存儲(chǔ)Jon關(guān)鍵的順序進(jìn)行區(qū)分
需要的存儲(chǔ)結(jié)構(gòu):一個(gè)存儲(chǔ)空間存儲(chǔ)多個(gè)數(shù)據(jù),并且數(shù)據(jù)可以體現(xiàn)進(jìn)入順序
list類型:保存多個(gè)數(shù)據(jù),底層使用雙向鏈表存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)
list類型是雙向鏈表存儲(chǔ)的
list基本操作
添加/修改數(shù)據(jù)
lpush key value1 value2 [value3] ... //從list鏈表左側(cè)添加 rpush key value1 value2 [value3] ... //從list右側(cè)添加
獲取數(shù)據(jù)
lrange key start stop //指定鏈表起始結(jié)束位置中的value //在獲取未知長(zhǎng)的的list類型的時(shí)候,想查看所有的value可以使用 -1表示倒數(shù)第一個(gè) lrange key start -1 lindex key index //獲取鏈表中指定位置的值 llen key //獲取鏈表的長(zhǎng)度
獲取并移除數(shù)據(jù)
lpop key rpop key
規(guī)定時(shí)間內(nèi)獲取并移除數(shù)據(jù)(阻塞式數(shù)據(jù)獲取)
blpop key1 [key2] timeout //指定時(shí)間內(nèi)取出并移除key值對(duì)應(yīng)的value,若timeout超時(shí)仍未取出則返回空值(nil) 若本來(lái)沒(méi)有 其他客戶端在等待的時(shí)候添加了這個(gè)key的value則做操作 任務(wù)隊(duì)列 brpop key1 [key2] timeout
移除指定數(shù)據(jù)
lrem key count value
list類型數(shù)據(jù)操作注意事項(xiàng)
list中保存的數(shù)據(jù)都是string類型的,數(shù)據(jù)總?cè)萘坑邢拮疃?2^32-1個(gè)元素
list具有索引概念,但操作數(shù)據(jù)時(shí)通常以隊(duì)列的形式進(jìn)行入隊(duì)出隊(duì)操作,或以棧的形式進(jìn)行入棧出棧操作
獲取全部操作結(jié)束數(shù)據(jù)的索引設(shè)置為-1
list可以對(duì)數(shù)據(jù)進(jìn)行分頁(yè)操作,通常第一頁(yè)的信息來(lái)自list,第二頁(yè)及更多的數(shù)據(jù)信息通過(guò)數(shù)據(jù)庫(kù)進(jìn)行查詢加載
存儲(chǔ)需求:存儲(chǔ)大量的數(shù)據(jù),在查詢方面提供更高的效率
存儲(chǔ)結(jié)構(gòu):能夠保存大量的數(shù)據(jù),高效的內(nèi)部存儲(chǔ)機(jī)制,便于查詢
set類型:與hash存儲(chǔ)結(jié)構(gòu)完全相同,僅存儲(chǔ)鍵,不存儲(chǔ)值(nil),并且值不允許為空
set存儲(chǔ)結(jié)構(gòu)是string類型的無(wú)序集合,內(nèi)部存儲(chǔ)時(shí)hash存儲(chǔ)結(jié)構(gòu),因此添加、查找、刪除的復(fù)雜度都是O(1)
set基本操作
添加不重復(fù)的數(shù)據(jù)
sadd key value
獲取存儲(chǔ)的所有數(shù)據(jù)
smembers key
刪除數(shù)據(jù)
strem key member1 [member2]
獲取集合數(shù)據(jù)總量
scard key
判斷集合中是否包含指定數(shù)據(jù)
sismember key member
隨機(jī)獲取集合中指定數(shù)量的數(shù)據(jù)
srandmember key [count]
隨機(jī)獲取集合中某個(gè)數(shù)據(jù)并將該數(shù)據(jù)移出集合
apop key
兩個(gè)集合的交、并、差集
sinter key1 [key2] sunion key1 [key2] adiff key1 [key2]
求兩個(gè)集合的交、并、差集并存儲(chǔ)到指定集合中
sinterstore destination key1 [key2] sunionstore destination key1 [key2] sdiffstore destination key1 [key2]
將指定數(shù)據(jù)從原始集合中移動(dòng)到目標(biāo)集合中
smove source destination member
注意事項(xiàng)
set類型不允許有重復(fù)數(shù)據(jù),如果添加的數(shù)據(jù)在set中已存在,將只保留一份
set雖然與hash存儲(chǔ)結(jié)構(gòu)相同,但無(wú)法啟用hash中存儲(chǔ)值的空間
存儲(chǔ)需求:數(shù)據(jù)排序有利于數(shù)據(jù)的展示效果,需要提供一種可以根據(jù)自身特征進(jìn)行排序的方式
存儲(chǔ)結(jié)構(gòu):可以保存排序的數(shù)據(jù)
存儲(chǔ)類型:在set的存儲(chǔ)結(jié)構(gòu)上添加可排序字段
基本操作
添加數(shù)據(jù)
zadd key scorel member [score2 member2]
獲取全部數(shù)據(jù)
zrange key start stop [witchscores]zrevrange key star stop [witchscores]
刪除數(shù)據(jù)
zrem key member [member ...]
按條件查詢數(shù)據(jù)
zrangebyscore key min max [withscores] [limit] zrevrangebyscore key max min [withscores]
條件刪除數(shù)據(jù)
zremrangebyrank key start stop //start stop 表示索引的開(kāi)始結(jié)束位置 zremrangebyscore key min max //min max表示排序的最小到最大位置
獲取集合數(shù)據(jù)數(shù)量
zcard key zcount key min max
集合交、并操作
zinterstore destination numkeys key [key ...] zunionstore destination key [key ...]
看完上述內(nèi)容,你們掌握Redis基礎(chǔ)類型及常用操作、命令有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。