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

                ## 1 pub sub ### 1.1 sub 端 ~~~ public static function redisSub(){ /** * redis sub(消息訂閱端) */ $redis = new Redis(); $res = $redis->pconnect('127.0.0.1', 6379,0); $redis->auth('XXX');//密碼 $redis->setOption(Redis::OPT_READ_TIMEOUT, -1);//超時時間 $redis->subscribe(array('exampleTopic'), 'callback'); } // 回調函數,自己的處理邏輯 public static function callback($instance, $channelName, $message) { switch ($channelName) { case 'exampleTopic'://調用自定義的接口,執行業務邏輯 Post('https://xxx.com/Xxx/Xx/xx'); break; default: } } ~~~ ### 1.2 pub 端 ~~~ //redis發布端 public static function RedisPub(){ $redis = new Redis(); $res = $redis->pconnect('127.0.0.1', 6379,0); // ... 業務了邏輯 //業務邏輯結束 發布訂閱消息 $redis->PUBLISH('exampleTopic ', '消息'); } ~~~ ## 2 、counter ~~~ public static function redisCounter(){ $value = Mod::app()->redis->incr('website_visitors'); Mod::app()->redis->expire('website_visitors', 1); echo "Total website visitors: " . $value . "."; } ~~~ ## 3 、 set ~~~ public static function RedisS(){ Mod::app()->redis->delete('s'); Mod::app()->redis->sAdd('s', 5); Mod::app()->redis->sAdd('s', 4); Mod::app()->redis->sAdd('s', 2); Mod::app()->redis->sAdd('s', 1); Mod::app()->redis->sAdd('s', 3); var_dump(Mod::app()->redis->sort('s')); // 1,2,3,4,5 var_dump(Mod::app()->redis->sort('s', array('sort' => 'desc'))); // 5,4,3,2,1 var_dump(Mod::app()->redis->sort('s', array('sort' => 'desc', 'store' => 'out'))); // (int)5 // SISMEMBER "1" 1是否在s里 } ~~~ ## 4、hash ~~~ public static function RedisH(){ Mod::app()->redis->delete('h'); Mod::app()->redis->hSet('h', 'key1', 'hello'); /* 1, 'key1' => 'hello' in the hash at "h" */ Mod::app()->redis->hGet('h', 'key1'); /* returns "hello" */ Mod::app()->redis->hSet('h', 'key1', 'plop'); /* 0, value was replaced. */ Mod::app()->redis->hGet('h', 'key1'); /* returns "plop" */ } ~~~ ## 5 list ~~~ public static function RedisList(){ /* Non blocking feature */ Mod::app()->redis->lPush('key1', 'A'); Mod::app()->redis->delete('key2'); Mod::app()->redis->blPop('key1', 'key2', 10); /* array('key1', 'A') */ /* OR */ Mod::app()->redis->blPop(array('key1', 'key2'), 10); /* array('key1', 'A') */ Mod::app()->redis->brPop('key1', 'key2', 10); /* array('key1', 'A') */ /* OR */ Mod::app()->redis->brPop(array('key1', 'key2'), 10); /* array('key1', 'A') */ /* Blocking feature */ /* process 1 */ Mod::app()->redis->delete('key1'); Mod::app()->redis->blPop('key1', 10); /* blocking for 10 seconds */ /* process 2 */ Mod::app()->redis->lPush('key1', 'A'); /* process 1 */ /* array('key1', 'A') is returned*/ } ~~~ ### Redis和Memcached的區別 ~~~ * Redis和Memcache都是將數據存放在內存中,都是內存數據庫。但是Memcache還可以緩存其他東西,比如圖片、視頻 * * Redis不只支持簡單的k/v類型的數據,同時還提供list、set、hash等數據結構的存儲 * * 虛擬內存,當物理內存用完時Redis可以將一些很久沒有用到的value交換到磁盤 * * 過期策略,memcache在set時就指定,例如`set key1 0 0 8`即永不過期,redis可以通過expire設定,例如:`expire name 10` * * 分布式,設定memcache集群,利用magent做一主多從;redis也可以做一主多從。 * * 存儲安全,memcache掛掉后,數據沒了;redis可以定期保存在磁盤(持久化) * * 災難恢復,memcache掛掉后數據不可恢復;redis數據丟失后可以通過aof恢復 * * redis支持數據的備份,即master-slave模式的數據備份 * * 應用場景不同:redis除了可以做nosql數據庫之外,還能做消息隊列、數據堆棧和數據緩存等。memcache適合于緩存sql語句、數據集、用戶臨時性數據、延遲查詢數據和session等 ~~~ ### redis有哪些數據結構 * String ~~~ 字符串類型是redis最基礎的數據結構,首先鍵是字符串類型,而且其他幾種結構都是在字符串類型基礎上構建的 字符串類型實際上可以是字符串、數字、二進制(圖片、音頻),單最大不能超過512M ~~~ 使用場景: ~~~ 1. 緩存 字符串最經典的使用場景,redis作為緩存層,mysql作為存儲層,絕大部分請求數據都是redis中獲取,由于redis具有支撐高并發特性,所以緩存通常能起到加速讀寫和降低后端壓力的作用 2. 計數器 許多應用都會使用redis作為技術的基礎工具,它可以實現快速技術、查詢緩存的功能。 3. 共享session 處于負載均衡的考慮,分布式服務會將用戶信息的訪問均衡到不同服務器,用戶刷新一次訪問可訥訥個會需要重新登錄,為了避免這個問題可以使用redis將用戶session集中管理,在這種模式下只要保證redis的高可用和擴展性,每次獲取用戶更新或查詢登錄信息都直接從redis中集中獲取 4. 限速 出于安全考慮,每次進行登錄時讓用戶輸入手機驗證碼,為了短信接口不被頻繁訪問,會限制用戶每分鐘獲取驗證碼的頻率 ~~~ * Hash 在redis中哈希類型是指鍵本身又是一種鍵值對結構,如`value = {{field1,value1}...{fieldn,valuen}}` 使用場景: 1. 哈希結構相對于字符串序列化緩存信息更加直觀,并且在更新操作上更加便捷。 * list ~~~ 列表類型是用來存儲多個有序的字符串,列表的每個字符串成為一個元素,一個列表最多可以存儲2的32次方減1個元素。在redis中,可以對列表插入(push)和彈出(pop),還可以獲取指定范圍的元素列表。列表是一種比較靈活的數據結構,它可以充當棧和隊列的角色。 ~~~ 使用場景: 1. 消息隊列 redis的`lpush+brpop`命令組合就可以實現阻塞隊列,生產者客戶端是用`lpush`從列表左側插入元素,多個消費者客戶端使用`brpop`命令阻塞式的搶列表尾部的元素,多個客戶端保證了消費的負載均衡的高可用性。 2. 使用技巧列表 ~~~ lpush+lpop=Stack(棧) lpush+rpop=Queue(隊列) lpush+ltrim=Capped Collection(有限集合) lpush+brpop=Message Queue(消息隊列) ~~~ * set * sortedset
                  <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>

                              哎呀哎呀视频在线观看