1. java通過jedis為什麼無法連接redis服務
有可能是網路問題(如果這個錯誤出現的頻率並不高)
連接池滿了,等待隊列也滿了(恭喜你可以加機器了)
2. redis 怎麼啟用多埠
我來回答通常sniffer所要關心的內容可以分成這樣幾類:1、口令我想這是絕大多數非法使用sniffer的理由,sniffer可以記錄到明文傳送的userid和passwd.就算你在網路傳送過程中使用了加密的數據,sniffer記錄的數據一樣有可能使入侵者在家裡邊吃肉串邊想法算出你的演算法。2、金融帳號許多用戶很放心在網上使用自己的信用卡或現金帳號,然而sniffer可以很輕松截獲在網上傳送的用戶姓名、口令、信用卡號碼、截止日期、帳號和pin.3、偷窺機密或敏感的信息數據通過攔截數據包,入侵者可以很方便記錄別人之間敏感的信息傳送,或者乾脆攔截整個的email會話過程。4、窺探低級的協議信息。這是很可怕的事,我認為,通過對底層的信息協議記錄,比如記錄兩台主機之間的網路介面地址、遠程網路介面ip地址、ip路由信息和tcp連接的位元組順序號碼等。這些信息由非法入侵的人掌握後將對網路安全構成極大的危害,通常有人用sniffer收集這些信息只有一個原因:他正在進行一次欺詐,(通常的ip地址欺詐就要求你准確插入tcp連接的位元組順序號,這將在以後整理的文章中指出)如果某人很關心這個問題,那麼sniffer對他來說只是前奏,今後的問題要大得多。(對於高級的hacker而言,我想這是使用sniffer的唯一理由吧)二.sniffer的工作環境snifffer就是能夠捕獲網路報文的設備。嗅探器的正當用處在於分析網路的流量,以便找出所關心的網路中潛在的問題。例如,假設網路的某一段運行得不是很好,報文的發送比較慢,而我們又不知道問題出在什麼地方,此時就可以用嗅探器來作出精確的問題判斷。嗅探器在功能和設計方面有很多不同。有些只能分析一種協議,而另一些可能能夠分析幾百種協議。一般情況下,大多數的嗅探器至少能夠分析下面的協議:1.標准乙太網2.TCP/IP3.IPX4.DECNet嗅探器通常是軟硬體的結合。專用的嗅探器價格非常昂貴。另一方面,免費的嗅探器雖然不需要花什麼錢,但得不到什麼支持。嗅探器與一般的鍵盤捕獲程序不同。鍵盤捕獲程序捕獲在終端上輸入的鍵值,而嗅探器則捕獲真實的網路報文。嗅探器通過將其置身於網路介面來達到這個目的——例如將乙太網卡設置成雜收模式。(為了理解雜收模式是怎麼回事,先解釋區域網是怎麼工作的)。數據在網路上是以很小的稱為幀(Ftame)的單位傳輸的幀由好幾部分組成,不同的部分執行不同的功能。(例如,乙太網的前12個位元組存放的是源和目的的地址,這些位告訴網路:數據的來源和去處。乙太網幀的其他部分存放實際的用戶數據、TCP/IP的報文頭或IPX報文頭等等)。幀通過特定的稱為網路驅動程序的軟體進行成型,然後通過網卡發送到網線上。通過網線到達它們的目的機器,在目的機器的一端執行相反的過程。接收端機器的乙太網卡捕獲到這些幀,並告訴操作系統幀的到達,然後對其進行存儲。就是在這個傳輸和接收的過程中,嗅探器會造成安全方面的問題。每一個在LAN上的工作站都有其硬體地址。這些地址唯一地表示著網路上的機器(這一點於Internet地址系統比較相似)。當用戶發送一個報文時,這些報文就會發送到LAN上所有可用的機器。在一般情況下,網路上所有的機器都可以「聽」到通過的流量,但對不屬於自己的報文則不予響應(換句話說,工作站A不會捕獲屬於工作站B的數據,而是簡單的忽略這些數據)。如果某在工作站的網路介面處於雜收模式,那麼它就可以捕獲網路上所有的報文和幀,如果一個工作站被配置成這樣的方式,它(包括其軟體)就是一個嗅探器。嗅探器可能造成的危害:1.嗅探器能夠捕獲口令2.能夠捕獲專用的或者機密的信息3.可以用來危害網路鄰居的安全,或者用來獲取更高級別的訪問許可權事實上,如果你在網路上存在非授權的嗅探器就以為著你的系統已經暴露在別人面前了。(大家可以試試天行2的嗅探功能)一般我們只嗅探每個報文的前200到300個位元組。用戶名和口令都包含在這一部分中,這是我們關心的真正部分。工人,也可以嗅探給定介面上的所有報文,如果有足夠的空間進行存儲,有足夠的那裡進行處理的話,將會發現另一些非常有趣的東西……簡單的放置一個嗅探器賓將其放到隨便什麼地方將不會起到什麼作用。將嗅探器放置於被攻擊機器或網路附近,這樣將捕獲到很多口令,還有一個比較好的方法就是放在網關上。如果這樣的話就能捕獲網路和其他網路進行身份鑒別的過程。這樣的方式將成倍地增加我們能夠攻擊的范圍。三.誰會使用sniffers可能誰都回知道誰會使用sniffer,但是並不是每個使用它的人都是網路高手,因為現在有很多的sniffer都成了傻瓜似的了,前段時間用的最多的不外乎oicqsniffer。我想那些喜歡查好友ip的朋友都應該記得它吧。呵呵,我都使用過它,現在當然不用了啊!當然系統管理員使用sniffer來分析網路信息交通並且找出網路上何處發生問題。一個安全管理員可以同時用多種sniffer,將它們放置在網路的各處,形成一個入侵警報系統。對於系統管理員來說sniffer是一個非常好的工具,但是它同樣是一個經常被黑客使用的工具.駭客安裝sniffer以獲得用戶名和賬號,信用卡號碼,個人信息,和其他的信息可以導致對你或是你的公司的極大危害如果向壞的方面發展。當它們得到這些信息後,駭客將使用密碼來進攻其他的internet站點甚至倒賣信用卡號碼。三.sniffer是如何在網路上實施的談這個問題之前還應該先說一下Ethernet的通訊。通常在同一個網段的所有網路介面都有訪問在媒體上傳輸的所有數據的能力,而每個網路介面都還應該有一個硬體地址,該硬體地址不同於網路中存在的其它網路介面的硬體地址,同時,每個網路至少還要一個廣播地址。在正常情況下,一個合法的網路介面應該只響應這樣的兩種數據幀:1幀的目標區域具有和本地網路介面相匹配的硬體地址。2幀的目標區域具有「廣播地址」。在接受到上面兩種情況的數據包時,網卡通過cpu產生一個硬體中斷。該中斷能引起操作系統注意,然後將幀中所包含的數據傳送給系統進一步處理。而sniffer就是一種能將本地網卡狀態設成雜亂模式(promiscuousMode)的軟體。當網卡處於雜亂模式時,該網卡具備「廣播地址」,它對所有遇到的每一個幀都產生一個硬體中斷以提醒操作系統處理每一個報文包。(絕大多數的網卡具備設置成雜亂模式的能力。可見,sniffer工作在網路環境中的底層,它會攔截所有的正在網路上傳送的數據。通過相應的軟體處理,可以實時分析這些數據的內容,進而分析所處的網路狀態和整體布局。值得注意的是:sniffer是極其安靜的,它是一種消極的安全攻擊。四.哪裡可以得到sniffer我們講的sniffer,主要是在unix系統下運用的,至於那些oicqsniffer就不在我們討論的范圍。Sniffer是黑客們最常用的入侵手段之一。你可以在經過允許的網路中運行sniffer,了解它是如何有效地危及本地機器安全。Sniffer可以是硬體,也可以是軟體。現在品種最多,應用最廣的是軟體Sniffer,絕大多數黑客們用的也是軟體Sniffer。以下是一些也被廣泛用於調試網路故障的sniffer工具:(一).商用sniffer:1.NetworkGeneral.NetworkGeneral開發了多種產品。最重要的是ExpertSniffer,它不僅僅可以sniff,還能夠通過高性能的專門系統發送/接收數據包,幫助診斷故障。還有一個增強產品"DistrbutedSnifferSystem"可以將UNIX工作站作為sniffer控制台,而將snifferagents(代理)分布到遠程主機上。2.Microsoft'sNetMonitor對於某些商業站點,可能同時需要運行多種協議--NetBEUI、IPX/SPX、TCP/IP、802.3和SNA等。這時很難找到一種sniffer幫助解決網路問題,因為許多sniffer往往將某些正確的協議數據包當成了錯誤數據包。Microsoft的NetMonitor(以前叫Bloodhound)可以解決這個難題。它能夠正確區分諸如Netware控制數據包、NTNetBios名字服務廣播等獨特的數據包。(etherfind只會將這些數據包標識為類型0000的廣播數據包。)這個工具運行在MSWindows平台上。它甚至能夠按MAC地址(或主機名)進行網路統計和會話信息監視。只需簡單地單擊某個會話即可獲得tcpmp標準的輸出。過濾器設置也是最為簡單的,只要在一個對話框中單擊需要監視的主機即可。(二).免費軟體sniffer1.Sniffit由LawrenceBerkeley實驗室開發,運行於Solaris、SGI和Linux等平台。可以選擇源、目標地址或地址集合,還可以選擇監聽的埠、協議和網路介面等。這個SNIFFER默認狀態下只接受最先的400個位元組的信息包,這對於一次登陸會話進程剛剛好。2.SNORT:這個SNIFFER有很多選項供你使用並可移植性強,可以記錄一些連接信息,用來跟蹤一些網路活動。3.TCPDUMP:這個SNIFFER很有名,linux,FREEBSD還搭帶在系統上,是一個被很多UNIX高手認為是一個專業的網路管理工具,記得以前TsutomuShimomura(應該叫下村侵吧)就是使用他自己修改過的TCPDUMP版本來記錄了KEVINMITNICK攻擊他系統的記錄,後來就配合FBI抓住了KEVINMITNICK,後來他寫了一文:使用這些LOG記錄描述了那次的攻擊,((四).Linux下的sniffer工具Linux下的sniffer工具,我推薦Tcpmp。[1].tcpmp的安裝在linux下tcpmp的安裝十分簡單,一般由兩種安裝方式。一種是以rpm包的形式來進行安裝。另外一種是以源程序的形式安裝。1.rpm包的形式安裝這種形式的安裝是最簡單的安裝方法,rpm包是將軟體編譯後打包成二進制的格式,通過rpm命令可以直接安裝,不需要修改任何東西。以超級用戶登錄,使用命令如下:#rpm-ivhtcpmp-3_4a5.rpm這樣tcpmp就順利地安裝到你的linux系統中。怎麼樣,很簡單吧。2.源程序的安裝既然rpm包的安裝很簡單,為什麼還要採用比較復雜的源程序安裝呢其實,linux一個最大的誘人之處就是在她上面有很多軟體是提供源程序的,人們可以修改源程序來滿足自己的特殊的需要。所以我特別建議朋友們都採取這種源程序的安裝方法。·第一步取得源程序在源程序的安裝方式中,我們首先要取得tcpmp的源程序分發包,這種分發包有兩種形式,一種是tar壓縮包(tcpmp-3_4a5.tar.Z),另一種是rpm的分發包(tcpmp-3_4a5.src.rpm)。這兩種形式的內容都是一樣的,不同的僅僅是壓縮的方式.tar的壓縮包可以使用如下命令解開:#tarxvfztcpmp-3_4a5.tar.Zrpm的包可以使用如下命令安裝:#rpm-ivhtcpmp-3_4a5.src.rpm這樣就把tcpmp的源代碼解壓到/usr/src/redhat/SOURCES目錄下.·第二步做好編譯源程序前的准備活動在編譯源程序之前,最好已經確定庫文件libpcap已經安裝完畢,這個庫文件是tcpmp軟體所需的庫文件。同樣,你同時還要有一個標準的c語言編譯器。在linux下標準的c語言編譯器一般是gcc。在tcpmp的源程序目錄中。有一個文件是Makefile.in,configure命令就是從Makefile.in文件中自動產生Makefile文件。在Makefile.in文件中,可以根據系統的配置來修改BINDEST和MANDEST這兩個宏定義,預設值是BINDEST=@sbindir@MANDEST=@mandir@第一個宏值表明安裝tcpmp的二進制文件的路徑名,第二個表明tcpmp的man幫助頁的路徑名,你可以修改它們來滿足系統的需求。·第三步編譯源程序使用源程序目錄中的configure腳本,它從系統中讀出各種所需的屬性。並且根據Makefile.in文件自動生成Makefile文件,以便編譯使用.make命令則根據Makefile文件中的規則編譯tcpmp的源程序。使用makeinstall命令安裝編譯好的tcpmp的二進制文件。總結一下就是:#tarxvfztcpmp-3_4a5.tar.Z#viMakefile.in#./configure#make#makeinstall[2].Tcpmp的使用tcpmp採用命令行方式,它的命令格式為:tcpmp[-adeflnNOpqStvx][-c數量][-F文件名][-i網路介面][-r文件名][-ssnaplen][-T類型][-w文件名][表達式]1.tcpmp的選項介紹-a將網路地址和廣播地址轉變成名字;-d將匹配信息包的代碼以人們能夠理解的匯編格式給出;-dd將匹配信息包的代碼以c語言程序段的格式給出;-ddd將匹配信息包的代碼以十進制的形式給出;-e在輸出行列印出數據鏈路層的頭部信息;-f將外部的Internet地址以數字的形式列印出來;-l使標准輸出變為緩沖行形式;-n不把網路地址轉換成名字;-t在輸出的每一行不列印時間戳;-v輸出一個稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息;-vv輸出詳細的報文信息;-c在收到指定的包的數目後,tcpmp就會停止;-F從指定的文件中讀取表達式,忽略其它的表達式;-i指定監聽的網路介面;-r從指定的文件中讀取包(這些包一般通過-w選項產生);-w直接將包寫入文件中,並不分析和列印出來;-T將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc(遠程過程調用)和snmp(簡單網路管理協議;)2.tcpmp的表達式介紹表達式是一個正則表達式,tcpmp利用它作為過濾報文的條件,如果一個報文滿足表達式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網路上所有的信息包將會被截獲。在表達式中一般如下幾種類型的關鍵字,一種是關於類型的關鍵字,主要包括host,net,port,例如host210.27.48.2,指明210.27.48.2是一台主機,net202.0.0.0指明202.0.0.0是一個網路地址,port23指明埠號是23。如果沒有指定類型,預設的類型是host.第二種是確定傳輸方向的關鍵字,主要包括src,dst,dstorsrc,dstandsrc,這些關鍵字指明了傳輸的方向。舉例說明,src210.27.48.2,指明ip包中源地址是210.27.48.2,dstnet202.0.0.0指明目的網路地址是202.0.0.0。如果沒有指明方向關鍵字,則預設是srcordst關鍵字。第三種是協議的關鍵字,主要包括fddi,ip,arp,rarp,tcp,udp等類型。Fddi指明是在FDDI(分布式光纖數據介面網路)上的特定的網路協議,實際上它是"ether"的別名,fddi和ether具有類似的源地址和目的地址,所以可以將fddi協議包當作ether的包進行處理和分析。其他的幾個關鍵字就是指明了監聽的包的協議內容。如果沒有指定任何協議,則tcpmp將會監聽所有協議的信息包。除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway,broadcast,less,greater,還有三種邏輯運算,取非運算是'not''!',與運算是'and','&&';或運算是'or','';這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要,下面舉幾個例子來說明。(1)想要截獲所有210.27.48.1的主機收到的和發出的所有的數據包:#tcpmphost210.27.48.1(2)想要截獲主機210.27.48.1和主機210.27.48.2或210.27.48.3的通信,使用命令:(在命令行中適用括弧時,一定要#tcpmphost210.27.48.1and\(210.27.48.2or210.27.48.3\)(3)如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通信的ip包,使用命令:#tcpmpiphost210.27.48.1and!210.27.48.2(4)如果想要獲取主機210.27.48.1接收或發出的telnet包,使用如下命令:#tcpmptcpport23host210.27.48.13.tcpmp的輸出結果介紹下面我們介紹幾種典型的tcpmp命令的輸出信息(1)數據鏈路層頭信息使用命令#tcpmp--ehosticeice是一台裝有linux的主機,她的MAC地址是0:90:27:58:AF:1AH219是一台裝有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一條命令的輸出結果如下所示:21:50:12.847509eth08:0:20:79:5b:460:90:27:58:af:1aip60:h219.33357>ice.telnet0:0(0)ack22535win8760(DF)分析:21:50:12是顯示的時間,847509是ID號,eth0表示從網路介面設備發送數據包,8:0:20:79:5b:46是主機H219的MAC地址,它表明是從源地址H219發來的數據包.0:90:27:58:af:1a是主機ICE的MAC地址,表示該數據包的目的地址是ICE.ip是表明該數據包是IP數據包,60是數據包的長度,h219.33357>ice.telnet表明該數據包是從主機H219的33357埠發往主機ICE的TELNET(23)埠.ack22535表明對序列號是222535的包進行響應.win8760表明發送窗口的大小是8760.(2)ARP包的TCPDUMP輸出信息使用命令#tcpmparp得到的輸出結果是:22:32:42.802509eth0>arpwho-hasroutetellice(0:90:27:58:af:1a)22:32:42.802902eth0表明從主機發出該數據包,arp表明是ARP請求包,who-hasroutetellice表明是主機ICE請求主機ROUTE的MAC地址。0:90:27:58:af:1a是主機ICE的MAC地址。(3)TCP包的輸出信息用TCPDUMP捕獲的TCP包的一般輸出信息是:src>dst:flagsdata->dst:表明從源地址到目的地址,flags是TCP包中的標志信息,S是SYN標志,F(FIN),P(PUSH),R(RST)"."(沒有標記);data-seqno是數據包中的數據的順序號,ack是下次期望的順序號,window是接收緩存的窗口大小,urgent表明數據包中是否有緊急指針.Options是選項.(4)UDP包的輸出信息用TCPDUMP捕獲的UDP包的一般輸出信息是:route.port1>ice.port2:udplenthUDP十分簡單,上面的輸出行表明從主機ROUTE的port1埠發出的一個UDP數據包到主機ICE的port2埠,類型是UDP,包的長度是lenth上面,我就詳細介紹了TCPDUMP的安裝和使用,希望會對大家有所幫助。如果想要熟練運用TCPDUMP這個LINUX環境下的SNIFFER利器,還需要大家在實踐中總結經驗,充分發揮它的威力。(五).windows平台上的sniffer我推薦netxray和snifferpro軟體,想必大家都用過他們,不過我在這兒還要再簡單介紹一下他們。
3. java使用redis時不時的報沒有可用的鏈接
出現這種問題從以下幾個方面排查:
1、網路不穩定,這種情況只會出現在調用機器和redis伺服器不在同一台機器的情況,如果調用本機redis請忽略。
2、使用了連接池,並發較大,連接池配置的最大連接數過小,客戶端從連接池獲取連接時,如果沒有可用連接就阻塞當前線程直到有可用連接,等待時間超過配置的超時時間後會拋出連接超時異常。
3、同樣是使用連接池的情況,從連接池獲取連接,使用完成後沒有釋放連接,導致連接池鏈接耗盡。
4、還有可能是硬體性能瓶頸,比如單節點的redis,但是需要支持特別大的並發量,無論怎麼優化配置都是徒勞的,這種情況就需要考慮做讀寫分離,搭建redis集群等,
4. java連接redis超時問題怎麼解決
應該是redis本身的服務有問題了
本文所針對的連接超時問題所涉及的相關元素如下:
Redis客戶端: Jedis (java)
Redis版本 :2.8.12
Redis部署操作系統類型:Linux
正文開始:
No 1.Redis執行大命令(時間復雜度為O(N)的命令)
問題剖析:
a.Redis伺服器端通過單線程處理命令,一旦有大命令被執行,Redis將無法及時響應來自客戶端的任何命令
關於Redis大命令的監控,可以查看slowlog來觀察
b.在使用jedis作為redis客戶端時,當redis連接池的配置參數testOnBorrow=true時,默認會在獲取redis連接
時,先執行redis的ping方法,而基於原因a,此時redis將無法及時響應,自然會報出time out異常
如何解決:
a.盡量避免使用時間復雜度為O(N)的命令
b.如果無法避免使用時間復雜度為O(N)的命令,則應降低其使用頻率,避免在業務高峰期時使用
No 2.Redis單次操作數據包過大
問題分析
a.單次操作數據包過大,且操作頻繁,極有可能會導致網路擁堵
b.在使用jedis作為redis客戶端時,當redis連接池的配置參數testOnBorrow=true時,默認會在獲取redis連接
時,先執行redis的ping方法,而基於原因a,此時redis將無法及時響應,自然會報出time out異常
如何解決:
a.排查代碼,確定是否存在大數據(數據條目過多/單條數據過大)操作,將其進行改造,改造方案有兩個:
a1.數據拆分,變更數據類型(常見的情況是將java中的collection類型序列化後存入redis的String數據
類型中),如將String數據類型調整為hash/list/set等,這常用於解決單條數據量過大的情況
a2.調整業務邏輯,減少單次數據查詢范圍(常見的情況如將redis中的整個hash數據取回,在應用程序內存中獲取需要的entry),如使用hget等單條查詢命令替換hgetall命令
5. Windows下訪問Linux下的Redis,兩者能互ping,防火牆相關埠也開啟,路由表也添加了,但仍無法訪問
redis默認只能localhost登錄,遠程登錄需要在redis的配置文件redis.conf中,找到bind localhost注釋掉。
6. redis為什麼連接不上虛擬機的Sentinel
我估計你是網路沒調試通過,主機和虛擬機能相互PING通嗎?虛擬機的網卡要設置為橋接方式,這樣才能組網。如果兩個機器成功組成了區域網,資料庫連接是很容易的。你這兩個機器就不要啟動防火牆什麼的了。
7. redis網路丟包怎麼解決
redis 常見問題與處理方法
1.VIP:port 提供服務:
唯一標記一個redis實例的是ip和埠,前端是用tcp方式來訪問redis的,我們提供給應用訪問的是一個vip+63379(一般使用63379) 埠,,vip一定是在master上面的.
因此我們執行如下命令檢查redis狀態:
[wls81@CNSH044446 ~]$ /wls/wls81/redis/bin/redis-cli -h {vip} -p 63379 -a {password} info replication
# Replication
role:master
connected_slaves:1
slave0:ip=10.11.93.12,port=63379,state=online,offset=146649,lag=1
master_repl_offset:146649
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:146648
上面的role這個值一定是master的,只要保證vip在master上我們的Padis cache服務就是沒有問題的,如果不通或者role的角色是slave
8. connection refused redis怎麼解決
1、Redis.conf配置文件中 注釋掉 bind 127.0.0.1
2、防火牆關閉(或添加可訪問的埠,具體不在此描述)
最後一個坑 虛擬機網路配置 使用網路地址轉換的方式時,需要配置埠轉發規則,添加redis服務6379埠
在windows系統中打開cmd 輸入telnet 192.168.56.1 6379 (telnet ip port)測試是否可以正常連接,如果能聯通則表示可以正常連接!
9. redis主要解決什麼問題
redis是內存資料庫,訪問速度非常快,所以能夠解決的也都是這些緩存類型的問題,如下:
1、會話緩存(Session Cache)
最常用的一種使用Redis的情景是會話緩存(session cache)。用Redis緩存會話比其他存儲(如Memcached)的優勢在於:Redis提供持久化。當維護一個不是嚴格要求一致性的緩存時,如果用戶的購物車信息全部丟失,大部分人都會不高興的,現在,他們還會這樣嗎?
幸運的是,隨著 Redis 這些年的改進,很容易找到怎麼恰當的使用Redis來緩存會話的文檔。甚至廣為人知的商業平台Magento也提供Redis的插件。
2、全頁緩存(FPC)
除基本的會話token之外,Redis還提供很簡便的FPC平台。回到一致性問題,即使重啟了Redis實例,因為有磁碟的持久化,用戶也不會看到頁面載入速度的下降,這是一個極大改進,類似PHP本地FPC。
再次以Magento為例,Magento提供一個插件來使用Redis作為全頁緩存後端。
此外,對WordPress的用戶來說,Pantheon有一個非常好的插件 wp-redis,這個插件能幫助你以最快速度載入你曾瀏覽過的頁面。
3、隊列
Reids在內存存儲引擎領域的一大優點是提供 list 和 set 操作,這使得Redis能作為一個很好的消息隊列平台來使用。Redis作為隊列使用的操作,就類似於本地程序語言(如Python)對 list 的 push/pop 操作。
如果你快速的在Google中搜索「Redis queues」,你馬上就能找到大量的開源項目,這些項目的目的就是利用Redis創建非常好的後端工具,以滿足各種隊列需求。例如,Celery有一個後台就是使用Redis作為broker,你可以從這里去查看。
排行榜/計數器
Redis在內存中對數字進行遞增或遞減的操作實現的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執行這些操作的時候變的非常簡單,Redis只是正好提供了這兩種數據結構。所以,我們要從排序集合中獲取到排名最靠前的10個用戶–我們稱之為「user_scores」,我們只需要像下面一樣執行即可:
當然,這是假定你是根據你用戶的分數做遞增的排序。如果你想返回用戶及用戶的分數,你需要這樣執行:
ZRANGE user_scores 0 10 WITHSCORES
Agora Games就是一個很好的例子,用Ruby實現的,它的排行榜就是使用Redis來存儲數據的,你可以在這里看到。
5、發布/訂閱
最後(但肯定不是最不重要的)是Redis的發布/訂閱功能。發布/訂閱的使用場景確實非常多。我已看見人們在社交網路連接中使用,還可作為基於發布/訂閱的腳本觸發器,甚至用Redis的發布/訂閱功能來建立聊天系統!(不,這是真的,你可以去核實)。
Redis提供的所有特性中,我感覺這個是喜歡的人最少的一個,雖然它為用戶提供如果此多功能。
等等?
10. 如何正確使用Redis長連接
連接->傳輸數據->保持連接 -> 傳輸數據-> ...........->直到一方關閉連接,多是客戶端關閉連接。 長連接指建立SOCKET連接後不管是否使用都保持連接,但安全性較差。 連接->傳輸數據->關閉連接 比如HTTP是無狀態的的短鏈接,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。 具體就是 瀏覽器client發起並建立TCP連接 -> client發送HttpRequest報文 -> server接收到報文->server handle並發送HttpResponse報文給前端,發送完畢之後立即調用socket.close方法 ->client接收response報文->client最終會收到server端斷開TCP連接的信號->client 端斷開TCP連接,具體就是調用close方法。 網路上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket