1.string
這是最基本的類型了册着,就是普通的set和get,做簡單的kv緩存脾歧。
2.hash
這個是類似map的一種結(jié)構(gòu)甲捏,這個一般就是可以將結(jié)構(gòu)化的數(shù)據(jù),比如一個對象(前提是這個對象沒嵌套其他的對象)給緩存在redis里鞭执,然后每次讀寫緩存的時候摊鸡,可以就操作hash里的某個字段。
key=150
value={
“id”: 150,
“name”: “zhangsan”,
“age”: 20
}
hash類的數(shù)據(jù)結(jié)構(gòu)蚕冬,主要是用來存放一些對象免猾,把一些簡單的對象給緩存起來,后續(xù)操作的時候囤热,你可以直接僅僅修改這個對象中的某個字段的值
value={
“id”: 150,
“name”: “zhangsan”,
“age”: 21
}
3.list
有序列表猎提,這個是可以做很多不同操作的
比如:微博,某個大v的粉絲旁蔼,就可以以list的格式放在redis里去緩存
key=某大v
value=[zhangsan, lisi, wangwu]
比如:可以通過list存儲一些列表型的數(shù)據(jù)結(jié)構(gòu)锨苏,類似粉絲列表了、文章的評論列表了之類的東西
比如:可以通過lrange命令棺聊,就是從某個元素開始讀取多少個元素伞租,可以基于list實現(xiàn)分頁查詢,這個很棒的一個功能限佩,基于redis實現(xiàn)簡單的高性能分頁葵诈,可以做類似微博那種下拉不斷分頁的東西,性能高祟同,就一頁一頁走
比如:可以搞個簡單的消息隊列作喘,從list頭懟進(jìn)去,從list尾巴那里弄出來
4.set
無序集合晕城,自動去重
直接基于set將系統(tǒng)里需要去重的數(shù)據(jù)扔進(jìn)去泞坦,自動就給去重了,如果你需要對一些數(shù)據(jù)進(jìn)行快速的全局去重砖顷,你當(dāng)然也可以基于jvm內(nèi)存里的HashSet進(jìn)行去重贰锁,但是如果你的某個系統(tǒng)部署在多臺機(jī)器上呢?
得基于redis進(jìn)行全局的set去重
可以基于set玩兒交集滤蝠、并集豌熄、差集的操作,比如交集吧几睛,可以把兩個人的粉絲列表整一個交集房轿,看看倆人的共同好友是誰?對吧
把兩個大v的粉絲都放在兩個set中,對兩個set做交集
5.sorted set
排序的set囱持,去重但是可以排序夯接,寫進(jìn)去的時候給一個分?jǐn)?shù),自動根據(jù)分?jǐn)?shù)排序纷妆,這個可以玩兒很多的花樣盔几,最大的特點是有個分?jǐn)?shù)可以自定義排序規(guī)則
比如說你要是想根據(jù)時間對數(shù)據(jù)排序,那么可以寫入進(jìn)去的時候用某個時間作為分?jǐn)?shù)掩幢,人家自動給你按照時間排序了
排行榜:將每個用戶以及其對應(yīng)的什么分?jǐn)?shù)寫入進(jìn)去逊拍,zadd board score username,接著zrevrange board 0 99际邻,就可以獲取排名前100的用戶芯丧;zrank board username,可以看到用戶在排行榜里的排名
zadd board 85 zhangsan
zadd board 72 wangwu
zadd board 96 lisi
zadd board 62 zhaoliu
96 lisi
85 zhangsan
72 wangwu
62 zhaoliu
zrevrange board 0 3
獲取排名前3的用戶
96 lisi
85 zhangsan
72 wangwu
zrank board zhaoliu
4