最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

一篇文章吃透redis數(shù)據(jù)類型

2023-02-08 22:54 作者:nannanya13  | 我要投稿

一日三餐不可少,好友宴請(qǐng)炊煙裊,干煸烘烤一起炒,String、list、hash、set不難搞!

歡迎關(guān)注公眾號(hào):Java面試教程 ,回復(fù)關(guān)鍵字qqq,領(lǐng)取2023面試大全資料

話說小面的朋友張三近日尋得一新東家,近期就要上任了,特于周末宴請(qǐng)自己的同事到小窩吃飯,張三為顯誠(chéng)意,特地在家自制晚餐招待大家,同事大大是老前輩了,率先提出讓大家就今天的飯菜制作過程和菜品來談一談redis的value類型

大大:想必大家都用過redis,但總共有哪些存儲(chǔ)結(jié)構(gòu)的數(shù)據(jù)類型呢?

可可:我知道,redis的value類型有字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)

string

不不:張三這會(huì)正在搓面團(tuán),我就這個(gè)面來談一談String類型,面粉可以衍生出多種常吃食物比如包子、饅頭、面條、面包、抄手等等。我們平常都會(huì)說一坨面或者一團(tuán)面,那其實(shí)就像是我們大多數(shù)時(shí)候往redis里放的數(shù)據(jù)結(jié)構(gòu)k,v->k是String類型,value是Object類型,管他三七二十一,將想要緩存的對(duì)象用這種方式放到redis,需要時(shí)直接取出來使用,當(dāng)我們裝好redis服務(wù)端并用客戶端連接上后,在redis客戶端對(duì)String常用的操作有

setk1aabb
getk1

還可以help set查看跟哪些參數(shù)


setk1hello
setk1ooxxnx#這個(gè)nx表示當(dāng)k1這個(gè)key不存在時(shí)才去設(shè)置,應(yīng)用場(chǎng)景比如分布式鎖
getk1

這個(gè)nx比如一堆連接去創(chuàng)建某個(gè)Key,但是只有一個(gè)會(huì)返回成功,其他都會(huì)失敗


setk2helloxx#xx表示只能更新,就是說這個(gè)Key是預(yù)先存在的


mset這個(gè)命令后面可以跟多個(gè)key-valuemget對(duì)應(yīng)多個(gè)key取出

更多的可以直接 help@string來查看更多命令 比如APPENDGETRANGESTRLENk1 取長(zhǎng)度

就說面粉做的那個(gè)小籠包,外面基本上都是蒸籠一籠一籠的重著放,我們可以把最上面的一籠標(biāo)記為1也可以把最下面的一籠標(biāo)記為1,在redis對(duì)String類型處理中就類似的情況是正反向索引



type命令 可以查看key的value類型,屬于哪個(gè)分組就是哪個(gè)類型OBJECT命令可以查看key的encoding,查看更多關(guān)于object可以 輸入object help查看幫助

object簡(jiǎn)單使用


在key的結(jié)構(gòu)里除了存儲(chǔ)key的名字還存儲(chǔ)了vaule的type以及encoding,客戶端如java代碼對(duì)某些key操作時(shí),比如類型不匹配可以直接報(bào)錯(cuò)

繼續(xù)拿這個(gè)面粉說事,我每天早上去辦公室樓下買早餐,里面賣的各色餡的包子,花卷,饅頭都是有價(jià)格的,柜臺(tái)流水關(guān)于這個(gè)包子等都是一個(gè)一個(gè)相加的,也就是說可以進(jìn)行計(jì)算,redis也設(shè)計(jì)了這個(gè)數(shù)值類型的String,可以直接在redis側(cè)進(jìn)行數(shù)值計(jì)算

INCR




setk3a
strlenk3#結(jié)果為1
APPENDk3中
strlen k3 #長(zhǎng)度為4,為什么?因?yàn)槎M(jìn)制安全,當(dāng)前用的xshell連接的字符集是utf-8,一個(gè)中占3個(gè)字節(jié),a一個(gè)字節(jié)

二進(jìn)制安全

redis在存儲(chǔ)時(shí)使用的是字節(jié)流,是二進(jìn)制安全的,所以比如java代碼在設(shè)置和取值時(shí)就要約定好編碼解碼的字符集。我們分別在utf-8和GBK的字符下set一個(gè)中字,結(jié)果在utf-8下長(zhǎng)度為3,GBK下長(zhǎng)度為2



bitmap

你們看張三做的那個(gè)紅糖鍋盔和紅糖糍粑就像是二進(jìn)制的0101010100011這樣的,不禁就想到了redis的String當(dāng)中還有一種bitmap的操作,我們先來看下有關(guān)它的操作

