redis有很多數據結構
- string
- list
- hash
- set
- sorted set(zset)
- HyperLogLog
- bitmap
-
geo
下邊就日常工作中中使用情況,介紹一下其各種數據結構主要應用場景。
String:存儲對象轉化類型,例如實體要在緩存中存儲,可以用工具類將實體序列化轉爲String存儲在redis中。
list:可做隊列用。rpushlpop有一些合體的命令,可以防止命令丟失,如處理一條消息時用rpoplpush,處理完畢後把備份的key中lpop掉。
flag =1
while(1==flag):
try:
tstr = time.strftime("%Y%m%d")
info = r.rpoplpush('a','b')
if info is None:
time.sleep(2);
else:
sendurl = url + info
resultinfo = sendReq(sendurl)
r.rpop('b')
except:
print(111)
continue
上游:在日誌中檢測有個用戶在聽音樂,則向a寫入用戶的信息。
下游:如上述代碼處理業務的流程,輪詢彈出這個a的信息,如果沒有,等兩秒後繼續彈出,如果有,將它存入b,並進行發送處理,處理完畢後,將它從b中移除。
如果處理異常,則不從b中移除、可以定期從b中查看失敗的消息,做統一發送處理。
hash:存儲對象的一些信息,如活動初始化後,對接java中的map,泛型爲Map<String,String>
hset key a 1
hget key a 爲1
hgetall key 可以用java中的Map<String,String>承接
set:不重複的存儲key,常常用來判斷用戶是否參加。
sadd key a
sismember key a 返回true代表添加過,false沒有添加過
zset :常用來做列表
zrevrange key 0 -1 倒序排列
zadd key score member
"data": [
{
"name": "kw1577342931141",
"time": "2020-03-12 14:57:30",
"desc": "dd"
},
{
"name": "weibo1567738453",
"time": "2020-03-12 11:07:31",
"desc": "500元現金"
},
{
"name": "aaa",
"time": "2020-03-12 10:51:18",
"desc": "優惠券"
},
{
"name": "bbbb",
"time": "2020-03-06 18:33:48",
"desc": "100元現金"
}
]
如上述結構 可以用 zadd mylist time name:desc:time來處理
zrevrange key 0 -1 出來info後,用String [] a = set.split(info,":")解析, a[0]代表name a[1]代表desc a[2]是錄入時間