项目六 键值数据库Redis_第1页
项目六 键值数据库Redis_第2页
项目六 键值数据库Redis_第3页
项目六 键值数据库Redis_第4页
项目六 键值数据库Redis_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大数据存储技术与应用案例所有教学资源,我们给;所有复杂操作,我们做;图书附赠,永久免费,只为老师用书更方便课件教案微课扫码题库建课互评考试平台

学习工具0102030405申请签到功能建课、建班(无需操作,技术专员负责搭建)系统自动记录考勤分创建签到学生扫码签到扫码申请免费开通签到功能→动态二维码,防作弊

考勤记录自动统计,汇入学生总成绩课堂签到项目一大数据存储入门项目三列式数据库HBase项目二数据仓库Hive项目四文档数据库MongoDB项目五图数据库Neo4j项目六键值数据库Redis项目七NewSQL数据库CockroachDB键值数据库Redis项目六

任务一采用单机模式部署Redis

任务二操作社交媒体数据键值数据库是一种以键值对形式存储数据的简单数据库,在快速处理数据和实时应用开发中发挥着重要作用。Redis是一个经典的键值数据库,它不仅可以存储不同类型的键值数据,还提供了丰富的数据操作命令和持久化机制,适用于缓存系统、消息队列和实时分析等场景。本项目将介绍键值数据库和Redis的相关知识,采用单机模式部署Redis,操作社交媒体数据。项目导读项目目标了解键值数据库的特点和应用场景。掌握Redis的存储结构和数据类型。掌握Redis中键、字符串、哈希表、列表、集合和有序集合的基本操作。掌握Redis持久化的方法。能采用单机模式部署Redis。能使用Redis操作不同类型的数据,灵活存储和管理大规模数据。能实现Redis持久化,长期存储业务中的数据。培养自主学习意识,提升实践操作能力。掌握创新方法,培养独立思考和解决问题的能力。采用单机模式部署Redis任务一Redis支持4种部署模式,分别为单机模式、主从复制模式、哨兵模式和集群模式。为了方便演示Redis的使用方法,我们采用单机模式部署Redis。在这种模式下,Redis运行在单个节点上,不用进行数据分片或复制。采用单机模式部署Redis之前,我们先来学习一下键值数据库的特点和应用场景,以及Redis的存储结构和数据类型。任务准备问题1:简述键值对的概念。全班学生以3~5人为一组,各组选出组长。组长组织组员扫码观看“键值对概述”视频,讨论并回答下列问题。问题2:简述键值对的应用场景。键值对概述一、键值数据库概述

键值数据库是一种轻量级的NoSQL数据库,其设计和运行主要依赖于计算机的内存,读写数据的速度非常快,常用于快速处理大规模数据。1、键值数据库的特点键值数据库的特点(1)数据存储结构简单键值数据库中数据的存储结构主要包括键和值,不需要设计复杂的数据模型,使得数据存储和检索变得非常直接和高效。(2)高性能键值数据库主要基于内存存储数据,而且不需要复杂的查询操作或连接操作,因此大幅缩短了访问数据的时间。(3)高可扩展性键值数据库易于扩展,可以轻松应对数据量的大幅增长。(4)高灵活性键值数据库不依赖于固定的数据模型,允许存储不同的数据,包括文本、图片、视频等。一、键值数据库概述2、键值数据库的应用场景二、Redis的存储结构Redis是一个开源的、使用C语言编写的键值数据库,它的存储结构主要包括键和值。(1)键(key)键是一个唯一的标识符,用于定位和访问与之关联的值。用户可以根据需要在键的左侧加上前缀(prefix),用于组织和管理键,如“prefix:key”。(2)值(value)值是与键相关联的数据或信息,它可以是字符串、哈希、列表、集合和有序集合等类型的数据。针对不同类型的数据,Redis提供了不同的操作命令。三、Redis的数据类型Redis键值数值库主要提供了哪些常用的数据结构类型?三、Redis的数据类型数据类型描述示例String

(字符串)字符串是最基本的数据类型,可以存储数字、文本、图片或序列化的对象等数据。需要注意的是,字符串的最大容量为512MBkeyvalueHash

