第1关:Redis中的数据结构
编程要求
根据提示,打开命令行,启动 Redis 客户端并创建一些值:
使用默认配置后台启动 Redis 服务器
启动 Redis 客户端 redis-cli
设置字符串
键为 hello
值为 redis
设置列表,键为 educoder-list
从列表左侧推入元素 hello
从列表右侧推入元素 educoder
从列表右侧推入元素 bye
从列表右侧弹出一个元素
设置集合,键为 educoder-set
添加元素 c
添加元素 python
添加元素 redis
删除元素 c
设置哈希,键为 educoder-hash
添加键:python,值为:language
添加键:ruby,值为:language
添加键: redis,值为:database
删除键 ruby
设置有序列表,键为 educoder-zset
添加成员 jack,分值为 200
添加成员 rose,分值为 400
添加成员 lee,分值为 100
解答
redis-server
redis-cli
# 设置字符串
set hello redis
# 设置列表
lpush educoder-list hello
rpush educoder-list educoder
rpush educoder-list bye
rpop educoder-list
# 设置集合
sadd educoder-set c
sadd educoder-set python
sadd educoder-set redis
srem educoder-set c
# 设置哈希
hset educoder-hash python language
hset educoder-hash ruby language
hset educoder-hash redis database
hdel educoder-hash ruby
# 设置有序列表
zadd educoder-zset 200 jack
zadd educoder-zset 400 rose
zadd educoder-zset 100 lee
第2关:使用 Python 与 Redis 交互
编程要求
根据提示,在右侧Begin-End区域补充代码,实现使用 Python 编写程序与 Redis 交互:
使用方法2创建客户端r1连接到 Redis
设置下表中的两个字符串键:
键 值
test1 hello
test2 Redis
解答
#!/usr/bin/env python
#-*- coding:utf-8 -*-
def write_redis():
#********* Begin *********#
# 导入 redis 模块
import redis
# 创建连接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, decode_responses=True)
# 创建客户端并连接到 Redis
r1 = redis.Redis(connection_pool=pool)
# 使用 SET 命令设置字符串键
r1.set("test1", "hello")
r1.set("test2", "Redis")
#********* End *********#
第3关:使用Python+Redis实现文章投票网站后端功能
编程要求
根据提示,在右侧Begin-End区域补充代码,完成简化版文章投票网站的后端处理逻辑:
在 article_vote() 函数中:
该方法作用是:对文章投票
参数说明:
r:Redis 客户端
user_id:投票用户
article_id:被投票文章
已提供一周前 Unix 时间戳,存放在变量 cutoff
当满足以下条件时,为文章投一票:
该文章发布不超过一周
该用户没有为该文章投过票
在 post_article() 函数中:
该方法作用是:创建文章
参数说明:
r:Redis 客户端
user:发布用户
title:文章标题
link:文章链接
已提供:
article_id,新文章 ID
voted,新文章已投票用户名单存储键名
article,新文章详细信息存储键名
now,文章创建时间
按照 ID 递增的顺序依次创建文章
保证发布文章的用户不能给自己的文章投票
文章在发布一周后删除已投票用户名单
存储文章详细信息到 Redis 中,包括字段:
文章标题
文章链接
发布用户
存储文章的发布时间和初始投票数
初始投票数为 1
在 get_articles() 函数中:
该方法作用是:对文章进行排序
参数说明:
r:Redis 客户端
start:从排序为 start 的文章开始获取
end:到排序为 end 的文章结束获取
order:排序方式,分为两种:
time:按时间排序
score:按投票数排序
已提供文章信息空列表,articles
实现按时间/投票数排序
将排序后的文章及其全部信息组成一个列表:
按照不同排序规则取出排序在参数提供的区间范围内的文章
及每篇文章的全部信息,包括文章 ID
解答
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import time
ONE_WEEK_IN_SECONDS = 7 * 24 * 60 * 60
def article_vote(r, user_id, article_id):
cutoff = time.time() - ONE_WEEK_IN_SECONDS
# 请在下面完成要求的功能
#********* Begin *********#
if r.zscore('time', article_id) < cutoff:
return
if r.sadd('voted:' + article_id, user_id):
r.zincrby('score', article_id, 1)
#********* End *********#
def post_article(r, user, title, link):
article_id = str(r.incr('article'))
voted = 'voted:' + article_id
now = time.time()
article = 'article:' + article_id
# 请在下面完成要求的功能
#********* Begin *********#
r.sadd(voted, user)
r.expire(voted, ONE_WEEK_IN_SECONDS)
r.hmset(article, {
'title': title,
'link': link,
'poster': user,
})
r.zadd('score', article_id, 1)
r.zadd('time', article_id, now)
#********* End *********#
return article_id
def get_articles(r, start, end, order='score'):
articles = []
# 请在下面完成要求的功能
#********* Begin *********#
ids = r.zrevrange(order, start, end)
for id in ids:
article_data = r.hgetall(id)
article_data['id'] = id
articles.append(article_data)
#********* End *********#
return articles
标签:educoder,redis,Redis,头歌,初识,文章,article,id
From: https://blog.csdn.net/TluoshangY/article/details/143669435