Redis基本命令

文章目录

  • 第1关:字符串、列表与集合
  • 第2关:哈希与有序集合
  • 第3关:Redis基本事务与其他命令


第1关:字符串、列表与集合

编程要求
根据提示,在右侧Begin-End区域补充代码,完成任务分配的后端处理逻辑:

在 task_empty() 方法中:
从 Redis 中获取列表 task_list 的长度,判断是否为 0
若为 0,则返回 True
若不为 0,则返回 False
在 get_task() 方法中:
从列表 task_list 的最右侧弹出一个元素,赋值给 task
将 task 的值设置到 Redis 的字符串键 current_task 中
在 get_unallocated_staff() 方法中:
从集合 unallocated_staff 中随机返回一个元素,赋值给 staff
将上面的 staff 从集合 unallocated_staff 移动到集合 allocated_staff 中
返回(return)staff 的值
在 allocate_task(staff) 方法中:
将参数 staff 的值追加到 Redis 字符串键 current_task 的尾部,中间以 : 间隔
将追加后的字符串键 current_task 从左侧推入列表 task_queue
将字符串键 current_task 的值设置为 “None”
测试说明
我会对你编写的代码进行测试:

测试输入:

task_1 task_2 task_3 task_4 task_5
staff_1 staff_2 staff_3 staff_4 staff_5
预期输出:

Init task list: [‘task_1’, ‘task_2’, ‘task_3’, ‘task_4’, ‘task_5’]
Init staff list: set([‘staff_4’, ‘staff_5’, ‘staff_1’, ‘staff_2’, ‘staff_3’])
Cur task list is empty: False
Get new task: task_5
Current staff is allocated: True
Current staff is unallocated: False
Current task is: None
Allocated all tasks
Task queue length: 5
Task list is empty: True
Allocated_staff: set([‘staff_4’, ‘staff_5’, ‘staff_1’, ‘staff_2’, ‘staff_3’])
Unallocated_staff: set([])
代码示例如下:

#!/usr/bin/env python
#-*- coding:utf-8 -*-import redisconn = redis.Redis()def task_empty():# 请在下面完成判断任务列表是否为空#********* Begin *********#return int(conn.llen("task_list"))==0#********* End *********#def get_task():# 请在下面完成获取一个任务#********* Begin *********#task = conn.rpop("task_list")conn.set("current_task",task)#********* End *********#def get_unallocated_staff():# 请在下面完成获取一个未分配的员工#********* Begin *********#staff=conn.srandmember("unallocated_staff")conn.smove("unallocated_staff","allocated_staff",staff)return staff#********* End *********#def allocate_task(staff):# 请在下面完成分配任务#********* Begin *********#conn.append("current_task",':'+str(staff))conn.lpush("task_queue",conn.get("current_task"))conn.set("current_task","None")#********* End *********#

在这里插入图片描述

第2关:哈希与有序集合

编程要求
根据提示,在右侧Begin-End区域补充代码,完成带优先级的队列系统的后端处理逻辑:

在 set_task_info(task_id) 方法中:
使用参数 task_id 作为域,初始状态 “init” 作为值构成域-值对,存放在 task_status 哈希键中。
在 add_task_to_queue(task_id, priority) 方法中:
参数说明:
task_id 为任务 ID
priority 为任务优先级。
将分值(优先级)为 priority 的成员 task_id 存入有序集合 task_queue 中。
注意将参数 priority 转换为整型
调用 set_task_info() 方法,传入参数 task_id
在 get_task() 方法中:
新建变量 task_list_by_priority,值为:
使用 ZREVRANGE 命令按照分值(优先级)从大到小顺序返回有序集合 task_queue 的全部成员。
新建变量 current_task,值为:
task_list_by_priority 中的第一个元素(下标为 0)
将成员 current_task 从有序集合 task_queue 中移除
修改哈希 task_status 中的 current_task 域的值为 “processing”
返回(return)current_task 的值
测试说明
我会对你编写的代码进行测试:

