首页 > 数据库 >头歌解答 初识Redis

头歌解答 初识Redis

时间:2024-11-10 23:44:11浏览次数:3  
标签:educoder redis Redis 头歌 初识 文章 article id

第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

相关文章

  • Redis 入门使用
    第一步:下载安装redis服务端1.网盘地址: 链接:https://pan.baidu.com/s/1lUQMTSb1laFfoSbN9Z85lw?pwd=pvmd提取码:pvmd2.官网自行下载: https://redis.io/downloads/第二步:下载安装redis可视化管理工具1.网盘地址: 通过百度网盘分享的文件:redis-desktop-manager-0.8.8.3......
  • Redis四种架构模式
    文章目录1.引言2.单机模式概述优缺点分析配置与优化3.主从复制模式概述主从同步机制读写分离常见问题示例配置4.哨兵模式哨兵模式的架构工作原理选举机制哨兵模式配置常见问题与调试建议5.Cluster模式概述Cluster模式的架构组成数据分片与重分片故障检测与恢复......
  • 135机型-初识
    NikonFE生产年代:1978年机型:35mm单反(35mm胶片非常有电影感)亮点:第一款将光电传感器直接集成到电路封装的相机上快门:电子快门,速度8秒到1/1000秒操作性:手动对焦,兼具A档和M档  OlympusPenFv/Ft生产年代:PenF-1963年9月,FT-1966年(内置测光表),FV-1967年(没有测光系统)......
  • 初识指针,结构体
    <1,内存计算机对内存的使用就像现实世界对空间的使用。将一个空间(内存)划分为一个个的格子1,内存利用地址线携带的电信号进行编号,如32位电脑有2的32次方个地址2,一个内存单元是1byte(这是经过权衡之后的结果)<2,地址当取a的地址时,实际上获取的是其所占四个字节的第一个字节的......
  • Redis8:商户查询缓存2
    欢迎来到“雪碧聊技术”CSDN博客!在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目......
  • Redis
    Redis概念和基础Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。什么是RedisRedis是一款内存高速缓存数据库。支持key-value存储系统,支持丰富的数据类型,如:st......
  • Redis中的持久化
    什么是Redis持久化?        Redis是一个内存数据库,也就是说它主要把数据存储在内存中,这样可以实现非常高的读写速度。通常,内存数据库是非常快速且高效的,但它也有一个很大的问题:数据丢失的风险。因为当Redis服务关闭或系统崩溃时,所有存储在内存中的数据都将丢失。......
  • Redis的线程模型
    Redis的单线程模型详解        Redis的“单线程”模型主要指的是其主线程,这个主线程负责从客户端接收请求、解析命令、处理数据和返回响应。为了深入了解Redis单线程的具体工作流程,我们可以将其分为以下几个步骤:接收客户端请求Redis的主线程会通过网络接口接......
  • Redis面试题二
    Redis常见面试题及详细解答(二)为了帮助您更全面地准备Redis相关的面试,以下是另外50道涵盖初级、中级和高级的Redis常见面试题,并附有详细解答和分析说明。初级问题1.Redis的数据过期策略有哪些?回答:Redis的数据过期策略主要包括以下几种:惰性删除(LazyExpiration):只有......
  • 在 Linux 上部署 Redis 通常有两种常见的方法
    在Linux上部署Redis通常有两种常见的方法:一种是通过包管理工具(如apt或yum)直接安装,另一种是通过源码编译安装。下面将分别介绍这两种方法。1.使用包管理工具安装Redis1.1.在Ubuntu/Debian上安装Redis更新包索引:sudoaptupdate安装Redis:sudoaptinsta......