title: redis簡(jiǎn)單使用
date: 2018-03-07 13:57:10
tags: [python,redis,序列化]
需求
現(xiàn)在在開發(fā)應(yīng)用審計(jì)系統(tǒng)的原型,功能就是旁路的方式對(duì)http協(xié)議進(jìn)行還原囱淋、審計(jì)。除了提取基本的http頭信息外病袄,還要對(duì)負(fù)載進(jìn)行還原存儲(chǔ)。當(dāng)網(wǎng)絡(luò)流量較大時(shí)赘阀,如何能快速存儲(chǔ)益缠,并且支持跨進(jìn)程搜索就成了問題。
方案
了解了內(nèi)存數(shù)據(jù)庫之后基公,決定采用redis作為中間件緩存最新的數(shù)據(jù)幅慌,并定時(shí)歸檔到mongodb的方案。
例子
存儲(chǔ)
這里使用了python的redis庫操作數(shù)據(jù)庫酌媒。
使用http請(qǐng)求頭的第一行內(nèi)容作為key欠痴,將還原出的http對(duì)象經(jīng)過cPickle序列化后存儲(chǔ)進(jìn)去。
import redis
pool = redis.ConnectionPool(host='127.0.0.1', port=6379,db=1)
r = redis.Redis(connection_pool=pool)
#存對(duì)象
HTTP_COM.__module__ = "common"
data = cPickle.dumps(self)
r.hmset(self.request.first_line.split(" ")[1],{"data":data})
查詢
import redis
pool = redis.ConnectionPool(host='192.168.1.101', port=6379,db=1)
r = redis.Redis(connection_pool=pool)
data = r.hgetall("/zxpic_imtt/2018/03/07/1600/originalimage/160156_2551183010_5_700_275.jpg")
#取出對(duì)象
from common import TCPSTREAM,TCPSTREAM_POOL,HTTP_POOL,TCP_POOL,HTTPRequest,HTTPResponse,HTTP_COM
import cPickle
obj=cPickle.loads(data["data"])