简介 Redis 命令十分丰富,包括键(Key)、字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)、发布与订阅(Pub/Sub)等 14 个 Redis 命令组,共两百多条 Redis 命令。
本实训项目的主要内容是通过 API 学习常用的 Redis 命令,并使用客户端与 Redis 进行交互,最终将通过三个实际问题来检测学习效果。
第一关
#!/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 *********#第三关
#!/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)