發表文章

目前顯示的是有「Redis」標籤的文章

IT|程式設計|Front-End|Redis 及 WebSocket 的一個實時消息推送系統

圖片
需求分析    2017-06-12 Mon 後台同時對接了網頁,微信公眾號,iOS 以及 Android客戶端。在某些特定場景下,比如一個用戶接收到其他用戶的提問,我們就需要向這個用戶推送一條消息 (設備狀態)。用戶或者在手機上收到了一條彈窗通知,或者在網頁上看到了消息圖標顯示小紅點 (告警消息)。 公眾號消息推送使用客服接口推送消息。 移動端的消息推送使用國內某些知名的推送平台。在用戶從APP登錄的時候,APP會主動向推送平台設置自己的ID。後台將消息發送到推送平台時指明這個ID即可。 網頁的消息推送一般常見的實現方法有輪詢,長連接,WebSocket等等。在這裡我們使用的是WebSocket 。 消息傳遞的基本流程 後台服務器在某些情況下生成了一條消息, 首先將消息保存到本地數據庫,這樣客戶端可以調用API顯示消息列表。隨後消息被放入任務隊列,任務隊列將消息通過推送平台發送至APP,通過微信公眾號後台發送至用戶微信客戶端。 為了將消息通過WebSocket發送至在線的用戶手中,我們先將消息發佈到 Redis。訂閱了 Redis 的 Node 收到消息,將消息通過 WebSocket 傳遞至與之連接的瀏覽器。 一個大致的消息流如下圖所示: Redis的發佈訂閱機制 所謂的 Publish/Subscribe,可以讓發佈者將消息發佈至某一個 channel,所有訂閱了這個 channel 的訂閱者就可以立即收到這個消息。在 Redis 的發佈訂閱機制裡面,一個消息可以被發佈至多個channel,訂閱者也可以同時訂閱多個channel的消息。 127.0.0.1:6379> subscribe message-channel Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "message-channel" 3) (integer) 1 為了訂閱一個名為 message-channel 的消息,我們可以在 Redis 命令行下執行 127.0.0.1:6379> publish message-channel "Thi...

IT|資料庫|Key-Value|Redis Cluster 集群伺服器設定

圖片
http://michaelkang.blog.51cto.com/1553154/1963201 Redis 集群提供了以下兩個好處: # 將數據自動切分( split )到多個節點的能力。 # 當集群中的一部分節點失效或者無法進行通訊時, 仍然可以繼續處理命令請求的能力。 Redis 架構 架構細節 : (1) 所有的 redis 節點彼此互聯 (PING-PONG 機制 ), 內部使用二進制協議優化傳輸速度和帶寬 . (2) 節點的 fail 是通過集群中超過半數的節點檢測失效時才生效 . (3) 客戶端與 redis 節點直連 , 不需要中間 proxy 層 . 客戶端不需要連接集群所有節點 , 連接集群中任何一個可用節點即可 (4)redis-cluster 把所有的物理節點映射到 [0-16383]slot 上 ,cluster 負責維護 node<->slot<->value Redis 架構圖 Redis Cluster 搭建與使用 要讓集群正常工作至少需要 3 個主節點,在這裡我們要創建 6 個 redis 節點,其中三個為主節點,三個為從節點,對應的 redis 節點的 ip 和端口對應關係如下(為了簡單演示都在同一台機器上面)。 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 [安裝 redis] 研究-Redis 創建存放多個實例的目錄 mkdir /home/pi/data/cluster -p cd /home/pi/data/cluster mkdir 7000 7001 7002 7003 7004 7005 修改配置文件 樹莓派 cp /etc/redis.conf /home/pi/data/cluster/7000/ Linux cp /home/pi/redis-4.0.2/redis.conf /home/pi/data/cluster/7000/ 修改以下選項( 修...