(哈希)哈希是多个键值对的集合,用于存储对象。其中,每个对象都是由字段(field)和值组成。哈希的底层是使用哈希表实现的,因此也常被称为哈希表keyfield1value1field2value2List

(列表)列表可以有序地存储多个字符串。列表的底层是使用双向链表实现的,因此允许在链表两端快速地添加或删除元素keyvalue1value2Set

(集合)集合可以无序地存储多个不重复的字符串元素keymember1member2SortedSet

(有序集合)有序集合类似于集合,不同的是,有序集合的每个元素都有一个分数(score),并根据分数对元素进行排序keyscore1member1score2member2键只能是字符串类型,值可以是字符串、哈希、列表、集合和有序集合等多种类型。用户可以根据业务需求选择合适的数据类型,从而提高数据存储和访问的效率。任务实施

任务分析首先安装C语言编译器gcc;然后安装Redis;最后启动Redis服务器和CLI,验证Redis是否部署成功。

实施步骤采用单机模式部署Redis任务实施

实施步骤1、安装并配置Zookeeper步骤1启动Master主机的终端,执行如下命令,安装C语言编译器gcc。[hadoop@Master~]$sudoyuminstallgcc-c++Redis是使用C语言编写的,它的运行需要C环境,所以在部署Redis前需要先安装C语言编译器gcc。高手点拔步骤2执行如下命令,下载Redis安装文件。[hadoop@Master~]$cd下载[hadoop@Master下载]$wgethttp://download.redis.io/releases/

