<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [toc] ## 基礎key select num 數據庫選擇 默認有16[0到15]個數據庫,默認自動選擇0號數據庫 move key num 移動key到num服務器 del key [key ...] 刪除給定的一個或多個 key 。 exists key 檢查給定 key 是否存在。 expire key 整型值 設置key的生命周期 單位秒數 如果為p(pexpire)單位就變為毫秒 expireat key timestamp 指定key在UNIX 時間戳(unix timestamp)變失效 KEYS pattern 查找所有符合給定模式 pattern 的 key 。 - `KEYS *` 匹配數據庫中所有 key 。 - `KEYS h?llo` 通配單個字符 如 hello , hallo 和 hxllo 等。 - `KEYS h*llo` 通配任意多個字符(包括沒有) 如hllo 和 heeeeello 等。 - `KEYS h[ae]llo` 通配括號內的某1個字符 如hello 和 hallo ,但不匹配 hillo 。 **特殊符號用 \ 隔開。** ttl key 查詢key的生命周期 默認-1,永久有效; 單位秒數 如果為(pttl)單位就變為毫秒 persist key 不讓key失效; randomkey 從當前數據庫中隨機返回(不刪除)一個 key 。 rename key newkey 將 key 改名為 newkey 。 renamenx key newkey 當且僅當 newkey 不存在時,將 key 改名為 newkey 。 type key 返回 key 所儲存的值的類型。 flushdb 清空當前數據庫; ## SORT與SCAN 這兩個命令稍微復雜一點,所以單獨拎出來講 ### sort SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination] 如果要把redis作為noSql來用的話,該命令就是一個非常重要的命令了,作用有 **分頁,排序,數據關聯** #### 排序 **按數值排序** ``` # 開銷金額列表 redis> LPUSH today_cost 30 1.5 10 8 (integer) 4 # 排序 redis> SORT today_cost 1) "1.5" 2) "8" 3) "10" 4) "30" # 逆序排序 redis 127.0.0.1:6379> SORT today_cost DESC 1) "30" 2) "10" 3) "8" 4) "1.5" ``` **按字符串排序** 必須顯示的指定 alpha 選項才能進行排序,否則不能排序; ``` 127.0.0.1:6379> SORT website (error) ERR One or more scores can't be converted into double 127.0.0.1:6379> SORT website alpha 1) "www.alipay.com" 2) "www.baidu.com" 3) "www.china.com" 4) "www.sina.com" 5) "www.tence.com" 127.0.0.1:6379> SORT website alpha desc 1) "www.tence.com" 2) "www.sina.com" 3) "www.china.com" 4) "www.baidu.com" 5) "www.alipay.com" ``` **limit** 排序從0開始算 ``` 127.0.0.1:6379> SORT testnum limit 5 (error) ERR syntax error 127.0.0.1:6379> SORT testnum limit 5 10 1) "5" 2) "6" 3) "8" 4) "9" 5) "10" 6) "11" 7) "24" ``` **關聯外部數據** ``` # admin redis 127.0.0.1:6379> LPUSH uid 1 (integer) 1 redis 127.0.0.1:6379> SET user_name_1 admin OK redis 127.0.0.1:6379> SET user_level_1 9999 OK # jack redis 127.0.0.1:6379> LPUSH uid 2 (integer) 2 redis 127.0.0.1:6379> SET user_name_2 jack OK redis 127.0.0.1:6379> SET user_level_2 10 OK # peter redis 127.0.0.1:6379> LPUSH uid 3 (integer) 3 redis 127.0.0.1:6379> SET user_name_3 peter OK redis 127.0.0.1:6379> SET user_level_3 25 OK # mary redis 127.0.0.1:6379> LPUSH uid 4 (integer) 4 redis 127.0.0.1:6379> SET user_name_4 mary OK redis 127.0.0.1:6379> SET user_level_4 70 OK ``` ``` redis 127.0.0.1:6379> SORT uid 1) "1" # admin 2) "2" # jack 3) "3" # peter 4) "4" # mary # ↓↓ 根據外部的level來排序 redis 127.0.0.1:6379> SORT uid BY user_level_* 1) "2" # jack , level = 10 2) "3" # peter, level = 25 3) "4" # mary, level = 70 4) "1" # admin, level = 9999 ``` `user_level_*` 是一個占位符, 它先取出 uid 中的值, 然后再用這個值來查找相應的鍵。 ``` # 獲取關聯數據 127.0.0.1:6379> sort uid get user_name_* 1) "admin" 2) "jack" 3) "peter" 4) "mary" 127.0.0.1:6379> sort uid get user_name_* by user_level_* 1) "jack" 2) "peter" 3) "mary" 4) "admin" # 獲取多個外部鍵 redis 127.0.0.1:6379> SORT uid GET user_level_* GET user_name_* 1) "9999" # level 2) "admin" # name 3) "10" 4) "jack" 5) "25" 6) "peter" 7) "70" 8) "mary" # 占位符 # 可以獲得當前uid的值,這里由于markdown語法的問題,所以臨時轉義一下; 127.0.0.1:6379> sort uid desc get \# get user_level_* get user_name_* 1) "4" 2) "70" 3) "mary" 4) "3" 5) "25" 6) "peter" 7) "2" 8) "10" 9) "jack" 10) "1" 11) "999" 12) "admin" ``` 根據 `not-exists-key` 可以忽略排序,感覺沒什么用 redis 127.0.0.1:6379> SORT uid BY not-exists-key GET # GET user_level_* GET user_name_* 1) "4" # id 2) "70" # level 3) "mary" # name 4) "3" 5) "25" 6) "peter" 7) "2" 8) "10" 9) "jack" 10) "1" 11) "9999" 12) "admin" **關于哈希表的關聯** BY 和 GET 選項都可以用 key->field 的格式來獲取哈希表中的域的值, 其中 key 表示哈希表鍵, 而 field 則表示哈希表的域; ``` redis 127.0.0.1:6379> HMSET user_info_1 name admin level 9999 OK redis 127.0.0.1:6379> HMSET user_info_2 name jack level 10 OK redis 127.0.0.1:6379> HMSET user_info_3 name peter level 25 OK redis 127.0.0.1:6379> HMSET user_info_4 name mary level 70 OK 127.0.0.1:6379> SORT uid get # get user_info_*->level by user_info_*->level desc 1) "1" 2) "9999" 3) "4" 4) "70" 5) "3" 6) "25" 7) "2" 8) "10" ``` **保存sort結果** ``` 127.0.0.1:6379> SORT uid get # get user_info_*->name by user_info_*->level desc store user_level_desc_name (integer) 8 127.0.0.1:6379> EXPIRE user_level_desc_name 60 (integer) 1 ``` 可以通過將 SORT 命令的執行結果保存,并用 EXPIRE 為結果設置生存時間,以此來產生一個 SORT 操作的結果緩存。 這樣就可以避免對 SORT 操作的頻繁調用:只有當結果集過期時,才需要再調用一次 SORT 操作。 另外,為了正確實現這一用法,你可能需要加鎖以避免多個客戶端同時進行緩存重建(也就是多個客戶端,同一時間進行 SORT 操作,并保存為結果集),這一般是用在數據量較大的時候,在程序里面做如下操作: 1. 先判斷 `user_level_desc_name` 有沒有;如果有就直接取出; 2. 如果沒有,然后用`setnx`加個鎖(時間具體看數據大小,或者建立完緩存再讓其失效),來建立緩存(這時如果有其他進程訪問,就會判斷到有這個鎖就不建立緩存),然后返回數據; 以上參考: http://doc.redisfans.com/key/sort.html ### scan SCAN cursor [MATCH pattern] [COUNT count] SCAN 命令及其相關的 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements): - SCAN 命令用于迭代當前數據庫中的數據庫鍵。 - SSCAN 命令用于迭代集合鍵中的元素。 - HSCAN 命令用于迭代哈希鍵中的鍵值對。 - ZSCAN 命令用于迭代有序集合中的元素(包括元素成員和元素分值)。 當 KEYS 命令被用于處理一個大的數據庫時, 又或者 SMEMBERS 命令被用于處理一個大的集合鍵時, 它們可能會阻塞服務器達數秒之久。這時候就要選擇用 SCAN 命令了。 使用 SMEMBERS 命令可以返回集合鍵當前包含的所有元素, 但是對于 SCAN 這類增量式迭代命令來說, 因為在對鍵進行增量式迭代的過程中, 鍵可能會被修改, 所以增量式迭代命令只能對被返回的元素提供有限的保證 (offer limited guarantees about the returned elements)。 > SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一個參數總是一個數據庫鍵。而 SCAN 命令則不需要在第一個參數提供任何數據庫鍵 —— 因為它迭代的是當前數據庫中的所有數據庫鍵。 SCAN 命令是一個基于游標的迭代器,每次被調用之后, 都會向用戶返回一個新的游標, 用戶在下次迭代時需要使用這個新游標作為 SCAN 命令的游標參數, 以此來延續之前的迭代過程。當 SCAN 命令的游標參數被設置為 0 時, 服務器將開始一次新的迭代, 而當服務器向用戶返回值為 0 的游標時, 表示迭代已結束。 ``` redis 127.0.0.1:6379> scan 0 1) "17" # 當前迭代的游標到17 2) 1) "key:12" 2) "key:8" 3) "key:4" 4) "key:14" 5) "key:16" 6) "key:17" 7) "key:15" 8) "key:10" 9) "key:3" 10) "key:7" 11) "key:1" redis 127.0.0.1:6379> scan 17 1) "0" # 然后從17開始繼續迭代,迭代到0就代表迭代結束,它會自動rewind; 2) 1) "key:5" 2) "key:18" 3) "key:0" 4) "key:2" 5) "key:19" 6) "key:13" 7) "key:6" 8) "key:9" 9) "key:11" # 也可以通過count來限制每次迭代的數量,注意,在每次迭代時這個count的值可以不一樣; 127.0.0.1:6379> scan 0 count 5 1) "28" 2) 1) "member1" 2) "user_info_1" 3) "user_name_3" 4) "user_level_4" 5) "coll" ``` ### 使用MATCH 選項 通過給定 MATCH <pattern> 參數可以實現 keys 那樣的按模式迭代;但是,這里的按模式迭代和keys有一些本質上的區別: 對元素的模式匹配工作是在**命令從數據集中取出元素之后**, 向客戶端返回元素之前的這段時間內進行的, 所以如果被迭代的數據集中只有少量元素和模式相匹配, 那么迭代命令或許會在多次執行中都不返回任何元素。 ``` redis 127.0.0.1:6379> scan 224 MATCH *11* 1) "80" 2) (empty list or set) redis 127.0.0.1:6379> scan 80 MATCH *11* 1) "176" 2) (empty list or set) redis 127.0.0.1:6379> scan 176 MATCH *11* COUNT 1000 1) "0" 2) 1) "key:611" 2) "key:711" 3) "key:118" 4) "key:117" 5) "key:311" 6) "key:112" 7) "key:111" 8) "key:110" 9) "key:113" 10) "key:211" 11) "key:411" 12) "key:115" 13) "key:116" 14) "key:114" 15) "key:119" 16) "key:811" 17) "key:511" 18) "key:11" ``` 更多請參考: http://doc.redisfans.com/key/index.html
                  <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>

                              哎呀哎呀视频在线观看