業(yè)務(wù)需求
限制每個(gè)用戶每天訪問不同接口的次數(shù),如:每個(gè)承運(yùn)商每天只能根據(jù)運(yùn)單號(hào)查詢客戶信息50次,每個(gè)承運(yùn)商每天只能根據(jù)運(yùn)單號(hào)查詢商品信息30次。
方案選擇
Redis是一個(gè)key-value存儲(chǔ)系統(tǒng),存放的value類型相對(duì)較多包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型),同時(shí)redis具有時(shí)效性,所以此處采用redis的方式實(shí)現(xiàn)業(yè)務(wù)需求。
選用redis哪種數(shù)據(jù)結(jié)構(gòu)方式
value為string類型:key用于標(biāo)識(shí)不同接口不同承運(yùn)商,value代表對(duì)應(yīng)承運(yùn)商每天訪問的客戶信息的次數(shù),雖然可以實(shí)現(xiàn)業(yè)務(wù)需求,但接口標(biāo)志一直重復(fù)存儲(chǔ),浪費(fèi)了內(nèi)存。
A接口(承運(yùn)商1)—>N A接口(承運(yùn)商2)—>N …
B接口(承運(yùn)商1)—>N B接口(承運(yùn)商2)—>N …
value為集合類型:用這種方式還不如用value為string類型的方式。
value為hash類型:key用于存放接口標(biāo)識(shí),value為一個(gè)Map集合用來存放不同承運(yùn)商訪問對(duì)應(yīng)接口的次數(shù)。這種方式如果要修改對(duì)應(yīng)的訪問次數(shù)只需要通過(接口標(biāo)志+承運(yùn)商標(biāo)志)就可以直接修改,同時(shí)接口標(biāo)志不會(huì)重復(fù)存儲(chǔ),避免了內(nèi)存的浪費(fèi)。
A接口—>{承運(yùn)商1—>N,承運(yùn)商2—>N …}B接口—>{承運(yùn)商1—>N,承運(yùn)商2—>N …}
業(yè)務(wù)流程圖(點(diǎn)擊下載流程圖)
通過springboot的RedisTemplate操作redis hash數(shù)據(jù)結(jié)構(gòu)的方法:
https://blog.csdn.net/weixin_37490221/article/details/78135036
redis.clients.jedis.exceptions.JedisDataException: ERR hash value is not an integer異常解決方案:
https://blog.csdn.net/qq_31071543/article/details/85158305
---------------------
作者:localhost_rachel
來源:CSDN
原文:https://blog.csdn.net/qq_31071543/article/details/84752778
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
聯(lián)系客服