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.mzph.cn/news/189407.shtml

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

相关文章

Python-docx 深入word源码 自定义页码页脚以动态显示总页数和当前页数

代码和效果图 先上能够正常显示页码页脚的Python代码和效果图,之后再解释原理和思路 from docx import Document from docx.shared import Pt from docx.oxml import OxmlElement from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from docx.oxml.ns import qn…

Elasticsearch:什么是非结构化数据?

非结构化数据定义 非结构化数据是指未按照设计的模型或结构组织的数据。 非结构化数据通常被归类为定性数据,可以是人类或机器生成的。 非结构化数据是最丰富的可用数据类型,经过分析后,可用于指导业务决策并在许多其他用例中实现业务目标。…

java原子类型

AtomicBoolean AtomicInteger AtomicLong AtomicReference<V> StringBuilder - 不是原子类型。StringBuilder 是 java.lang 包下的类 用法&#xff1a;无需回调改变数值

【学习记录】从0开始的Linux学习之旅——应用开发(helloworld)

一、概述 Linux操作系统通常是基于Linux内核&#xff0c;并结合GNU项目中的工具和应用程序而成。Linux操作系统支持多用户、多任务和多线程&#xff0c;具有强大的网络功能和良好的兼容性。本文主要讲述如何在linux系统上进行应用开发。 二、概念及原理 应用程序通过系统调用与…

今日现货黄金最新建议

近期现货黄金价格再度逼近历史高位&#xff0c;很多本来在场外观望的投资者&#xff0c;都纷纷希望进场一试身手。然而大涨大跌的行情并不是很适合新手投资者参与&#xff0c;如果大家还没做好技术上的准备&#xff0c;可以多听听正规交易平台的专业人士的意见。 在正式入市之前…

【LeetCode每日一题合集】2023.11.20-2023.11.26 (二叉树中的伪回文路径)

文章目录 53. 最大子数组和解法1——DP解法2——分治&#xff08;维护区间、类似线段树的思想&#xff09; 2216. 美化数组的最少删除数&#xff08;贪心&#xff09;2304. 网格中的最小路径代价1410. HTML 实体解析器&#xff08;模拟&#xff09;2824. 统计和小于目标的下标对…

jsp前端输入中文数据传到controller变成问号?的解决办法

还是写老师布置的实验的时候&#xff0c;解决了xml文件找不到的问题之后又遇到新的问题&#xff1a;前端登录处输入用户名和密码&#xff0c;结果明明输入的用户名是对的密码也是对的&#xff08;输入的用户名是中文&#xff09;&#xff0c;它就是显示用户名或密码错误。然后我…

mac 系统 vmware 安装centos8

选择镜像 安装系统 依次设置有告警的项目 设置用户名密码 设置root密码 重启系统 重启成功进入下面界面 勾选&#xff0c;点击done 点击箭头所指按钮 输入密码登录 安装成功了 设置网络 打开终端 切换root用户 输入下面指令 su root 输入root的密码 安装git

【Cisco Packet Tracer】交换机 学习/更新/泛洪/VLAN实验

交换机的功能是连接计算机、服务器、网络打印机、网络摄像头、IP电话等终端设备&#xff0c;并实现与其它交换机、无线接入点、路由器、网络防火墙等网络设备的互联&#xff0c;从而构建局域网络&#xff0c;实现所有设备之间的通信。 本文使用Cisco Packet Tracer仿真软件&…

DynamicDataSource

DynamicDataSource 多数据源&#xff0c;读写分离&#xff0c;主从数据库

算法题--排椅子(贪心)

题目链接 code #include<bits/stdc.h> using namespace std;struct node{int indx;//用来存储数组下标int cnt;//用来计数 };bool cmp(node a,node b){ //判断是否是数字最大的一个就是经过最多谈话人的道return a.cnt>b.cnt; } node row[2010],cow[2010];bool cmp…

润和软件HopeStage与深信服终端安全管理系统完成产品兼容性互认证

近日&#xff0c;江苏润和软件股份有限公司&#xff08;以下简称“润和软件”&#xff09;HopeStage 操作系统与深信服科技股份有限公司&#xff08;以下简称“深信服”&#xff09;终端安全管理系统完成产品兼容性测试。 测试结果表明&#xff0c;企业级通用操作系统HopeStage…

Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!

1、背景 集群配置为&#xff1a;8 个 node 节点&#xff0c;16 核 32G&#xff0c;索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。 1、应用对查询要求比较高&#xff0c;search 没有慢查询的状态。 2、集群压测性能不能上去&#xff0c;cpu 使用未打…

【已解决】如何打开设置了密码的7Z压缩文件?

7Z是一种常见的压缩文件格式&#xff0c;相比RAR和ZIP格式&#xff0c;它的压缩率更高&#xff0c;可以压缩出更小的文件体积&#xff0c;也同样可以设置密码保护&#xff0c;那设置了密码的7Z压缩文件要如何打开呢&#xff1f; 我们知道&#xff0c;7Z压缩文件设置密码保护后…

【Redis】Redis高并发高可用(集群方案)

Redis集群 Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的。之前,Redis分布式方案一般有两种: 1、客户端分区方案,优点是分区逻辑可控,缺…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C卷A模块基础设施设置/安全加固&#xff08;200分&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&am…

java+springboot停车场小区车库租赁预订系统ssm+jsp

该平台为客户和业主提供等信息服务平台的运营方&#xff0c;管理方&#xff0c;如何通过车库平台建立实现优化管理的方法提供参考。能够实现在一个相对广阔的地域内&#xff08;例如一座城市)的多个停车场的随意停车。管理平台会统一调度车位资源&#xff0c;自动进行交易结算。…

密码学概论之基本概念

本人信息安全专业&#xff0c;大三&#xff0c;为着将来考研做准备&#xff0c;打算按照自己目前的理解给大家唠唠密码学。 这个专栏我将从以下七个章节来聊聊密码学&#xff0c;若有不当之处&#xff0c;敬请指出。 • 密码学概论 • 流密码 • 分组密码 • 公钥密码 •…

Hdoop学习笔记(HDP)-Part.13 安装Ranger

十三、安装Ranger 1.安装服务 (1)Choose Services (2)Assign Masters (3)Assign Slaves and Clients 选择不安装Ranger Tagsync (4)Customize Services 设置RANGER ADMIN DB FLAVOR&#xff1a;选择MySQL&#xff0c;依据ambari使用的数据库来定 Ranger DB name&#xff…

16、什么是损失函数

上一节介绍了训练的过程,一个模型在训练的过程中,每一轮训练数据计算到到最后一层时,都会输出本轮的预测值,那么如何将本轮的预测值与标签中的真实值进行对比呢? 这就要用到损失函数(Loss function)。 什么是损失函数 损失函数是用来衡量模型预测结果与真实标签(grou…