测试输入:

1 2 3 4 5 6 7 8 9 10
2 4 9 1 0 5 8 6 7 3
预期输出:

Add new task: 1, priority: 2, status: init
Add new task: 2, priority: 4, status: init
Add new task: 3, priority: 9, status: init
Add new task: 4, priority: 1, status: init
Add new task: 5, priority: 0, status: init
Add new task: 6, priority: 5, status: init
Add new task: 7, priority: 8, status: init
Add new task: 8, priority: 6, status: init
Add new task: 9, priority: 7, status: init
Add new task: 10, priority: 3, status: init
Before: task list is: [‘3’, ‘7’, ‘9’, ‘8’, ‘6’, ‘2’, ‘10’, ‘1’, ‘4’, ‘5’]
Get new task: 3
After: task list is: [‘7’, ‘9’, ‘8’, ‘6’, ‘2’, ‘10’, ‘1’, ‘4’, ‘5’]
Current task status: processing

代码示例如下:

#!/usr/bin/env python
#-*- coding:utf-8 -*-import redisconn = redis.Redis()# 初始化任务信息到 Redis 中
def set_task_info(task_id):# 请在下面完成要求的功能#********* Begin *********#conn.hset("task_status",task_id,"init")#********* End *********## 将任务添加至任务队列
def add_task_to_queue(task_id, priority):# 请在下面完成要求的功能#********* Begin *********#conn.zadd("task_queue",task_id,int(priority))set_task_info(task_id)#********* End *********## 从任务队列中取出优先级最高的任务
def get_task():# 请在下面完成要求的功能#********* Begin *********#task_list_by_priority=conn.zrevrange('task_queue',0,-1)current_task=task_list_by_priority[0]conn.zrem('task_queue',current_task)conn.hset("task_status",current_task,"processing")return current_task#********* End *********#

在这里插入图片描述

第3关:Redis基本事务与其他命令

编程要求
根据提示,在右侧Begin-End区域补充代码,完成网络约车的后端处理逻辑:

在 request_cab(user_id, priority) 方法中:
判断是否存在哈希键 request:info:用户ID 的 time 域:
提示:可使用 HEXISTS 命令
若存在,则直接 return
若不存在,做如下操作
使用事务提交下列命令:
将参数 user_id 从最左侧推入列表 cab:queue
使用 HMSET 命令设置哈希键 request:info:用户ID:
域 time,值为 time.time()
域 priority,值为参数 priority
将上述哈希键的过期时间设置为 10分钟
在 allocate() 方法中:
使用 SORT 命令对列表 cab:queue 排序,并将结果赋值给 cab_queue:
使用 BY 参数
参考键为哈希键 request:info:*,其中 * 为占位符
使用上述参考键中的 priority 域
使用 DESC 参数做倒序排序
取出 cab_queue 的第一个元素(下标为 0)赋值给 current_respond
从列表 cab:queue 中移除变量 current_respond 中包含的元素
返回(return)current_respond
测试说明
我会对你编写的代码进行测试:

测试输入:

1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1
预期输出:

Receive new request: 1, priority: 9, is_expired? True
Receive new request: 2, priority: 8, is_expired? True
Receive new request: 3, priority: 7, is_expired? True
Receive new request: 4, priority: 6, is_expired? True
Receive new request: 5, priority: 5, is_expired? True
Receive new request: 6, priority: 4, is_expired? True
Receive new request: 7, priority: 3, is_expired? True
Receive new request: 8, priority: 2, is_expired? True
Receive new request: 9, priority: 1, is_expired? True
Before: request queue: [‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]
Allocate new request: 1
After: request queue: [‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]
Repeat request in few seconds:
Before: request queue length: 8
After: request queue length: 8

代码示例如下:

