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