redis-7.0.9.tar.gz任务实施执行如下命令,将Redis安装文件解压到“/usr/local”目录中;然后将“redis-7.0.9”目录重命名为“redis”;最后将该目录的所有权限赋予hadoop用户。步骤3[hadoop@Master下载]$sudotar-zxfredis-7.0.9.tar.gz-C/usr/local[hadoop@Master下载]$cd/usr/local[hadoop@Masterlocal]$sudomvredis-7.0.9redis[hadoop@Masterlocal]$sudochown-Rhadoop./redis执行如下命令,编译文件,生成可执行文件redis-server、redis-cli等。[hadoop@Masterlocal]$cdredis[hadoop@Masterredis]$make步骤4任务实施执行如下命令,打开“.bashrc”配置文件;然后在文件首行添加如下配置信息;最后保存并关闭配置文件。[hadoop@Masterredis]$sudovim~/.bashrc#配置信息exportPATH=$PATH:/usr/local/redis/src步骤5执行如下命令,使配置信息生效。步骤6[hadoop@Masterredis]$source~/.bashrc执行如下命令,启动Redis服务器。若出现Redis的版本信息,则证明Redis服务器启动成功。步骤7[hadoop@Masterredis]$redis-serverRedis服务器启动成功的界面任务实施在Master主机上启动一个新的终端,执行如下命令,启动RedisCLI。若出现“:6379>”提示符,则证明RedisCLI启动成功。步骤8[hadoop@Master~]$redis-cli--raw执行如下语句,退出RedisCLI。步骤9:6379>exit操作社交媒体数据任务二某社交媒体平台的部分数据如表所示。用户名邮箱帖子标题帖子内容Alicealice@Redis入门教程这是一篇关于Redis的入门教程……Redis进阶教程这是一篇关于Redis的进阶教程……Bobbob@Redis高级特性这篇文章介绍了Redis的一些高级特性……操作社交媒体数据任务二社交媒体数据能够反映用户的兴趣偏好、消费行为和购买能力等多维度信息。存储和分析社交媒体数据能够为企业的产品开发定位、市场推广和客户关系管理提供科学的数据支持和战略指导。在操作社交媒体数据之前,我们先来学习一下Redis中键、字符串、哈希表、列表、集合和有序集合的基本操作,以及Redis持久化。任务准备问题1:简述持久化的概念。全班学生以3~5人为一组进行分组,各组选出组长。组长组织组员扫码观看“持久化概述”视频,讨论并回答下列问题。问题2:简述持久化的作用。持久化概述一、键的基本操作如果键有前缀,则使用命令时需要加上键的前缀,如“EXISTSclass1:student”。高手点拔命令描述EXISTSkey1key2…检查指定的一个或多个键是否存在。结果返回0,表示键不存在;结果返回1,表示键存在TYPEkey获取指定键所储存的值的数据类型KEYSpattern获取所有匹配的键。其中,参数pattern为匹配条件,当pattern为*时获取所有键DBSIZE获取键的数量RENAMEkeynewkey修改指定键的名称。其中,参数newkey表示修改后键的名称DELkey1key2…删除指定的一个或多个键EXPIREkeyseconds设置指定键的过期时间,单位为秒TTLkey获取指定键的剩余生存时间,单位为秒在Redis中,使用EXISTS、TYPE、KEYS等键命令可以实现键的基本操作。一、键的基本操作例6-1步骤1:6379>SETstudent:1Alice:6379>SETstudent:2Bob:6379>SETstudent:3Charlie操作键。执行如下语句,使用SET命令设置3个学生信息键值对。其中,student为键的前缀;1、2、3为键;Alice、Bob和Charlie分别为键的值。步骤2:6379>EXISTSstudent:1执行如下语句,检查键student:1是否存在。结果返回1,表示键student:1存在。步骤3:6379>TYPEstudent:1执行如下语句,获取键student:1的值的数据类型。检查键student:1是否存在的结果键student:1的值的数据类型一、键的基本操作步骤4:6379>DBSIZE执行如下语句,获取键的数量。步骤5:6379>RENAMEstudent:3student:id_3执行如下语句,修改键student:3的名称。键的数量步骤6:6379>DELstudent:id_3执行如下语句,删除键student:id_3。步骤7:6379>KEYSstudent:*执行如下语句,获取所有前缀为student的键所有前缀为student的键二、字符串的基本操作在Redis中,使用SET、MSET、SETNX等字符串命令可以实现字符串的基本操作。命令描述SETkeyvalue设置键值对。若该键已经存在,则该键的旧值将会被value覆盖MSETkey1value1key2value2...设置一个或多个键值对SETNXkeyvalue只有当键不存在时,设置键值对GETkey获取指定键的值MGETkey1key2...获取一个或多个指定键的值GETSETkeyvalue将指定键的值设置为value,并返回键的旧值APPENDkeyvalue将字符串value追加到指定键的值的末尾。若键不存在,APPEND命令会创建一个新的键,并将value设置为该键的值STRLENkey获取指定键的值的长度GETRANGEkeystartend获取指定键的值的子字符串。其中,start表示子字符串的起始位置;end表示子字符串的结束位置二、字符串的基本操作例6-2步骤1:6379>SETdiary:1"Todaywasagreatday!":6379>SETdiary:2"Feelingexcitedabouttheupcomingtrip."操作字符串。执行如下语句,设置两个日记键值对。步骤2:6379>APPENDdiary:1"Imetupwithsomeoldfriends."执行如下语句,向键diary:1的值的末尾追加字符串。步骤3:6379>STRLENdiary:1执行如下语句,获取键diary:1的值的长度。键diary:1的值的长度步骤4:6379>GETRANGEdiary:2012执行如下语句,获取键diary:2的值的子字符串。键diary:2的值的子字符串三、哈希表的基本操作在Redis中,使用HSET、HMSET、HSETNX等哈希命令可以实现哈希表的基本操作。命令描述HSETkeyfieldvalue将指定哈希表key中指定字段field的值设置为valueHMSETkeyfield1value1field2value2…设置指定哈希表中的一个或多个指定字段的值HSETNXkeyfieldvalue当字段field不存在时,设置指定哈希表中字段的值HGETkeyfield获取指定哈希表中指定字段的值HMGETkeyfield1field2…获取指定哈希表中一个或多个指定字段的值HKEYSkey获取指定哈希表中的所有字段HVALSkey获取指定哈希表中的所有值HLENkey获取指定哈希表中的字段数量HGETALLkey获取指定哈希表中的所有字段和值HEXISTSkeyfield检查指定哈希表中的指定字段是否存在HDELkeyfield1field2...删除指定哈希表中的一个或多个指定字段三、哈希表的基本操作例6-3步骤1:6379>HMSETteacher:id_1username"张三"

