配置方法git
默認值redis
動態配置服務器
未使用pipeline的批量網絡通訊模型網絡
假設客戶端在上海,Redis服務器在北京。相距1300千米。假設光纖速度≈光速2/3,即30000千米/秒2/3。那麼一次命令的執行時間就是(13002)/(300002/3)=13毫秒。Redis萬級QPS,一次命令執行時間只有0.1毫秒,所以網絡傳輸消耗13毫秒是不能接受的。在N次命令操做下,Redis的使用效率就不是很高了。運維
使用pipeline的網絡通訊模型maven
引入maven依賴工具
<dependency> <groupId>redis.clients</groupId> <artifacId>jedis</artifacId> <version>2.9.0</version> <type>jar</type> <scope>compile</scope> </dependency>
// 不用pipeline Jedis jedis = new Jedis("127.0.0.1", 6379); for (int i = 0; i < 10000; i++) { jedis.hset("hashkey" + i, "field" + i, "value=" + i); }
不用pipeline,10000次hset,總共耗時50s,不一樣網絡環境可能有所不一樣spa
// 使用pipeline, 咱們將10000條命令分100次pipeline,每次100條命令 Jedis jedis = new Jedis("127.0.0.1", 6379); for (int i = 0; i < 100; i++) { Pipeline pipeline = jedis.pipeline(); for (int j = i * 100; j < (i + 1) * 100; j++) { pipeline.hset("hashkey:" + j, "field" + j, "value" + j); } pipeline.syncAndReturnAll(); }
使用pipelne,10000次hset,總共耗時0.7s,不一樣網絡環境可能有所不一樣。code
可見在執行批量命令時,使用pipeline對Redis的使用效率提高是很是明顯的。生命週期
mset、mget等操做是原子性操做,一次m操做只返回一次結果。
pipeline非原子性操做,只是將N次命令打個包傳輸,最終命令會被逐條執行,客戶端接收N次返回結果。
訂閱者能夠訂閱多個頻道
發佈
API:publish channel message
redis> publish sohu:tv "hello world" (integer) 3 #訂閱者個數 redis> publish sohu:auto "taxi" (integer) #沒有訂閱者
訂閱
API:subscribe [channel] #一個或多個
redis> subscribe sohu:tv 1) "subscribe" 2) "sohu:tv" 3) (integer) 1 1) "message" 2) "sohu:tv" 3) "hello world"
取消訂閱
API:unsubscribe [channel] #一個或多個
redis> unsubscribe sohu:tv 1) "unsubscribe" 2) "sohu:tv" 3) (integer) 0
其餘API
消息隊列模型
發佈訂閱模型,訂閱者均能收到消息。消息隊列,只有一個訂閱者能收到消息。所以使用發佈訂閱仍是消息隊列,要搞清楚使用場景。
GEO:存儲經緯度,計算兩地距離,範圍計算等。
API:geoadd key longitude latitude member # 增長地理位置信息
redis> geoadd cities:locations 116.28 39.55 bejing (integer) 1 redis> geoadd cities:locations 117.12 39.08 tianjin 114.29 38.02 shijiazhuang 118.01 39.38 tangshan 115.29 38.51 baoding (integer) 4
API:geopos key member [member...] # 獲取地理位置信息
redis> geopos cities:locations tianjin 1)1) "117.12000042200088501" 2) "39.0800000535766543"
API:geodist key member1 member2 [unit] # 獲取兩位置距離,unit:m(米)、km(公里)、mi(英里)、ft(尺)
reids> geodist cities:locations tianjin beijing km "89.2061"
API:
獲取指定位置範圍內的地理位置信息集合
georadius key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [COUNT count] [asc|desc] [store key] [storedist key]
withcoord: 返回結果中包含經緯度
withdist: 返回結果中包含距離中心節點的距離
withhash: 返回結果中包含geohash
COUNT count:指定返回結果的數量
asc|desc:返回結果按照距離中心節點的距離作升序/降序
store key:將返回結果的地理位置信息保存到指定鍵
storedist key:將返回結果距離中心點的距離保存到指定鍵
redis> georadiusbymember cities:locations beijing 150 km 1)"beijing" 2) "tianjin" 3) "tangshan" 4) "baoding"