成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Redis的數(shù)據(jù)結(jié)構(gòu)及應(yīng)用場景

一. 談?wù)剬edis的理解,它的應(yīng)用場景。

Redis是一個key-value存儲系統(tǒng),它支持存儲的value類型包括string字符串、list鏈表、set集合、sorted Set有序集合和hash哈希等數(shù)據(jù)類型。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的,支持各種不同方式的排序。為了保證效率,Redis將數(shù)據(jù)都緩存在內(nèi)存中,并周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,在此基礎(chǔ)上實現(xiàn)master-slave(主從)同步。

創(chuàng)新互聯(lián)建站擁有一支富有激情的企業(yè)網(wǎng)站制作團(tuán)隊,在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)深耕10年,專業(yè)且經(jīng)驗豐富。10年網(wǎng)站優(yōu)化營銷經(jīng)驗,我們已為成百上千家中小企業(yè)提供了網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計解決方案,按需定制,設(shè)計滿意,售后服務(wù)無憂。所有客戶皆提供一年免費網(wǎng)站維護(hù)!

Redis的應(yīng)用場景 數(shù)據(jù)類型應(yīng)用場景StringString是最常用的一種數(shù)據(jù)類型,普通的key/value存儲都可以歸為此類。List關(guān)注列表、粉絲列表、消息隊列等。SetSet提供一個與 List類似的列表功能,特殊之處在于Set會自動排序、去重,當(dāng)需要存儲一個列表數(shù)據(jù),又不希望有重復(fù)數(shù)據(jù)時,Set是一個很好的選擇,并且set提供了判斷某個成員是否在一個set集合內(nèi)的重要接口,這個也是list所不能提供的。

1.使用Set存儲一些集合性的數(shù)據(jù),比如在微博應(yīng)用中,可以將一個用戶所有的關(guān)注人存在一個集合中,將其所有粉絲存在一個集合;

2.可以對集合取交集、并集、差集,應(yīng)用到好友推薦、共同關(guān)注等。

3.還可以利用唯一性,統(tǒng)計訪問網(wǎng)站的所有獨立IP。

SortedSetSortedSet與Set的使用場景類似,是不允許重復(fù)項的String集合。

1.SortedSet可以通過提供一個優(yōu)先級(score)的參數(shù)為成員排序,并且是插入有序的,即自動排序,可以應(yīng)用于積分排行榜等。

2.如果需要一個有序且不重復(fù)的集合列表,可以選擇sorted set數(shù)據(jù)結(jié)構(gòu),比如twitter 的public timeline可以以發(fā)表時間作為score來存儲,這樣獲取時就是自動按時間排好序的。

3.用SortedSet做帶權(quán)重的隊列,比如普通消息的score為1,重要消息的score為2,然后工作線程可以選擇按score的倒序來獲取工作任務(wù),讓重要的任務(wù)優(yōu)先執(zhí)行。

Hash 存儲一個學(xué)生信息對象數(shù)據(jù),字段包括:id、姓名、班級、年齡等,通過id可以獲取/修改任意的字段。

二. 既然一般的語言也能支持string、list、hash等數(shù)據(jù)結(jié)構(gòu),為什么還要用redis呢?

這里要先提一下 內(nèi)存和緩存的區(qū)別 :

內(nèi)存是物理上的,是一種物理存儲介質(zhì)。

緩存是邏輯上的概念,是一種數(shù)據(jù)結(jié)構(gòu),可以是PHP語言里面的一種數(shù)據(jù)結(jié)構(gòu),也可以是Redis里面的一種數(shù)據(jù)結(jié)構(gòu)。比如:用PHP數(shù)組存一些數(shù)據(jù),每次有需求就直接從數(shù)組中讀??;用PHP語言設(shè)計了一個緩存,用一個數(shù)組做隊列,設(shè)計了一個基于先進(jìn)先出策略的緩存;調(diào)用Redis的一些數(shù)據(jù)結(jié)構(gòu)來存儲數(shù)據(jù)。

內(nèi)存叫做RAM,隨機(jī)可讀存儲器,硬盤一般叫做ROM,隨機(jī)只讀存儲器。