#!/usr/bin/env python
#-*- coding:utf-8 -*-import time
import redisconn = redis.Redis()# 用户端发起派车请求
def request_cab(user_id, priority):# 请在下面完成要求的功能#********* Begin *********#if conn.hexists('request:info:' + str(user_id), 'time'):returnpipe = conn.pipeline()pipe.lpush('cab:queue', user_id)pipe.hmset('request:info:'+str(user_id), {'time': time.time(), 'priority':priority})pipe.expire('request:info:'+ str(user_id), 10 * 60)pipe.execute()#********* End *********## 平台选择优先级最高的派车请求并派车
def allocate():# 请在下面完成要求的功能#********* Begin *********#cab_queue=conn.sort('cab:queue',by='request:info:*->priority',desc=True)current_respond=cab_queue[0]conn.lrem('cab:queue', current_respond, 1)return current_respond#********* End *********## 用户端取消派车请求
def cancel_cab(user_id):conn.expire('request:info:' + str(user_id), 0)conn.lrem('cab:queue', user_id)

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/238962.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“上云”还是“下云”?探云计算的下一站未来!

引言 10 月 27 日,X(原Twitter)工程技术发布帖子称,在过去的一年里,技术团队优化了 X 的云服务使用方式,着手将更多工作负载迁往本地基础设施。这一转变使 X 每月的云成本降低了 60%。所有媒体、Blob 存储均…

hls实现播放m3u8视频将视频流进行切片 HLS.js简介

github官网GitHub - video-dev/hls.js: HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.HLS.js is a JavaScript library that plays HLS in browsers with support for MSE. - GitHub - video-dev/hls.js: HLS.js is a JavaScript library …

【C++】string类模拟实现过程中值得注意的点

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.有关const的使用 &#x…

【Python表白系列】一起去看流星雨吧!(完整代码)

文章目录 流星雨环境需求完整代码详细分析系列文章流星雨 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want5…

第二十二章 指定元素和属性的命名空间 - 指定被视为Global元素的对象的命名空间

文章目录 第二十二章 指定元素和属性的命名空间 - 指定被视为Global元素的对象的命名空间指定被视为Global元素的对象的命名空间指定映射为元素的属性的命名空间案例1:属性被视为本地元素案例2:属性被视为Global元素 第二十二章 指定元素和属性的命名空间 - 指定被视…

Python实现的堆栈结构示例

一、堆栈结构介绍: 堆栈,是一种容器,可存入数据元素、访问元素、删除元素, 它的特点在于只能允许在容器的一端(称为栈顶,top )进行加入数据(push)和输出数据(…

TCP/IP_整理起因

先分享一个初级的问题;有个客户现场,终端设备使用客户网络更新很慢,使用手机热点更新速度符合预期;网络部署情况如下: 前期花费了很大的精力进行问题排查对比,怀疑是客户网络问题(其他的客户现…

LabVIEW在调用image.cpp或drawmgr.cpp因为DAbort而崩溃

LabVIEW在调用image.cpp或drawmgr.cpp因为DAbort而崩溃 出现下列问题,如何解决? 1. LabVIEW 程序因image.cpp或drawmgr.cpp中的错误而崩溃 2. 正在通过cRIO-9034运行独立的LabVIEW应用程序,但它因drawmgr.cpp中的错误而崩溃 …

013 OpenCV copyMakeBorder(padding)

目录 一、环境 二、原理 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、原理 cv.copyMakeBorder是OpenCV库中的一个函数,用于在图像周围添加边框(padding)。这个函数可以用于图…

深入理解前端路由:构建现代 Web 应用的基石(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

python+pytest接口自动化(6)-请求参数格式的确定

我们在做接口测试之前,先需要根据接口文档或抓包接口数据,搞清楚被测接口的详细内容,其中就包含请求参数的编码格式,从而使用对应的参数格式发送请求。例如某个接口规定的请求主体的编码方式为 application/json,那么在…

使用YOLOv8训练自己的数据集

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 拉取项目 git clone https://github.com/ultralytics/ultralytics安装依赖 cd ultralytics pip install -r requirement.txt pip instal…