<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之旅 廣告
                # redis-數據類型和發布訂閱 [TOC] ## 一、 redis數據類型 1. redis支持5種數據類型 ```sh String 字符串 Hash 哈希 List 列表 Set 集合 Sorted set 有序集合 ``` 2. 基礎命令 ```sh set 設置key get 獲取key的值 exists 判斷key是否存在 keys 顯示所有的key del 刪除指定的key type 獲取key的類型 ``` 更多詳細命令見官方中文站點。redis.cn和redisdoc.com ## 二、 數據類型命令和操作 ### 1. 字符串類型 1) 操作命令 ```sh set 設置key get 獲取key的值 mset 同時設置多個key mget 同時獲取抖個key del 刪除指定的key append 追加內容到value strlen 獲取字符串key的長度 incr 自增key值 inryby 指定步長的自增key decr 自減key值 decrby 指定步長的自減key incrbyfloat 浮點類型的自增 ``` 2) 簡單舉例: ```sh 10.0.0.41:6379> append luokey 123 (integer) 10 #追加值到key中 10.0.0.41:6379> get luokey "luogang123" 10.0.0.41:6379> incr abc (integer) 1 #自增 10.0.0.41:6379> incr abc (integer) 2 10.0.0.41:6379> incrby abc 3 (integer) 7 #步長為3的自增 10.0.0.41:6379> decr abc (integer) 6 #自減 10.0.0.41:6379> decrby abc 2 (integer) 4 #補償為2的自減 10.0.0.41:6379> mset key1 a key2 b key3 c OK #設置多個key root@xxx ~]# 10.0.0.41:6379> mget key1 key2 key3 1) "a" #同時獲取多個key 2) "b" 3) "c" ``` 3) 應用場景 常規計數:微博數,粉絲數等。 ### 2. 哈希類型命令(字典類型) 此類型的鍵最多232-1個,此類key中,可以存放多個數據,例如一本書的屬性,顏色、價格、大小,可以存儲在同一個哈希類型的key中,而不用分別存儲在三個字符串類型的key中 1) 命令 ```sh hset 設置哈希key的一個字段的值 hget 獲取哈希key的一個字段的值 hmset 設置一個哈希key的多個字段的值 hmget 獲取一個哈希key的多個字段的值 hgetall 獲取一個哈希key的所有字段的值 hdel 刪除一個哈希key的一個字段 del 刪除一個哈希key ``` 2) 簡單舉例: ```sh 11.10.0.0.41:6379> hset car name bmw (integer) 1 #設置key car的name字段的值 10.0.0.41:6379> hset car price 500 (integer) 1 #設置key car的PRICE字段的值 10.0.0.41:6379> hmget car name price 1) "bmw" #查看哈希key car的多個字段的值 2) "500" 10.0.0.41:6379> hmset book name sguo price 100 color red OK #設置哈希key name的多個字段 10.0.0.41:6379> hdel book name (integer) 1 #刪除某個字段 10.0.0.41:6379> hgetall book 1) "price" #查看該key所有字段的值 2) "100" 3) "color" 4) "red" 3) 應用場景 ``` 存儲部分變更的數據,如用戶信息等。 3. 列表類型 用來存取一個有序的字符串的列表,可以分別從列表的兩側插入數據,也可以分別從列表兩側讀取(彈出)數據。0表示第一個元素,-1表示最后一個元素,-2表示倒數第二個元素 1) 命令 ```sh lpush 從列表左側插入數據,可一次性插入多個元素 lpop 從列表左側彈出數據 rpush 從列表右側插入數據,可一次性插入多個元素 rpop 從列表右側彈出數據 lrange 讀取列表指定范圍的數據 lrem 從存于 key 的列表里移除前 count 次出現的值為 value 的元素 count > 0: 從頭往尾移除值為 value 的元素。 count < 0: 從尾往頭移除值為 value 的元素。 count = 0: 移除所有值為 value 的元素。 ``` 2) 簡單舉例: ```sh 11.10.0.0.41:6379> lpush mylist k1 k2 (integer) 2 #從左側插入兩個數據 10.0.0.41:6379> rpush mylist k3 k4 (integer) 4 #從右側插入兩個數據 10.0.0.41:6379> lrange mylist 0 -1 1) "k2" #查看所有數據 2) "k1" 3) "k3" 4) "k4" 10.0.0.41:6379> lpop mylist "k2" 從左側彈出數據 10.0.0.41:6379> lpop mylist "k1" 10.0.0.41:6379> lpop mylist "k3" 10.0.0.41:6379> lpop mylist "k4" 10.0.0.41:6379> lpop mylist (nil) #數據彈出完后,列表就為空 lrem mylist 0 k1 (integer) 1 #移除列表中所有值為k1的元素 ``` 3) 應用場景 消息隊列系統,比如sina微博, 微信朋友圈 ### 4. 無序集合和有序集合 集合的概念就是定義一組數據,可以對這種類型的數據取交集、并集、差集等,合計分為無序合計和有序合計,差別是有序合集中的每個子,都有一個分數,可以根據分數排序或導出,無序集合命令已s開頭,有序集合命令以z開頭。 1) 命令 ```sh sadd 添加一個多多個元素到集合里 scard 獲取集合里面的元素數量 sinter 獲取兩個集合的交集 sdiff 獲取兩個集合的差集 sdiffstore 獲取兩個集合的差集并寫入新的集合中 smembers 獲取集合里面的所有key ``` 2) 舉例 ```sh 127.0.0.1:6379> sadd lxl pg1 pg2 baoqiang masu marong (integer) 5 127.0.0.1:6379> sadd jnl baoqiang yufan baobeier zhouxingchi (integer) 4 127.0.0.1:6379> SUNION lxl jnl 1) "zhouxingchi" 2) "baobeier" 3) "pg2" 4) "yufan" 5) "masu" 6) "baoqiang" 7) "pg1" 8) "marong" 127.0.0.1:6379> SINTER lxl jnl 1) "baoqiang" 127.0.0.1:6379> SDIFF lxl jnl 1) "masu" 2) "pg1" 3) "marong" 4) "pg2" 127.0.0.1:6379> SDIFF jnl lxl 1) "yufan" 2) "zhouxingchi" 3) "baobeier" ``` 3) 應用場景 微博中一個多個用戶的共同好友等,排行榜中取top n等 ## 三、 發布訂閱 redis也支持消息中間模式,即發布-訂閱模式-MQ,redis的發布訂閱功能較簡單,這里做簡單介紹,實際工作中,用的更多的mq是rabbitmq,kafka等其他消息中間件 使用消息中間件的好處是,發布者只管發布信息到指定通道,接受者只管從通道接受信息,不用管中間過程, 松耦合且易于擴展。 ### 1. 命令說明 ```sh PUBLISH channel msg # 將信息 message 發送到指定的頻道 channel SUBSCRIBE channel [channel ...] # 訂閱頻道,可以同時訂閱多個頻道 UNSUBSCRIBE [channel ...] # 取消訂閱指定的頻道, 如果不指定頻道,則會取消訂閱所有頻道 PSUBSCRIBE pattern [pattern ...] # 訂閱一個或多個符合給定模式的頻道,每個模式以 * 作為匹配符,比如 it* 匹配所 有以 it 開頭的頻道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有 以 news. 開頭的頻道( news.it 、 news.global.today 等等),諸如此類 PUNSUBSCRIBE [pattern [pattern ...]] # 退訂指定的規則, 如果沒有參數則會退訂所有規則 PUBSUB subcommand [argument [argument ...]] # 查看訂閱與發布系統狀態 ``` 注意:使用發布訂閱模式實現的消息隊列,當有客戶端訂閱channel后只能收到后續發布到該頻道的消息,之前發送的不會緩存,必須Provider和Consumer同時在線。 ### 2. 發布訂閱例子 同時打開兩個redis窗口,然后一個從庫發布頻道,另一個窗口訂閱頻道 1) 訂閱單個頻道 ```sh # 窗口1: 127.0.0.1:6379> SUBSCRIBE baodi # 窗口2: 127.0.0.1:6379> PUBLISH baodi "jin tian zhen kaixin!" ``` 訂閱成功后,第一個窗口輸入的消息,會在第二個窗口顯示 2) 訂閱多頻道: ```sh # 窗口1: 127.0.0.1:6379> PSUBSCRIBE wang* # 窗口2: 127.0.0.1:6379> PUBLISH wangbaoqiang "jintian zhennanshou " ```
                  <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>

                              哎呀哎呀视频在线观看