《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和地址之间映射了

 

服务的发现与配置

 

 

 

你可能感兴趣的:(Redis)