Redis常見數(shù)據(jù)類型
redis本身就是一個(gè)Map結(jié)構(gòu), 所有數(shù)據(jù)都采用key:value的形式, redis中的數(shù)據(jù)類型指的是value的類型, key部分永遠(yuǎn)是字符串
string(類似Java String)
set key value //存儲(chǔ)數(shù)據(jù)
get key value //獲取數(shù)據(jù)
del key value //刪除數(shù)據(jù)
mset key1 value1 key2 value2 key3 value3 ... //存儲(chǔ)多個(gè)string
mget key1 key2 key3 ...//獲取多個(gè)key對(duì)應(yīng)的string, 若value不存在返回nil(null)
strlen key //獲取value的長度
append key value //在原始的信息的基礎(chǔ)上, 附加信息, 若key不存在, 則新建
針對(duì)數(shù)字型value的自增, 自減(自增, 自減的操作是建立在value必須是數(shù)字, 不能是其他字符串)
incr key //key對(duì)應(yīng)value進(jìn)行自增1
incrby key increment //key對(duì)應(yīng)的value進(jìn)行自增increment個(gè)大小, 此處的increment必須是整數(shù), 不能是浮點(diǎn)數(shù)
incrbyfloat key increment //與上一個(gè)命令一樣, 此處增長的浮點(diǎn)數(shù)
decr key //key對(duì)應(yīng)的value進(jìn)行自減1
decr key increment //key對(duì)應(yīng)的value自減increment個(gè)大小
setex key seconds value //設(shè)定當(dāng)前key-value的生命周期為seconds秒, 當(dāng)TTL為0時(shí), 該鍵值對(duì)自動(dòng)銷毀
psetex key milliseconds value //設(shè)定生命周期為milliseconds
注: value最大的存儲(chǔ)容量為512MB, 數(shù)值計(jì)算最大范圍就是Long的范圍.
hash(類似Java HashMap)
內(nèi)部結(jié)構(gòu)圖:
hset key field value //添加hash數(shù)據(jù)
hget key field//獲取key對(duì)應(yīng)的hash value數(shù)據(jù)
hgetall key //獲取key對(duì)應(yīng)hash表中所有數(shù)據(jù), 包括所有field-value
hdel key field1 field2 ... //刪除key對(duì)應(yīng)的hash數(shù)據(jù)
hmset key field1 value1 field2 value2 field3 value3...//添加多個(gè)hash數(shù)據(jù)
hmget key field1 field2 field3 //通過field獲取對(duì)應(yīng)value數(shù)據(jù)
hlen key //獲取hash表中字段個(gè)數(shù)
hexists key field //判斷field屬性是否存在
hash類型數(shù)據(jù)擴(kuò)展操作
hkeys key //獲取哈希表中所有屬性名
hvals key //獲取哈希表中所有的屬性值
對(duì)hash表中數(shù)字型value進(jìn)行增長操作
hincrby key field increment //value增長increment大小
hincrbyfloat key field increment //value增長變?yōu)楦↑c(diǎn)數(shù)
注:
1.hash表中的value只能存儲(chǔ)字符串, 不能存儲(chǔ)其他類型的數(shù)據(jù)(例如: list, hash等), 禁止套娃.
2.hash表可存儲(chǔ)2^32-1個(gè)鍵值對(duì)
3.避免使用hash存儲(chǔ)大對(duì)象
4.使用hgetall是取出對(duì)飲key中所有hash數(shù)據(jù), 若數(shù)據(jù)較多, 會(huì)造成性能問題
list(類似Java LinkedList)
內(nèi)部結(jié)構(gòu)圖: list的內(nèi)部結(jié)構(gòu)就是一個(gè)雙向鏈表, 類似于Java中的LinkedList
lpush key value1 value2 [value3...] //從list左端插入數(shù)據(jù), 數(shù)據(jù)一個(gè)一個(gè)往左端進(jìn)入
rpush key value1 value2 [value3...] //從list右端插入數(shù)據(jù), 數(shù)據(jù)一個(gè)一個(gè)往右端進(jìn)入
lrange key start stop //獲取索引從start~stop之間的數(shù)據(jù), 索引默認(rèn)從0開始, length-1結(jié)束
lindex key index //獲取指定index下的數(shù)據(jù)
len key //獲取list長度
lpop key //從左端移除數(shù)據(jù)
rpop key //從右端移除數(shù)據(jù)
lrem key count value //刪除key中指定count個(gè)數(shù)的value, list中可能存在value重復(fù)
//從左端拿數(shù)據(jù), 確保可以在seconds時(shí)間內(nèi)拿到數(shù)據(jù), 若該時(shí)間內(nèi)拿不到數(shù)據(jù)就返回null
blpop key seconds
brpop key seconds //從右端拿數(shù)據(jù), 效果同上//確保在seconds時(shí)間內(nèi)從source中rpop拿數(shù)據(jù), 然后將數(shù)據(jù)lpush到target中, 超出時(shí)間限制, 則不執(zhí)行操作
brpoplpush source target seconds
注:
1.list中數(shù)據(jù)都是string, 也不能嵌套其他數(shù)據(jù)類型, 數(shù)據(jù)容量為2^32-1個(gè)元素
2.可以使用list模擬隊(duì)列, 棧等數(shù)據(jù)結(jié)構(gòu)
3.可以使用 lrang key 0 -1 來獲取key中所有的元素
set(類似Java HashSet)
內(nèi)部結(jié)構(gòu)圖: set內(nèi)部結(jié)構(gòu)就是hash的結(jié)構(gòu), 但是set只使用key來存儲(chǔ)(key不允許重復(fù)), 效果與Java中的HashSet一樣
sadd key member1 member2... //添加數(shù)據(jù)
smembers key //獲取key對(duì)應(yīng)所有member數(shù)據(jù)
srem key member1 member2... //刪除key對(duì)應(yīng)的member數(shù)據(jù)
scard key //獲取key對(duì)應(yīng)的member數(shù)量
sismember key member //判斷member是否包含在key中, 類似于contains
srandmember key [count] //隨機(jī)獲取key對(duì)應(yīng)的member數(shù)據(jù), 可以在后面指定member個(gè)數(shù)
spop key [count] //隨機(jī)獲取key對(duì)應(yīng)的member數(shù)據(jù), 并將其移除, 可指定member個(gè)數(shù)
sinter key1 key2 ...//獲取多個(gè)set的交集
sunion key1 kye2 ...//獲取多個(gè)set的并集
sdiff key1 key2...//獲取多個(gè)set的差集sinterstore target key1 key2...//獲取多個(gè)集合的交集, 并將其存入target中
sunionstore target key1 key2...//獲取多個(gè)集合的并集, 并將其存入target中
sdiffstore target key1 key2...//獲取多個(gè)集合的差集, 并將其存入target中smove source target member //將source中的member數(shù)據(jù)移動(dòng)到target中
sortedset(類似Java TreeSet)
內(nèi)部結(jié)構(gòu): 相比于set, 多增加了score屬性, 在sortedSet中, Redis根據(jù)score進(jìn)行排序操作.
zadd key score1 member1 score2 member2 score3 member3...//添加數(shù)據(jù)
zrange key start stop [withscores] //獲取索引start~stop之間的數(shù)據(jù) withscores代表結(jié)果可以輸出scores
zrevrange key start stop [witchscores] //反向獲取
zrem key member1 member2 //刪除key對(duì)應(yīng)的member數(shù)據(jù)zrangebyscore key min max [withscores] [limit] //按條件獲取, min,max代表score范圍, limit與mysql的limit效果一樣
zrevrangebyscore key max min [withscores] //反向獲取zremrangebyrank key start stop //按照索引位置進(jìn)行刪除
zremrangebyscore key min max //按照score大小范圍進(jìn)行刪除zcard key //獲取集合數(shù)據(jù)總量
zcount key min max //按照score范圍獲取//求交集, 并將返回的結(jié)果存入target中, numberkeys指定當(dāng)前key的數(shù)量
zinterstore target numkeys key [key...]
//求并集
zunionstrore target numkeys key [key]
zrank key member //獲取對(duì)應(yīng)member的索引
zrevrank key member //獲取反向的索引
zscore key member //獲取對(duì)應(yīng)member的score值
zincrby key increment member //對(duì)member進(jìn)行增長increment大小
注:
score的存儲(chǔ)大小為64位
score可以存儲(chǔ)double類型, 但是也可能存在精度丟失
sortedSet底層還是set, 因此不能添加重復(fù)的member, 出現(xiàn)member重復(fù), 則后一個(gè)的score會(huì)將前一個(gè)的score覆蓋
Redis基本數(shù)據(jù)的應(yīng)用場景
Tips 1:redis用于控制數(shù)據(jù)庫表主鍵id,為數(shù)據(jù)庫表主鍵提供生成策略,保障數(shù)據(jù)庫表的主鍵唯一性 Tips 2:redis 控制數(shù)據(jù)的生命周期,通過數(shù)據(jù)是否失效控制業(yè)務(wù)行為,適用于所有具有時(shí)效性限定控制的操作 Tips 3:redis應(yīng)用于各種結(jié)構(gòu)型和非結(jié)構(gòu)型高熱度數(shù)據(jù)訪問加速 Tips 4:redis 應(yīng)用于購物車數(shù)據(jù)存儲(chǔ)設(shè)計(jì) Tips 5:redis 應(yīng)用于搶購,限購類、限量發(fā)放優(yōu)惠卷、激活碼等業(yè)務(wù)的數(shù)據(jù)存儲(chǔ)設(shè)計(jì) Tips 6:redis 應(yīng)用于具有操作先后順序的數(shù)據(jù)控制 Tips 7:redis 應(yīng)用于最新消息展示 Tips 8:redis 應(yīng)用于隨機(jī)推薦類信息檢索,例如熱點(diǎn)歌單推薦,熱點(diǎn)新聞推薦,熱賣旅游線路,應(yīng)用APP推薦,大V推薦等 Tips 9:redis 應(yīng)用于同類信息的關(guān)聯(lián)搜索,二度關(guān)聯(lián)搜索,深度關(guān)聯(lián)搜索 Tips 10:redis 應(yīng)用于同類型不重復(fù)數(shù)據(jù)的合并、取交集操作 Tips 11:redis 應(yīng)用于同類型數(shù)據(jù)的快速去重 Tips 12:redis 應(yīng)用于基于黑名單與白名單設(shè)定的服務(wù)控制 Tips 13:redis 應(yīng)用于計(jì)數(shù)器組合排序功能對(duì)應(yīng)的排名 Tips 14:redis 應(yīng)用于定時(shí)任務(wù)執(zhí)行順序管理或任務(wù)過期管理 Tips 15:redis 應(yīng)用于及時(shí)任務(wù)/消息隊(duì)列執(zhí)行管理 Tips 16:redis 應(yīng)用于按次結(jié)算的服務(wù)控制 Tips 17:redis 應(yīng)用于基于時(shí)間順序的數(shù)據(jù)操作,而不關(guān)注具體時(shí)間
Redis通用指令
Key的通用操作
del key //刪除指定key
exists key //判斷key是否存在
type key //獲取key對(duì)應(yīng)的value數(shù)據(jù)類型
expire key seconds //設(shè)置key的有效時(shí)間為seconds秒
pexpire key milliseconds //設(shè)置key的有效時(shí)間為milliseconds毫秒
//key的過期時(shí)間設(shè)置效果與上面一樣, 區(qū)別在于下面這個(gè)用于unix平臺(tái)設(shè)置
expireat key seconds //設(shè)置key的有效時(shí)間為seconds秒
pexpireat key milliseconds //設(shè)置key的有效時(shí)間為milliseconds毫秒
ttl key //獲取key的有效時(shí)間(秒單位)
pttl key //獲取key有效時(shí)間(毫秒單位)
persist key //將當(dāng)前key的時(shí)效性切換到永久
keys pattern //查詢key, *代表所有, ?代表匹配任意一個(gè)字符, []代表匹配其中某一個(gè)字符
rename key newKey //為key改名
renamex key newKey //Unix平臺(tái)改名
數(shù)據(jù)庫通用操作 Redis將數(shù)據(jù)庫分為16個(gè), 各個(gè)數(shù)據(jù)庫之間相互獨(dú)立
select index //切換數(shù)據(jù)庫, index代表數(shù)據(jù)庫下標(biāo)
quit //退出
ping //發(fā)送消息, 效果與網(wǎng)絡(luò)中ping一樣
move key db //將key移動(dòng)到另外一個(gè)db中
dbsize //數(shù)據(jù)庫大小
flushdb //當(dāng)前數(shù)據(jù)庫進(jìn)行清除操作
flushall //所有數(shù)據(jù)庫進(jìn)行刪除操作
創(chuàng)作挑戰(zhàn)賽 新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔 為你收集整理的Redis常见数据类型_Redis通用指令 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。