日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java核心篇之Redis--day4

發(fā)布時(shí)間:2025/3/12 java 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java核心篇之Redis--day4 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)用:

  • Redis發(fā)布訂閱功能:發(fā)布訂閱是一種消息的通信模式:發(fā)布者發(fā)布信息,訂閱者接受信息,主要是為了解耦消息的發(fā)布者和訂閱者,redis作為一個(gè)發(fā)布訂閱的server,在訂閱和發(fā)布之間起到了消息路由的作用。訂閱者可以通過(guò)subscribe和psubscribe命令向redis server訂閱自己感興趣的消息類型,redis將消息類型稱為通道channel。當(dāng)發(fā)布者向redis server發(fā)布特定類型的消息的時(shí)候,訂閱該消息的所有client都會(huì)收到此消息。
  • Redis支持事務(wù)功能:Redis的事務(wù)功能主要是保證同一個(gè)client發(fā)起的事務(wù)中的命令可以連續(xù)執(zhí)行,而中間不會(huì)插入另一個(gè)客戶端的命令。當(dāng)一個(gè)客戶端發(fā)起事務(wù)命令multi時(shí),這個(gè)連接會(huì)進(jìn)入一個(gè)事務(wù)上下文,該命令后續(xù)的命令不會(huì)立即執(zhí)行,而是先放到一個(gè)queue中,當(dāng)此連接收到exec命令后,redis才會(huì)順序的執(zhí)行隊(duì)列中的命令,如何將所有命令結(jié)果返回給客戶端。
  • Redis的管道功能:Redis管道功能是指客戶端在同一個(gè)請(qǐng)求中同時(shí)發(fā)送多個(gè)命令,在這個(gè)過(guò)程中無(wú)需等待每個(gè)命令的響應(yīng),而是在組合讀取每個(gè)命令的響應(yīng)回復(fù)。
  • Redis的持久化功能:Redis 是一個(gè)基于內(nèi)存的數(shù)據(jù)庫(kù),但是他也是支持?jǐn)?shù)據(jù)持久化的,如果業(yè)務(wù)需要,可以開(kāi)啟業(yè)務(wù)持久化的功能,將內(nèi)存數(shù)據(jù)持久化到磁盤中,從而保證數(shù)據(jù)的安全和完整性。
  • 兩種常用的持久化方式有:RDB(redis database)AOF(append only file)兩種常用的持久化方式有:
  • RDB(redis database)AOF(append only file)RDB(redis database)AOF(append only file)
    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ù)原子性,單線程,緩存,多種類型

  • (1)異常快:Redis非常快,每秒可執(zhí)行大約110000次的設(shè)置(SET)操作,每秒大約可執(zhí)行81000次的讀取/獲取(GET)操作。
  • (2)支持豐富的數(shù)據(jù)類型: Redis支持開(kāi)發(fā)人員常用的大多數(shù)數(shù)據(jù)類型,例如列表、集合、排序集和散列等等。
  • (3)操作具有原子性:單進(jìn)程單線程作業(yè),所有操作都是原子操作,這確保如果兩個(gè)客戶端并發(fā)訪問(wèn),Redis服務(wù)器能接收更新的值。
  • (4)多實(shí)用工具:是一個(gè)多實(shí)用工具,可用于多種用例,如:緩存、消息隊(duì)列(Redis本地支持發(fā)布/訂閱)、應(yīng)用程序中的任何短期數(shù)據(jù)。例如,WEB應(yīng)用程序中的會(huì)話、網(wǎng)頁(yè)命中計(jì)數(shù)等。
  • 使用過(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。