age30city"北京"操作哈希表。执行如下语句,设置哈希表teacher:id_1中多个指定字段的值。步骤2:6379>HGETteacher:id_1username执行如下语句,获取哈希表teacher:id_1中username字段的值步骤3:6379>HGETALLteacher:id_1执行如下语句,获取哈希表teacher:id_1中的所有字段和值。哈希表中username字段的值 哈希表中的所有字段和值三、哈希表的基本操作步骤4:6379>HEXISTSteacher:id_1age执行如下语句,检查哈希表teacher:id_1中的age字段是否存在。结果返回1表示age字段存在。步骤5:6379>HDELteacher:id_1city执行如下语句,删除哈希表teacher:id_1中的city字段。步骤6:6379>HLENteacher:id_1执行如下语句,获取哈希表teacher:id_1中的字段数量。哈希表中age字段是否存在的结果哈希表中的字段数量四、列表的基本操作在Redis中,使用LPUSH、RPUSH、LPOP等列表命令可以实现列表的基本操作。命令描述LPUSHkeyvalue1value2...将一个或多个元素插入指定列表key的头部RPUSHkeyvalue1value2...将一个或多个元素插入指定列表的尾部LPOPkey移出并返回指定列表的第一个元素RPOPkey移出并返回指定列表的最后一个元素LRANGEkeystartstop获取指定列表中指定范围内的元素。其中,start表示起始索引,0表示列表的第一个元素;stop表示结束索引,-1表示列表的最后一个元素LINDEXkeyindex获取指定列表中指定索引位置的元素LLENkey获取指定列表的长度LINSERTkeyBEFORE|AFTERpivotvalue在指定列表中指定元素pivot的前方或后方插入新元素valueLREMkeycountvalue删除指定列表中与指定值匹配的元素。其中,count大于0时,从列表头部开始删除count个匹配的元素;count小于0时,从列表尾部开始删除count个匹配的元素;count等于0时,删除所有匹配的元素四、列表的基本操作例6-4步骤1:6379>LPUSHfruits苹果香蕉橙子葡萄操作哈希表。执行如下语句,向列表fruits的头部插入元素。步骤2:6379>LLENfruits执行如下语句,获取列表fruits的长度。步骤3:6379>LRANGEfruits13执行如下语句,获取列表fruits中索引为1到3的元素列表fruits的长度索引为1到3的元素四、列表的基本操作步骤4:6379>LINSERTfruitsBEFORE橙子西瓜执行如下语句,在列表fruits中的橙子元素之前插入一个新元素。步骤5:6379>LREMfruits0香蕉执行如下语句,删除列表fruits中与香蕉匹配的所有元素。步骤6:6379>LRANGEfruits0-1执行如下语句,获取列表fruits中的所有元素。列表fruits中的所有元素五、集合的基本操作在Redis中,使用SADD、SMEMBERS、SISMEMBER等集合命令可以实现集合的基本操作。命令描述SADDkeymember1member2...向指定集合key中添加一个或多个成员memberSMEMBERSkey获取指定集合中的所有成员SISMEMBERkeymember检查指定集合中的指定成员是否存在SCARDkey获取指定集合中的成员数量SREMkeymember1member2...从指定集合中移除一个或多个成员SUNIONkey1key2...返回指定集合的并集SINTERkey1key2...返回指定集合的交集SDIFFkey1key2...返回指定集合的差集五、集合的基本操作例6-5步骤1:6379>SADDclass1张三李四王二操作集合。执行如下语句,向集合class1中添加3个学生成员。步骤2:6379>SADDclass2张三赵六孙七执行如下语句,向集合class2中添加3个学生成员。步骤3:6379>SREMclass1王二执行如下语句,从集合class1中移除一个学生成员。步骤4:6379>SUNIONclass1class2执行如下语句,获取集合class1和集合class2的并集。集合class1和集合class2的并集六、有序集合的基本操作在Redis中,使用ZADD、ZRANGE、ZREVRANGE等有序集合命令可以实现有序集合的基本操作。命令描述ZADDkeyscore1member1score2member2...向指定有序集合中添加一个或多个成员,每个成员都有一个关联的分数ZRANGEkeystartstop[WITHSCORES]按照分数从低到高的顺序,返回有序集合中指定范围内的成员。其中,WITHSCORES为可选参数,用于返回成员的分数;start表示起始索引;stop表示结束索引ZREVRANGEkeystartstop[WITHSCORES]按照分数从高到低的顺序,返回有序集合中指定范围内的成员ZSCOREkeymember获取指定有序集合中指定成员的分数ZCARDkey获取指定有序集合的成员数量ZREMkeymember1member2...从指定有序集合中移除一个或多个成员ZCOUNTkeyminmax计算有序集合中分数在指定范围内的成员数量。其中,min表示分数的最小值;max表示分数的最大值ZREMRANGEBYSCOREkeyminmax从指定有序集合中移除指定分数范围内的成员ZREMRANGEBYRANKkeystartstop从指定有序集合中移除指定排名范围内的成员六、有序集合的基本操作例6-6步骤1:6379>ZADDclass1_scores90张三85李四92王二操作有序集合。执行如下语句,向有序集合class1_scores中添加3个成员。步骤2:6379>ZREVRANGEclass1_scores01WITHSCORES执行如下语句,按照分数从高到低的顺序,返回有序集合class1_scores中分数排名前二的学生姓名及其分数。步骤3:6379>ZCOUNTclass1_scores8590执行如下语句,计算有序集合class1_scores中分数在85到90之间的成员数量。分数排名前二的学生姓名及其分数分数在85到90之间的成员数量七、Redis持久化

