• 使用Redis构建支持程序


      在Linux和Unix世界中,有两种常见的记录日志的方法。第一种是将日志记录到文件里面,然后随着时间流逝不断地将一个有一个日志行添加到文件里面,并在一段时间之后创建新的日志文件。包括Redis在内的很多软件都是用这种方法来记录日志。当这种记录日志的方式可能会有个问题,因为每个不同的服务都会创建不同的日志,而这些日志轮换日志的机制也各不相同,并且缺少一种能够方便得聚合所有日志并对其进行处理的常用方法。syslog服务是第二种常用的日志记录方法,这个服务运行在几乎所有Linux服务器和Unix服务器的514号TCP端口和UDP端口上面。syslog接受其他程序发来的日志消息,并将这些消息路由至存储在硬盘上的各个日志文件里面。syslog还负责旧日志的轮换和删除工作。通过配置,syslog甚至可以将日志消息转发给其他服务来做进一步的处理。因为对指定的日志的轮换和删除工作都可以交给syslog来完成,所以使用syslog服务比直接将日志写入文件要方便的多。syslog的转发功能可以将不同的日志分别存储到同一台服务器的多个文件里面。

      

      对计数器进行更新

        使用给一个散列来存储网站在每个5秒时间片之内获得的点击量。其中散列的每个键都是某个时间片的开始时间,而键对应的值则存储了网站在该时间片之内获得的点击量。为了能够清理计数器包含的旧数据,我们需要在使用计数器的同时,对被使用的计数器进行记录。我们需要一个有序序列。这个序列不能包含任何重复的元素,以方便能遍历序列中的所有元素。实现有序序列的最好的办法是是有有序集合,有序集合的各个成员分别由计数器的精度以及计数器的名字组成,而所有成员的分值都为0。当所有成员的分值都被设置成了0,所有Redis在尝试按分值对有序程序集合进行排序时,就会使用各成员名进行排序。对于每种时间片精度,程序都会将计数器的精度和名字作为引用信息添加到记录已有计数器的有序集合里面,并增加散列计数器在指定时间片内的计数值。更新计数器只需要为每种时间片精度执行ZDD命令和HINCRBY名。从指定精度和名字的计数器里面获取数据只需要使用HGETALL命令来获取整个散列,接着将命令返回的时间片和计数器的值从原来的字符串格式转换成数字格式,根据时间对数进行排序,最后返回排序后的数据。在处理和清理旧计数器时,需要留心一下几点:任何时候都可能会有新的计数器被添加进来;同一时间可能会有多个不同的清理操作在执行;对于一个每天只更新一次的计数器来说,以每分钟一次的频率尝试清理这个计数器只会浪费计算机资源;若一个计数器不包含任何数据,那么程序就不应该对它进行清理。清理程序通过对记录已知计数器的有序集合执行ZRANGE命令来一个接一个的遍历所有已知的计数器。在对计数器执行清理操作时,程序会取出计数器记录的所有技术样本的开始时间,并移除那些开始时间位于指定截止时间之前的样本,清理之后的计数器最多只会保留最新的120个样本。若一个计数器在执行清理操作之后不再包含任何样本,那么程序将从记录已知计数器的有序集合里面移除这个计数器的引用信息。程序在每次遍历有序集合里面记录的计数器时都会对计数器进行检查,确保只清理应该清理的计数器。当程序尝试清理一个计数器的时候,它会取出计数器技术的所有数据样本,并判断哪些样本是需要被删除的。若程序在对一个计数器执行清理操作之后,认为这个计数器已经不再包含任何数据,那么程序会检查这个计数器是否已经被清空,并在确认了它已经被清空之后,将它从记录已知计数器的有序集合中移除。最后,在遍历完计数器之后,程序会计算此次遍历消耗的时长,若没有达到一分钟,则程序将休眠知道这分钟过去,然后继续下次清理。

      使用Redis存储统计数据

        对于给定上下文和类型,程序将使用一个有序集合来记录这个上下文以及这个类型的最小值,最大值,样本数量值的和,值得平方值和等信息,并通过这些信息来计算平均值以及标准差。程序将值存储在有序集合是为了统计信息的有序集合和其他有序集合进行并集计算,并通过MIN和MAX这两个聚合函数来筛选相交的元素。统计程序在写入数据之前会进行检查,确保被记录的是当前这一个小时的统计数据,并将不属于当前这个小时的旧数据进行归档。再辞职后,程序会构建两个临时有序集合,其中一个用于用于保存最小值,而另一个则用于保存最大值。然后使用ZUNIONSTORE命令以及它的两个聚合函数MIN和MAX,分别计算两个临时有序集合与记录当前统计数据的有序集合之间的并集结果。通过使用ZUNIONSTORE命令,程序可以快速地更新统计数据而无需使用WATCH去监视可能会频繁地进行更新存储统计数据的键。程序在并集计算完毕之后会删除临时有序集合,并使用ZINCRBY命令对统计数据有序集合里面的count,sum,sumsq更新。

      查找IP所属城市以及国家

        实现IP所属地查找程序需要用到两个查找表,第一个查找表需要根据输入的IP地址来查找IP所属城市的ID,而第二个查找表则需要根据输入的城市ID来查找ID对应城市的真实信息。根绝IP地址来查找城市ID的查找表由有序集合实现。这个有序集合的成员为具体的城市ID,分值这则是根据IP地址计算出的整数值。要根据给定IP查找所属城,先要将IP地址转换成分值,然后在所有分值小于或等于给定IP地址的地址里面,找出分值最大的那个IP所对应的城市ID。可以通过ZREVRANGBYSCORE命令并将选项START和NUM参数分别设为0和1完成。

      使用Redis存储配置信息

        将配置信息存储在Redis里面,并编写应用程序来获取这些信息,就不用再编写工具来向服务器推送配置信息了,服务器和服务也不用再通过重载配置文件的方式来更新配置信息了。可以把一个已知的Redis服务器用作配置信息字典,然后通过这个字典存储的配置信息来连接为不同应用或服务组件提供数据的其他Redis服务器。构建一个函数,该函数可以从一个键里面取出一个JSON编码的配置项值,其中存储配置值的键由服务的类型以及使用该服务的引用程序命名。

        定义一个可以接受指定的配置作为参数并生成一个包装器的装饰器。这个包装器可以包裹起一个函数,使得之后被包裹的函数逇调用可以自动连接至正确的Redis服务器,并且连接Redis服务器所使用的那个连接会和用户之后提供的其他参数一同被传递至包裹的函数。

        

  • 相关阅读:
    yum 安装包的用法
    php session文件修改路径
    apache性能测试工具ab使用详解
    shell exit 0 exit 1
    网站架构(页面静态化,图片服务器分离,负载均衡)方案全解析
    【转载】新手如何快速打造高流量网站
    高并发处理方案
    HTML静态化技术
    在项目中学习.NET的json(二)之运费计算器
    在项目中学习.NET的json(一)
  • 原文地址:https://www.cnblogs.com/forerver-elf/p/7422718.html
Copyright © 2020-2023  润新知