可用于处理业务逻辑,作为系统的一部分。除此之外, 还可以帮助和支持系统的其他部分,例如:用于记录日志,进行数据统计,实现配置自动化以及制作一些有趣的实用小程序等。
本实训将通过构建日志记录组件,统计网页访问数据以及 地址库小工具三个实际应用场景展示如何使用 帮助和支持应用程序。
任务描述
本关任务:使用 记录日志。
相关知识
为了完成本关任务,你需要掌握:、redis相关命令,、python相关命令。
redis相关命令
lpush
: 将一个值插入到列表头部,保证后插入的在最前面。
ltrim:
让列表只保留指定区间内的元素。
multi:
事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 命令原子性(atomic)地执行队列里的命令。
watch:
用于监视一个 key ,如果在事务执行之前这个 key 的值被改动,那么事务将被打断。一般和命令配合使用,解决并发过程中重复操作的问题。
例子:商品下单时是需要对库存数进行减库存操作,通过和来锁库存。
zincrby:
对有序集合中指定成员的分数加上增量 ,用于统计。
对 , 值: 进行递增
执行后效果
rename
命令用于修改 的名称
把 修改为
执行后效果
python相关命令
返回当前时间的时间戳
返回时间格式化字符串
执行结果:
获取当前小时数:例如当前时间
执行结果:
编程要求
在区域编写函数,实现记录最新日志的功能,具体参数与要求如下:
- 方法参数为日记内容;
- 定义一个 列表,列表为, 列表为加加,要求每次新的日记内容需存在列表头部,并只保留最新的个元素。
注意:value中的时间取()
编写函数,实现统计常见日志次数及写入最新日记、并对历史日志记录进行迁移,具体参数与要求如下:
- 在方法中,方法参数为日记内容;
- 定义一个 列表,列表为,列表为;
- 定义一个 字符串,字符串为,字符串为当前小时数;
- 对历史日志记录进行迁移功能实现:当 小于当前时间小时数,则重命名列表,修改列表为,修改 字符串值为当前时间小时数;
- 统计常见日志次数及写入最新日记功能实现:存储列表的成员为,分数自增,并调用方法存最新消息;
- 考虑到历史日记记录迁移的并发问题,使用监控,如果已经修改,则捕获,从而退出。
任务描述
本关任务:使用 统计网站的每日 和每日 。
相关知识
每日 即一天的页面浏览量或点击量,衡量网站用户访问的网页数量。
每日 即一天的独立访客数,统计一天内访问某站点的用户数(一般以 为依据)。
为了完成本关任务,你需要掌握:、相关命令,、相关命令。
redis相关命令
hincrby:
为哈希中指定域的值增加增量 ,用于统计。
zadd:
将成员加入到有序集合中,并确保其在正确的位置上。
hget:
从哈希中获取指定域的值。
zcount:
统计有序集合中分值在 和 之间(包括等于 和 )的成员的数量。
python相关命令
返回当日日期:
执行结果:
返回当日 点时间元组:
执行结果为:
返回时间元组对应的时间戳:
执行结果为:
编程要求
在区域编写 函数,实现累记 和 值的功能,具体参数与要求如下:
- 方法参数 为访问用户
- 累计实现:为哈希键 中的当前日期域的值累加 ,当前日期域格式为
- 累计实现:将该访问用户 加入到有序集合键 中,并置分值为当前时间
编写 函数,实现统计 值和 值并返回的功能,具体参数与要求如下:
- 方法参数 为需要统计的日期,格式为:
- 统计实现:从哈希键 中得到该日期域的值,记为
- 统计实现:统计有序集合键 中分值介于需要统计的日期的 点和 点时间戳之间的成员数量,记为
- 返回 值和 值,格式为
任务描述
本关任务:使用 编写一个 地址库。
相关知识
为了完成本关任务,你需要掌握:、相关命令,、相关命令,3.如何转换为整数。
redis相关命令
zadd:将成员加入到有序集合中,并确保其在正确的位置上。
zrevrangebyscore:返回有序集合中分值介于 和 之间(包括等于 或 )的所有成员,并按分值递减(从大到小)的次序排列。
python相关命令
将字符串转换为十进制数:
打开文件:
执行后得到一个文件对象。
获得 文件的所有行:
执行后得到 文件中所有行的列表。
遍历 文件中的所有行:
执行结果:
判断一个字符串是否为数值型字符串:
执行结果:
使用分隔符拆分字符串:
执行结果:
判断字符串是否包含指定字符:
执行结果:
IP如何转换为整数
将 转换为长整型数的过程如下:
编程要求
在区域编写 函数,实现将 转换成整数的功能,具体参数与要求如下:
- 方法参数 为待转换的 地址;
- 转换成长整型数实现:使用分隔符 将 地址拆分为四段,将每一段转换为十进制数,并使用迭代的方法将整个 地址转换为长整型数;
- 返回转换好的整数值。
编写 函数,实现将 地址库导入的功能,具体参数与要求如下:
- 方法参数 为 地址库文件名;
- 数据导入实现:打开并遍历该文件,文件第一列为段的起始值,第二列为段的结束值,第三列为段所属的城市,例如
- 若`IP`段起始值包含英文字符或为空串,则不处理该行。 - 若`IP`段起始值是`IP`格式,则调用`ip2long`方法转换为整数。 - 若`IP`段起始值为数值型字符串,则转换为十进制数。 - 为保持有序集合中城市`ID`唯一,将城市`ID`加`_`加当前行索引值做为成员,经过上述处理的`IP`段起始值做为分值存入有序集合 `ip2city` 中。
编写 函数,实现根据输入的地址找到所属的城市的功能,具体参数与要求如下:
- 方法参数 为待查找的 地址;
- 调用方法将待查找的 地址转换成整数,便于在有序集合中查找;
- 查找所属城市实现:从有序集合 中查找出分值小于等于上述整数的所有成员,其中分值最大的成员则为该地址所属的城市;
- 还原城市实现:去除上述城市中字符及其之后的字符;
- 返回城市。