定义:是指将Redis内存中的数据保存到磁盘上的过程,以防止在服务器重启或异常情况下丢失数据。RDB持久化AOF持久化混合持久化七、Redis持久化RDB持久化RDB持久化是Redis默认的数据持久化机制,它按照预设的时间间隔将内存中的数据快照异步写入磁盘。①Redis会创建一个子进程执行持久化操作,避免干扰主进程执行数据的读写操作②子进程会将数据快照写入临时文件(二进制形式),待写入成功后替换原RDB文件。七、Redis持久化RDB持久化实现RDB持久化的方法定时执行在“redis.conf”配置文件中添加如下配置信息,调整自动触发RDB持久化的条件。手动执行在Redis客户端执行bgsave命令可以手动实现RDB持久化。#配置信息,如指定10秒内有两次更新操作,就执行RDB持久化操作save102七、Redis持久化RDB持久化RDB持久化的优点:(1)备份与恢复高效(2)对主进程性能影响小(3)启动速度快等。RDB持久化的过程中可能会发生数据丢失,无法保证数据的完整性和一致性。执行save命令也可以实现RDB持久化,但是在持久化过程中会阻塞当前的Redis主进程,直到RDB文件创建完毕。因此,不建议使用save命令实现RDB持久化。高手点拔为什么不建议使用save命令实现RDB持久化?七、Redis持久化AOF持久化定义:是Redis的主流持久化机制。它通过记录服务器接收到的所有写操作命令,并将这些命令以文本的形式追加到AOF文件中来实现持久化。AOF持久化即使在系统崩溃的情况下,只要AOF文件存在,就可以通过重新执行该文件中的写操作来恢复数据库的最新状态,从而实现数据的持久化。七、Redis持久化AOF持久化在Redis的“redis.conf”配置文件中有以下3种持久化配置。用户可以根据需求选择合适的持久化配置。appendfsyncalways #每次有数据修改发生时都会同步appendfsynceverysec #每秒同步一次appendfsyncno #不主动同步Always:表示每次有数据修改发生时都会立即将数据同步写入磁盘,这可以最大程度上保证数据的一致性和可靠性,但对性能有较大的影响Everysec:表示每秒执行一次数据同步操作,该配置平衡了数据安全性和性能No:表示有数据修改发生时不主动执行数据同步操作,完全依赖操作系统的策略来决定数据何时同步到磁盘,该配置的性能最好,但可能会发生数据丢失。混合持久化是指同时使用RDB持久化和AOF持久化,保留了两种持久化机制的优点,从而提供更可靠和更灵活的数据持久化方案。高手点拔什么是混合持久化?任务实施