緩存包括cpu的一二級緩存、純內(nèi)存結(jié)構(gòu)的緩存、半內(nèi)存緩存、磁盤緩存,它們的速度是一層比一層慢。當(dāng)CPU要讀取一個數(shù)據(jù)時,首先從一級緩存中查找,如果沒有找到再從二級緩存中查找,如果還是沒有就從三級緩存或內(nèi)存中查找,程序里面的各種數(shù)據(jù)結(jié)構(gòu)、變量等等,都是運行在內(nèi)存里面,而不是在硬盤上。

假設(shè)有一個場景,比如歷史用戶日志訪問數(shù)據(jù),就是access_log,讓你去統(tǒng)計都有哪些用戶登錄了這個網(wǎng)站,當(dāng)然現(xiàn)在還有用戶在持續(xù)登錄著。這個時候你是不是要先去從access_log里面讀取日志,然后提取出日志里面的userId,存到數(shù)組里面再去重。當(dāng)新用戶來的時候,你只需要和你數(shù)組里面的用戶進(jìn)行比較即可,就不需要再讀取access_log文件了。這樣就不用每次讀取文件,只需要讀取數(shù)組即可,速度回更快。 同理用Redis,也是因為當(dāng)我們需要讀取數(shù)據(jù)時,先從Redis查找,如果有就直接返回,不用再從MySQL查找,速度會很快。

從原理上講,PHP里面的數(shù)據(jù)結(jié)構(gòu)用的是純內(nèi)存,而Redis是需要走網(wǎng)絡(luò)的;

從速度上講,純內(nèi)存的速度肯定是比先走網(wǎng)絡(luò)、再從內(nèi)存中讀取的速度快。

雖然Redis作為半內(nèi)存緩存,沒有直接內(nèi)存結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)速度快,但Redis除了數(shù)據(jù)結(jié)構(gòu)豐富外,還適合高并發(fā)場景,對高并發(fā)處理效率極高,此外可以做到集群式、可持久化。

三. 具體講一下Redis的數(shù)據(jù)結(jié)構(gòu),盡可能的舉出他們的應(yīng)用場景。

Redis支持String、List、Set、Sorted Set、Hash等。

  • String類型是二進(jìn)制安全的,可以用來緩存一些靜態(tài)文件,如圖片、視頻、css文件等。支持incr操作,可以用作計數(shù)器,比如統(tǒng)計網(wǎng)站訪問次數(shù)等。
  • 微博中“關(guān)注、粉絲”、論壇中所有回帖的ID用的就是list列表,還有消息隊列,也是列表。
  • Set可以快速查找元素是否存在,用于記錄一些不能重復(fù)的數(shù)據(jù)。例如: 在網(wǎng)站注冊賬號時,用戶名不能重復(fù),使用Set記錄注冊用戶,如果注冊的用戶名已經(jīng)存在于Set中,就拒絕該用戶注冊?;蛘哂糜谟涗涀鲞^某些事情。例如: 在某些投票系統(tǒng)中,每個用戶一天只能投票一次,就可以用Set來記錄某個用戶的投票情況。
  • 順便給大家推薦一個Java架構(gòu)群:834962734  里面會分享一些資深架構(gòu)師錄制的視頻 資料 :有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識體系。還能領(lǐng)取免費的學(xué)習(xí)資源,目前受益良多!
  • Set能做的事Sorted Set也能做,Sorted Set還能完成一些Set不能做的事情。例如:使用Sorted Set構(gòu)建一個具有優(yōu)先級的隊列。
  • Hash適用于存儲對象,比如把用戶的信息存到hash里,以用戶id為key,用戶的詳細(xì)信息為value。

網(wǎng)頁標(biāo)題:Redis的數(shù)據(jù)結(jié)構(gòu)及應(yīng)用場景
文章網(wǎng)址:http://jinyejixie.com/article28/ggsdcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、App設(shè)計、營銷型網(wǎng)站建設(shè)、虛擬主機(jī)云服務(wù)器、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
泗水县| 安图县| 百色市| 延安市| 眉山市| 无锡市| 大埔区| 永州市| 丰县| 武乡县| 麟游县| 济宁市| 泗洪县| 乌兰察布市| 临漳县| 三江| 隆昌县| 托克托县| 林周县| 望江县| 德阳市| 贵南县| 沙湾县| 林口县| 德化县| 临邑县| 上林县| 资阳市| 二手房| 富川| 贡嘎县| 汉源县| 鹤峰县| 海盐县| 鄂托克旗| 阜新市| 诸暨市| 台东市| 阳西县| 临泉县| 镇原县|