《Redis實戰》筆記——第五章

本章主要講述了redis的幾個應用場景。

使用Redis記錄日誌

在linux中有兩種記錄日誌的方式,一種是將其記錄到文件中,一個又一個的添加日誌行以及文件,包括redis在內的軟件都使用這種方式。另一種是使用syslog服務,除了存儲日誌,syslog還負責日誌的輪換和刪除,syslog的轉發功能可以將不同日誌存到多個文件中。

 

使用redis的lpush命令將日誌推入列表,使用lrange獲取。

SEVERITY = {                       
    logging.DEBUG: 'debug',        
    logging.INFO: 'info',          
    logging.WARNING: 'warning',    
    logging.ERROR: 'error',        
    logging.CRITICAL: 'critical',  
}#設置日誌等級      


def log_recent(conn, name, message, severity=logging.INFO, pipe=None):
    severity = str(SEVERITY.get(severity, severity)).lower()    
    destination = 'recent:%s:%s'%(name, severity)               
    message = time.asctime() + ' ' + message                    
    pipe = pipe or conn.pipeline()               

    #使用事務的方式,將通信往返次數降低爲一次           
    pipe.lpush(destination, message)     

    #lpush recent:app:info 2018/01/01message       
    pipe.ltrim(destination, 0, 99)             

    #修剪日誌,保留100條
    pipe.execute()    

    #執行             

 查看常見日誌,使用有序集合Zset,對於出現的日誌行進行Zincrby自增操作。

計數器和統計數據

使用一個散列來存儲每隔5秒的訪問量Hset count:5hit 2018/01/01/15/16/15 5

使用redis還可以統計頁面的訪問時間,統計其最小值,最大值,樣本數量,總和,平均值等信息。

當採取對每隔小時數據進行歸檔時,可以使用Zunionstore進行min,max等信息的聚合。

查找IP所屬城市和國家

導入IP地址段對應城市數據,以及城市和國家名等數據。

IP轉數字:

def ip_to_score(ip_address):
    score = 0
    for v in ip_address.split('.'):
        score = score * 256 + int(v, 10)
    return score

轉爲整數之後即可創建IP和地址之間映射了

 

服務的發現與配置

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章