任务分析为了防止存储在Redis中的社交媒体数据丢失,需要先配置持久化;然后根据需要操作社交媒体数据。

实施步骤操作社交媒体数据任务实施

实施步骤1、配置持久化步骤1启动Master主机的终端,执行如下命令,创建目录用于存放AOF文件。[hadoop@Masterredis]$geditredis.conf步骤2执行如下命令,打开“redis.conf”配置文件。appendonlyyes步骤3按“Ctrl+F”组合键,在“redis.conf”配置文件中查找“appendonlyno”,并将其修改为如下配置信息,开启AOF持久化功能。本教材选用Redis的AOF持久化机制实现数据的持久化。[hadoop@Master~]$cd/usr/local/redis[hadoop@Masterredis]$mkdirdata任务实施

实施步骤dir/usr/local/redis/data步骤6重启Master主机和终端。步骤4按“Ctrl+F”组合键,在“redis.conf”配置文件中查找“dir./”,并将其修改为如下配置信息,指定存储AOF文件的目录。步骤5按“Ctrl+F”组合键,在“redis.conf”配置文件中查找“appendfsynceverysec”,若其左侧有注释符(#),则删除注释符;然后保存并关闭配置文件。步骤7执行如下命令,使用指定的配置文件启动Redis服务器。appendfsynceverysec[hadoop@Master~]$redis-server/usr/local/redis/redis.conf步骤8在Master主机上启动一个新的终端,执行如下命令,启动RedisCLI。[hadoop@Master~]$redis-cli--raw任务实施2、操作社交媒体数据步骤1执行如下语句,以字符串类型存储用户信息,并使用user前缀组织和管理键。:6379>SETuser:1"username:Alice,email:alice@":6379>SETuser:2"username:Bob,email:bob@"分析表中的数据,我们以字符串类型存储用户信息(用户名和邮箱),便于快速访问数据;以哈希类型存储帖子的多个属性(标题和内容),可以单独操作每个属性而无须加载整个对象,从而提升数据操作的速度;以列表类型存储用户发布的帖子ID,便于管理和查询某个用户的所有帖子,并记录用户发布帖子的顺序。任务实施

实施步骤:6379>HMSETpost:1title"Redis入门教程"content"这是一篇关于Redis的入门教程……":6379>HMSETpost:2title"Redis高级特性"content"这篇文章介绍了Redis的一些高级特性……":6379>HMSETpost:3title"Redis进阶教程"content"这是一篇关于Redis的进阶教程……"步骤2执行如下语句,以哈希类型存储每个帖子的详细信息,并使用post前缀组织和管理键。其中,可以将每个帖子的键视为帖子的ID。步骤3执行如下语句,以列表类型存储用户发布的帖子,每个元素是一个帖子的ID,并使用posts:user前缀组织和管理键。#Alice的帖子列表,分别为post:1和post:3:6379>LPUSHposts:user:1post:1post:3#Bob的帖子列表,为post:2:6379>LPUSHposts:user:2post:2任务实施

实施步骤:6379>EXISTSuser:1步骤4执行如下语句,检查用户user:1是否存在。结果返回1,表示用户user:1存在。步骤6执行如下语句,获取用户user:1的信息,结果如图6-22所示。:6379>GETuser:1:6379>KEYSuser:*步骤5执行如下语句,统计所有用户。所有用户用户user:1的信息任务实施

实施步骤:6379>HGETALLpost:1步骤7执行如下语句,获取帖子post:1的详细信息,包括标题和内容。步骤9执行如下语句,获取用户user:1发布的帖子数量。:6379>LLENposts:user:1:6379>HKEYSpost:2步骤8执行如下语句,获取帖子post:2包含的所有字段。帖子post:1的详细信息帖子post:2包含的所有字段用户user:1发布的帖子数量步骤10执行如下语句,删除用户user:1发布的第一个帖子。:6379>RPOPposts:user:1项目实训

实训目标某图书借阅平台的部分数据如表所示。熟练操作键。熟练操作字符串、哈希表、列表、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论