第1关:字符串、列表与集合(命令行全部替换)
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import redis
conn = 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 *********#
第二关 哈希与有序集合(命令行全部替换)
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import redis
conn = 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 *********#
第三关 Redis基本事务与其他命令(命令行全部替换)
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import time
import redis
conn = redis.Redis()
# 用户端发起派车请求
def request_cab(user_id, priority):
# 请在下面完成要求的功能
#********* Begin *********#
if conn.hexists('request:info:' + str(user_id), 'time'):
return
pipe = 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)