redis-zset结构-业务实战

752 阅读1分钟

一、需求

为各个币种,设置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