<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                5種數據結構組成了Redis的基礎,其他沒有關聯特定數據結構的命令也有很多。我們已經看過一些這樣的命令:`info`,`select`,?`flushdb`,?`multi`,?`exec`,?`discard`,?`watch`和`keys`。這一章將看看其他的一些重要命令。 ## 使用期限(Expiration) Redis允許你標記一個關鍵字的使用期限。你可以給予一個Unix時間戳形式(自1970年1月1日起)的絕對時間,或者一個基于秒的存活時間。這是一個基于關鍵字的命令,因此其不在乎關鍵字表示的是哪種類型的數據結構。 ~~~ expire pages:about 30 expireat pages:about 1356933600 ~~~ 第一個命令將會在30秒后刪除掉關鍵字(包括其關聯的值)。第二個命令則會在2012年12月31日上午12點刪除掉關鍵字。 這讓Redis能成為一個理想的緩沖引擎。通過`ttl`命令,你可以知道一個關鍵字還能夠存活多久。而通過`persist`命令,你可以把一個關鍵字的使用期限刪除掉。 ~~~ ttl pages:about persist pages:about ~~~ 最后,有個特殊的字符串命令,`setex`命令讓你可以在一個單獨的原子命令里設置一個字符串值,同時里指定一個生存期(這比任何事情都要方便)。 ~~~ setex pages:about 30 '<h1>about us</h1>....' ~~~ ## 發布和訂閱(Publication and Subscriptions) Redis的列表數據結構有`blpop`和`brpop`命令,能從列表里返回且刪除第一個(或最后一個)元素,或者被堵塞,直到有一個元素可供操作。這可以用來實現一個簡單的隊列。 (譯注:對于`blpop`和`brpop`命令,如果列表里沒有關鍵字可供操作,連接將被堵塞,直到有另外的Redis客戶端使用`lpush`或`rpush`命令推入關鍵字為止。) 此外,Redis對于消息發布和頻道訂閱有著一流的支持。你可以打開第二個`redis-cli`窗口,去嘗試一下這些功能。在第一個窗口里訂閱一個頻道(我們會稱它為`warnings`): ~~~ subscribe warnings ~~~ 其將會答復你訂閱的信息。現在,在另一個窗口,發布一條消息到`warnings`頻道: ~~~ publish warnings "it's over 9000!" ~~~ 如果你回到第一個窗口,你應該已經接收到`warnings`頻道發來的消息。 你可以訂閱多個頻道(`subscribe channel1 channel2 ...`),訂閱一組基于模式的頻道(`psubscribe warnings:*`),以及使用`unsubscribe`和`punsubscribe`命令停止監聽一個或多個頻道,或一個頻道模式。 最后,可以注意到`publish`命令的返回值是1,這指出了接收到消息的客戶端數量。 ## 監控和延遲日志(Monitor and Slow Log) `monitor`命令可以讓你查看Redis正在做什么。這是一個優秀的調試工具,能讓你了解你的程序如何與Redis進行交互。在兩個`redis-cli`窗口中選一個(如果其中一個還處于訂閱狀態,你可以使用`unsubscribe`命令退訂,或者直接關掉窗口再重新打開一個新窗口)鍵入`monitor`命令。在另一個窗口,執行任何其他類型的命令(例如`get`或`set`命令)。在第一個窗口里,你應該可以看到這些命令,包括他們的參數。 在實際生產環境里,你應該謹慎運行`monitor`命令,這真的僅僅就是一個很有用的調試和開發工具。除此之外,沒有更多要說的了。 隨同`monitor`命令一起,Redis擁有一個`slowlog`命令,這是一個優秀的性能剖析工具。其會記錄執行時間超過一定數量微秒的命令。在下一章節,我們會簡略地涉及如何配置Redis,現在你可以按下面的輸入配置Redis去記錄所有的命令: ~~~ config set slowlog-log-slower-than 0 ~~~ 然后,執行一些命令。最后,你可以檢索到所有日志,或者檢索最近的那些日志: ~~~ slowlog get slowlog get 10 ~~~ 通過鍵入`slowlog len`,你可以獲取延遲日志里的日志數量。 對于每個被你鍵入的命令,你應該查看4個參數: * 一個自動遞增的id * 一個Unix時間戳,表示命令開始運行的時間 * 一個微妙級的時間,顯示命令運行的總時間 * 該命令以及所帶參數 延遲日志保存在存儲器中,因此在生產環境中運行(即使有一個低閥值)也應該不是一個問題。默認情況下,它將會追蹤最近的1024個日志。 ## 排序(Sort) `sort`命令是Redis最強大的命令之一。它讓你可以在一個列表、集合或者分類集合里對值進行排序(分類集合是通過標記來進行排序,而不是集合里的成員)。下面是一個`sort`命令的簡單用例: ~~~ rpush users:leto:guesses 5 9 10 2 4 10 19 2 sort users:leto:guesses ~~~ 這將返回進行升序排序后的值。這里有一個更高級的例子: ~~~ sadd friends:ghanima leto paul chani jessica alia duncan sort friends:ghanima limit 0 3 desc alpha ~~~ 上面的命令向我們展示了,如何對已排序的記錄進行分頁(通過`limit`),如何返回降序排序的結果(通過`desc`),以及如何用字典序排序代替數值序排序(通過`alpha`)。 `sort`命令的真正力量是其基于引用對象來進行排序的能力。早先的時候,我們說明了列表、集合和分類集合很常被用于引用其他的Redis對象,`sort`命令能夠解引用這些關系,而且通過潛在值來進行排序。例如,假設我們有一個Bug追蹤器能讓用戶看到各類已存在問題。我們可能使用一個集合數據結構去追蹤正在被監視的問題: ~~~ sadd watch:leto 12339 1382 338 9338 ~~~ 你可能會有強烈的感覺,想要通過id來排序這些問題(默認的排序就是這樣的),但是,我們更可能是通過問題的嚴重性來對這些問題進行排序。為此,我們要告訴Redis將使用什么模式來進行排序。首先,為了可以看到一個有意義的結果,讓我們添加多一點數據: ~~~ set severity:12339 3 set severity:1382 2 set severity:338 5 set severity:9338 4 ~~~ 要通過問題的嚴重性來降序排序這些Bug,你可以這樣做: ~~~ sort watch:leto by severity:* desc ~~~ Redis將會用存儲在列表(集合或分類集合)中的值去替代模式中的`*`(通過`by`)。這會創建出關鍵字名字,Redis將通過查詢其實際值來排序。 在Redis里,雖然你可以有成千上萬個關鍵字,類似上面展示的關系還是會引起一些混亂。幸好,`sort`命令也可以工作在散列數據結構及其相關域里。相對于擁有大量的高層次關鍵字,你可以利用散列: ~~~ hset bug:12339 severity 3 hset bug:12339 priority 1 hset bug:12339 details "{id: 12339, ....}" hset bug:1382 severity 2 hset bug:1382 priority 2 hset bug:1382 details "{id: 1382, ....}" hset bug:338 severity 5 hset bug:338 priority 3 hset bug:338 details "{id: 338, ....}" hset bug:9338 severity 4 hset bug:9338 priority 2 hset bug:9338 details "{id: 9338, ....}" ~~~ 所有的事情不僅變得更為容易管理,而且我們能通過`severity`或`priority`來進行排序,還可以告訴`sort`命令具體要檢索出哪一個域的數據: ~~~ sort watch:leto by bug:*->priority get bug:*->details ~~~ 相同的值替代出現了,但Redis還能識別`->`符號,用它來查看散列中指定的域。里面還包括了`get`參數,這里也會進行值替代和域查看,從而檢索出Bug的細節(details域的數據)。 對于太大的集合,`sort`命令的執行可能會變得很慢。好消息是,`sort`命令的輸出可以被存儲起來: ~~~ sort watch:leto by bug:*->priority get bug:*->details store watch_by_priority:leto ~~~ 使用我們已經看過的`expiration`命令,再結合`sort`命令的`store`能力,這是一個美妙的組合。 ## 小結 這一章主要關注那些非特定數據結構關聯的命令。和其他事情一樣,它們的使用依情況而定。構建一個程序或特性時,可能不會用到使用期限、發布和訂閱或者排序等功能。但知道這些功能的存在是很好的。而且,我們也只接觸到了一些命令。還有更多的命令,當你消化理解完這本書后,非常值得去瀏覽一下[完整的命令列表](http://redis.io/commands)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看