setbit






  • 統(tǒng)計(jì)某個(gè)網(wǎng)站的用戶一年365天某個(gè)隨即時(shí)間段的登錄天數(shù)

  • 比如京東是我們?cè)陂_發(fā),現(xiàn)在有個(gè)需求雙十一要給用戶送禮物,京東總共有2億用戶要準(zhǔn)備多少禮品呢?這就涉及到到底有多少活躍用戶


做個(gè)小結(jié)并把剛剛bitop應(yīng)用簡(jiǎn)單說明一下


List

嗶嗶:剛剛不不講解了String類型的value,我來講講這個(gè)list吧。話說張三剛剛做涼蝦的時(shí)候我看那個(gè)米漿糊糊是挨著密漏一點(diǎn)點(diǎn)的往下擠到盆里,這個(gè)過程是連續(xù)的并且是先挨著出口的先出,后挨著出口的后出,就像是一個(gè)鏈先進(jìn)先出就像隊(duì)列一樣 描述隊(duì)列,反向命令lpush rpop








LINSERT插入操作


LREM移除元素,中間的count有正數(shù)負(fù)數(shù)和零,正數(shù)就是從左數(shù)



hash

點(diǎn)點(diǎn):你們都說的挺好的,我看張三做的糖醋排骨非常香,總共有15塊,顏色是紅泛黑,每塊大約30g重量共計(jì)450g,形狀都是長(zhǎng)方體非常的標(biāo)準(zhǔn),有著濃濃的番茄醬香,說著都有點(diǎn)流口水了,我剛剛描述的糖醋排骨可以用redis中的hash來存儲(chǔ),我們把key設(shè)為糖醋排骨,它有數(shù)量、重量、顏色、香味、形狀這幾個(gè)特征,并且可以根據(jù)特征類型來賦予不同類型的值,接下來就簡(jiǎn)單談一談hash的操作

help @hash命令基本上可以理解為在string命令前加了Hhset hmset hget hmget hkeys hvals


HINCRBYFLOAThash也支持對(duì)數(shù)值的操作


set

贊贊:張三剛剛做的芋兒燒雞中一個(gè)一個(gè)的芋兒是不重復(fù)的,每個(gè)都是獨(dú)立的,一鍋芋兒雞中的芋兒是混亂的沒有任何順序可言,這個(gè)就像是redis中的set類型,接下來我來談一談set相關(guān)的操作

SADD 添加,SMEMBERS遍歷











sorted_set

張三:接著剛剛贊贊說的這個(gè)芋兒,其實(shí)我們也可以給它排個(gè)序,我們可以根據(jù)每個(gè)芋兒的重量或者大小來進(jìn)行排序,這個(gè)應(yīng)用就可以用redis的sorted_set來實(shí)現(xiàn),我就來談?wù)勊南嚓P(guān)操作吧 理解sorted_set要理解元素是根據(jù)排序依據(jù)來排序的,這個(gè)排序依據(jù)就是一些維度指標(biāo)就比如我剛剛說的重量和大小,再比如我要把水果中的蘋果、香蕉、鴨梨來排序,可以根據(jù)名稱、含糖量、大小、價(jià)格、吃貨熱度來排序,在redis中會(huì)給出一個(gè)權(quán)重分手動(dòng)的指定你想要的的排序規(guī)則







也支持交并差集,ZUNIONSTORE,不帶權(quán)重、分值,默認(rèn)是將分值相加




使用跳躍表,大致結(jié)果就是在鏈表的基礎(chǔ)上增加層(基于二分),上面的每一層都像是鏈表,隨機(jī)造層是犧牲存儲(chǔ)空間來換取查詢效率


sorted_set小結(jié)


點(diǎn)點(diǎn):我們剛剛說了它的命令,我用java或者其他語言怎么用呢?

大大:這些redis客戶端的命令都會(huì)了,還需要去學(xué)api嗎?不需要的,api也不過是根據(jù)這些命令做的一個(gè)封裝而已,到時(shí)候想用那種命令直接用對(duì)應(yīng)的api結(jié)合命令試一下就出來了,實(shí)在不行在查資料

張三:就是就是,飯也做好了,今天的考題就到此結(jié)束,開飯!


一篇文章吃透redis數(shù)據(jù)類型的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
潮州市| 云南省| 会东县| 温州市| 天门市| 社旗县| 黔西县| 濮阳县| 龙里县| 磴口县| 武宁县| 府谷县| 剑河县| 长武县| 广西| 辉县市| 海兴县| 漳州市| 浦东新区| 望城县| 江都市| 福泉市| 东辽县| 邓州市| 永安市| 曲靖市| 肥城市| 银川市| 江阴市| 广灵县| 石泉县| 金平| 沙坪坝区| 峡江县| 肇源县| 耒阳市| 涿州市| 贺州市| 永州市| 万州区| 渝北区|