redis-zset結構-業務實戰

litblank發表於2018-09-07

一、需求

為各個幣種,設定N個金額區間對應的手續費。並根據金額取到對應的區間費率

二、設計

  • 資料結構
|--zset:key:幣種編號--------ZSET-|
|  value                  score |  
|   JSON	        100	|    
|   JSON        	200	|    
---------------------------------
複製程式碼
  • score是金額區間的起始金額
  • 要查詢某個區間,通過金額查詢出大於分值的value,並取出第一個分值的value,即為要查詢的區間

三、涉及的命令

  • 查詢所有資料
zrange exchange:rate:USD 0 -1
複製程式碼
  • 獲取某個分值範圍的value,並倒敘排序,取出第一個value
zrevrangebyscore exchange:rate:USD (342  0 limit 0 1
複製程式碼
  • 事務、通道
# 通道,批量處理的資料,事務中任意命令執行失敗,其餘的命令依然被執行。
MULTI
EXEC 
# 事務,監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷。
WATCH key [key ...]

複製程式碼
  • 通道並不能保證併發安全,事務並不能回滾
  • redis沒有回滾機制

四、注意點

  • 一次儲存的資料量大,所以開啟了通道
  • 如果有併發可能,需要開啟watch,打斷後重新操作,相當於CAS
  • 使用的連線方式不同,jedis或者template,命令對應的方法名不一樣
  • zset其他命令,基本能根據分值各種查詢,求交併集

五、其他應用

  • 點贊
  • 關注、交併集合
  • session

相關文章