Java核心篇之Redis--day4
Java核心篇之Redis–day4
Redis有哪些數(shù)據(jù)結(jié)構(gòu)?
字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。
1.String:字符串,常用命令:get,set,decr,incr,mget(查詢多個(gè)key)
2.Hash類型:hset(添加賦值)/hget(查詢)/hgetall(查詢所有字段和值)等。
3.list(列表類型):lpush(列表頭部添加元素)/rpush(列表尾部添加元素)/lpop(頭部刪除元素)/rpop(尾部刪除元素)/lrange(查詢?cè)?#xff09;:不支持嵌套其他數(shù)據(jù)類型,應(yīng)用場(chǎng)景很多,存儲(chǔ)文章評(píng)論列表,存儲(chǔ)用戶的粉絲列表,黑名單列表等,也可以作為重要的消息隊(duì)列來(lái)使用。Redis的list數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)是一個(gè)雙向鏈表,支持正向反向遍歷查找,方便用戶操作的同時(shí),也增加了內(nèi)存開(kāi)銷。
4.Set集合類型:Redis集合是字符串的不重復(fù)無(wú)序結(jié)構(gòu)。常用命令有sadd(添加元素)/spop(刪除)/smembers(查詢)/sunion(添加多個(gè)集合)等,不支持嵌套其他數(shù)據(jù)類型,提供自動(dòng)去重的功能(內(nèi)部實(shí)現(xiàn)是一個(gè)value永遠(yuǎn)為null的hashmap)
5.Zset(sorted set)在set基礎(chǔ)上關(guān)聯(lián)一個(gè)score,通過(guò)score來(lái)實(shí)現(xiàn)排序的功能。(應(yīng)用到的場(chǎng)合:實(shí)現(xiàn)文章按點(diǎn)擊量排序,微博熱搜榜,論壇熱帖)
高級(jí)應(yīng)用:
RDB:在不同的時(shí)間點(diǎn),將redis存儲(chǔ)的數(shù)據(jù)生成快照并存儲(chǔ)到磁盤等介質(zhì)上;
AOF:將執(zhí)行過(guò)的指令記錄下來(lái),在數(shù)據(jù)恢復(fù)時(shí)按照從前到后的順序再將指令都執(zhí)行一遍,從而恢復(fù)數(shù)據(jù)。
Redis作為一個(gè)內(nèi)存數(shù)據(jù)庫(kù),優(yōu)勢(shì)如下:使用redis的好處:快速,持久化,事務(wù)原子性,單線程,緩存,多種類型
使用過(guò)Redis分布式鎖么,它是什么回事?
先拿setnx來(lái)爭(zhēng)搶鎖,搶到之后,再用expire給鎖加一個(gè)過(guò)期時(shí)間防止鎖忘記了釋放。
這時(shí)候?qū)Ψ綍?huì)告訴你說(shuō)你回答得不錯(cuò),然后接著問(wèn)如果在setnx之后執(zhí)行expire之前進(jìn)程意外crash或者要重啟維護(hù)了,那會(huì)怎么樣?
這時(shí)候你要給予驚訝的反饋:唉,是喔,這個(gè)鎖就永遠(yuǎn)得不到釋放了。緊接著你需要抓一抓自己得腦袋,故作思考片刻,好像接下來(lái)的結(jié)果是你主動(dòng)思考出來(lái)的,然后回答:我記得set指令有非常復(fù)雜的參數(shù),這個(gè)應(yīng)該是可以同時(shí)把setnx和expire合成一條指令來(lái)用的!對(duì)方這時(shí)會(huì)顯露笑容,心里開(kāi)始默念:摁,這小子還不錯(cuò)。https://juejin.im/post/5b16148a518825136137c8db
總結(jié)
以上是生活随笔為你收集整理的Java核心篇之Redis--day4的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 动态代理与静态代理
- 下一篇: Java核心篇之Java锁--day2