Redis支持兩種持久化方式RDB和AOF,RDB持久化可以快速的儲存和回覆數據,但在服務器停機時會丟失大量數據,AOF持久化可以高效的提升數據的安全性,但在儲存和恢復數據方面要耗費大量的時間,最好的方式是使用RDB-AOF混合持久化。python
Redis默認RDB持久化,4.0以上支持混合持久化,首先設置AOF持久化,修改配置文件redis.conf中appendonly yes,而後設置混合持久化aof-use-rdb-preamble yes。redis
這裏主要說明redis多進程存儲,獲取對象的三種方式。安全
數據存儲方式{key:value},AOF持久化可以保證很高的可靠性。服務器
1 #pool管理對一個redis server的全部鏈接避免每次創建、釋放鏈接的開銷 2 pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0) 3 r = redis.StrictRedis(connection_pool=pool)
1 r.set(key, pickle.dumps(mem))
1 value = r.get(key) 2 value = pickle.loads(value)
1 r.delete(key)
程序啓動就一直sub,經過監聽listen()獲得數據來獲取對象,相似Queue,系統宕機或應用程序重啓都不能保存住數據app
1 pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0) 2 r = redis.StrictRedis(connection_pool=pool) 3 ps = r.pubsub() 4 for channel in channels: 5 ps.subscribe(channel) #一個channel對應一個進程
1 r.publish(mem.topic, pickle.dumps(mem))
1 limit=10 2 rows=[] 3 for item in ps.listen(): #得到listen獲得generator 4 if item['type'] == 'message': 5 message = pickle.loads(item['data']) 6 rows.append(message ) 7 if len(rows) == limit: #每10個退出,再次運行程序獲取第11個對象 8 break
這裏的缺點就是數據取出後就丟失了,redis不會保存subscribe成功後的數據。spa
一個name存儲到一個隊列中, push只管發佈,無論對方是否須要都存儲,只要沒有pop都會永久保存在redis中,當對方須要時根據name從相應的隊列pop出來,pop成功後再也不保存,感受這個是比較好用!!!
code
擬採用lpush()和brpop()實現,pop能夠從左邊pop,也能夠從右邊pop,這裏採用rpop,根據是否自動建立name,python支持lpush和lpushx。orm