版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Redis 实战一、课程目标NoSQLRedisRedis 的安装Redis 的基本数据类型SpringBoot 整合 RedisRedis 主从、安全、哨兵Redis 事物、持久化机制、发布与订阅模式Redis 集群二、NoSQLNoSQL 是 Not Only SQL 的缩写,意即"不仅仅是 SQL"的意思,泛指非关系型的数据库。强调 Key-Value Stores 和文档数据库的优点,而不是单纯的RDBMS。NoSQL是传统关系型数据库的功能版本,通过减少用不到或很少用的功能,来大幅度提高性能NoSQLredis、mongodb Membase、HBase三、Red
2、is 简介3.1 什么是 Redis?Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。Redis 与其他 key - value 缓存有以下三个特点:Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的。Redis 支持数据的备份,即 master-slave 模式的数据备份。3.2 Redis 应用场景主要能够体现 解决数据库的。例如:时间有效期、session 共享解决方案3.3 Re
3、dis 优势性能极高 Redis 能读的速度是 110000 次/s,写的速度是 81000 次/s 。丰富的数据类型 Redis 支持二进制案例的 Strings, Lists, Hashes, Sets 及Ordered Sets 数据类型操作。原子 Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作子性执行。后的原丰富的特性 Redis 还支持 publish/subscribe, 通知, key 过期等等特性。3.4 Redis 与其他 key-value有什么不同?Redis 有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。R
4、edis 的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样 Redis 可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机。四、Redis 安装4.1 windows 安装 redis4.2 linux 安装 redisRedis 的Redis 源码包)Redis 服务器端的默认端口是 6379。(这里的是
5、 Linux 版的是:这里以虚拟机中的 Linux 系统如何安装 Redis 进行讲解。在 windows 系统中好 Redis 的源码包。1. 通过 WinSCP 工具,将 Redis 的源码包由 windows 上传到 Linux 系统的这个目录/opt/redis (即根目录下的 lamp 文件夹)。2. 解压缩。tar -zxf redis-2.6.17.tar.gz3. 切换到解压后的目录。cd redis-2.6.17( 一般来说,解压目录里的 INSTALL 文件或 README 文件里写有安装说明,可参考之)4. 编译。make(注意,编译需要 C 语言编译器 gcc 的支持,
6、如果没有,需要先安装 gcc。可以使用rpm -q gcc 查看 gcc 是否安装)(利用 yum安装 gcc令yum -y install gcc )(如果编译出错,请使用 make clean 清除临时文件。之后,找到出错的问题后再来重新安装。 ),解决5. 进入到 src 目录。cd src6. 执行安装。make install到此就安装完成。但是,由于安装 redis 的时候,我们没有选择安装路径,故是默认位置安装。在此,我们可以将可执行文件和配置文件移动到习惯的目录。cd /usr/localmkdir -p /usr/local/redis/bin mkdir -p /usr/l
7、ocal/redis/etc cd /lamp/redis-2.6.17cp ./redis.conf /usr/local/redis/etc cd srccp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check- dump redis-cli redis-server redis-sentinel /usr/local/redis/bin7开放 linux 6379 端口1. 编辑 /etc/sysconfig/iptables 文件:vi /etc/sysconfig/iptables加入内容并保存:-A RH-Fire
8、wall-1-INPUT -m state state NEW -m tcp -p tcp dport 6379 -j ACCEPT2. 重启服务:/etc/init.d/iptables restart 3.查看端口是否开放:/sbin/iptables -L -n比较重要的 3 个可执行文件:redis-server:Redis 服务器程序redis-cli:Redis 客户端程序,它是一个命令行操作工具。也可以使用 telnet 根据其纯文本协议操作。redis-benchmark:Redis 性能测试工具,测试 Redis 在你的系统及配置下的读写性能。4.2.1 Redis 的启动命
9、令:/usr/local/redis/bin/redis-server或cd /usr/local/redis/bin./redis-server /usr/local/redis/etc/redis.conf为redis-server 指定配置文4.2.2 修改 redis.conf 文件daemonize yes - 修改为 yes启动requirepass 123456注释取消掉设置账号ps aux | grep '6379'- kill -15 9886 - 杀死重置kill -9 9886 - 强制杀死端口service iptables stop 停止防火强4.2.
10、3 redis 命令连接方式./redis-cli -h 127.0.0.1 -p 6379 -a "123456"- redis使用账号连接PING 结果表示4.2.4 停止 redisredis-cli shutdown 或者 kill redis 进程的 pid4.2.5 关闭五、Redis 客户端连接方式使用 redisclient-win32.x86.1.5六、Redis 的基本数据类型6.1 字符串类型(String)"redis"redis 127.0.0.1:6379> SET mykey "redis" OKr
11、edis 127.0.0.1:6379> GET mykey在上面的例子中,SET 和 GET 是 redis 中令,而mykey 是键的名称。Redis 字符串命令用于管理 Redis 中的字符串值。以下是使用 Redis 字符串命令的语法。redis 127.0.0.1:6379> COMMAND KEY_NAME示例Shell在上面的例子中,SET 和 GET 是 redis 中令,而mykey 是键的名称。Redis 字符串命令下表列出了一些用于在 Redis 中管理字符串的基本命令。编号命令描述说明1SET key value此命令设置指定键的值。2GET key获取指定
12、键的值。3GETRANGE key start end获取在键上的字符串的子字符串。4GETSET key value设置键的字符串值并返回其旧值。5GETBIT key offset返回在键处的字符串值中偏移处的位值。6MGET key1 key2.获取所有给定键的值7SETBIT key offset value在键上的字符串值中设置或清除偏移处的位8SETEX key seconds value使用键和到期时间来设置值9SETNX key value设置键的值,仅当键不存在时10SETRANGE key offset value在指定偏移处开始的键处覆盖字符串的一部分11STRLEN k
13、ey获取在键中的值的长度12MSET key value key value 为多个键分别设置它们的值13MSETNX key value key value 为多个键分别设置它们的值,仅当键不存在时14PSETEX key milliseconds value设置键的值和到期时间(以毫秒为)15INCR key将键的整数值增加 116INCRBY key increment将键的整数值按给定的数值增加redis 127.0.0.1:6379> SET mykey "redis" OKredis 127.0.0.1:6379> GET mykey"re
14、dis"Shell6.2 列表类型(List)Redis 列表是简单的字符串列表,按照顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (, 每个列表超过 40 亿个元素)。Redis 列表命令下表列出了列表相关的基本命令:序号命令及描述1BLPOP key1 key2 timeout移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。2BRPOP key1 key2 timeout移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。redis 1
15、27.0.0.1:6379> LPUSH runoobkey redis (integer) 1redis 127.0.0.1:6379> LPUSH runoobkey mongodb (integer) 2redis 127.0.0.1:6379> LPUSH runoobkey mysql (integer) 3redis 127.0.0.1:6379> LRANGE runoobkey 0 101) "mysql"2) "mongodb"3) "redis"编号命令描述说明17INCRBYFLOAT k
16、ey increment将键的浮点值按给定的数值增加18DECR key将键的整数值减 119DECRBY key decrement按给定数值减少键的整数值20APPEND key value将指定值附加到键3BRPOPLPUSH source destination timeout从列表出一个值,将弹出的元素到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等发现可弹出元素为止。4LINDEX key index通过索引获取列表中的元素5LINSERT key BEFORE|AFTER pivot value在列表的元素前或者后元素6LLEN key获取列表长度7LPOP key移
17、出并获取列表的第一个元素8LPUSH key value1 value2将一个或多个值到列表头部9LPUSHX key value将一个值到已存在的列表头部10LRANGE key start stop获取列表指定范围内的元素11LREM key count value移除列表元素12LSET key index value通过索引设置列表元素的值13LTRIM key start stop对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。6.3 Redis 集合(Set)Redis 的 Set 是 string 类型的无序集合。集员是唯一
18、的,这就意味着集合中不能出现重复的数据。Redis 中 集合是通过表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为232 - 1 (, 每个集合可40 多亿个成员)。实例在以上实例中我们通过 SADD 命令向名为 runoobkey 的集合的三个元素。redis 127.0.0.1:6379> SADD runoobkey redis (integer) 1redis 127.0.0.1:6379> SADD runoobkey mongodb (integer) 1redis 127.0.0.1:6379> SADD runoobkey mysql
19、 (integer) 1redis 127.0.0.1:6379> SADD runoobkey mysql (integer) 0redis 127.0.0.1:6379> SMEMBERS runoobkey1) "mysql"2) "mongodb"3) "redis"14RPOP key移除并获取列表最后一个元素15RPOPLPUSH source destination移除列表的最后一个元素,并将该元素添加到另一个列表并返回16RPUSH key value1 value2在列表中添加一个或多个值17RPUSHX
20、 key value为已存在的列表添加值Redis 集合命令下表列出了 Redis 集合基本命令:序号1命令及描述SADD key member1 member2向集合添加一个或多个成员2SCARD key获取集合的成员数3SDIFF key1 key2返回给定所有集合的差集4SDIFFSTORE destination key1 key2返回给定所有集合的差集并在 destination 中5SINTER key1 key2返回给定所有集合的交集6SINTERSTORE destination key1 key2返回给定所有集合的交集并在 destination 中7SISMEMBER ke
21、y membermember 元素是否是集合 key 的成员8SMEMBERS key返回集合中的所有成员9SMOVE source destination member将 member 元素从 source 集合移动到 destination 集合10SPOP key6.4 Redis 有序集合(sorted set)Redis 有序集合和集合一样也是 string 类型元素的集合,且不重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过表实现的,所以
22、添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数232 - 1 (为, 每个集合可40 多亿个成员)。实例redis 127.0.0.1:6379> ZADD runoobkey 1 redis(integer) 1redis 127.0.0.1:6379> ZADD runoobkey 2 mongodb(integer) 1redis 127.0.0.1:6379> ZADD runoobkey 3 mysql(integer) 1移除并返回集合中的一个随机元素11SRANDMEMBER key count返回集合中一个或多个随机数12SREM key mem
23、ber1 member2移除集合中一个或多个成员13SUNION key1 key2返回所有给定集合的并集14SUNIONSTORE destination key1 key2所有给定集合的并集在 destination 集合中15SSCAN key cursor MATCH pattern COUNT count迭代集合中的元素在以上实例中我们通过命令 ZADD 向 redis 的有序集合中添加了三个值并关联上分数。Redis 有序集合命令下表列出了 redis 有序集合的基本命令:序号命令及描述1ZADD key score1 member1 score2 member2向有序集合添加一个
24、或多个成员,或者更新已存在成员的分数2ZCARD key获取有序集合的成员数3ZCOUNT key min max计算在有序集合中指定区间分数的成员数4ZINCRBY key increment member有序集合中对指定成员的分数加上增量 increment5ZINTERSTORE destination numkeys key key .计算给定的一个或多个有序集的交集并将结果集在新的有序集合 key 中6ZLEXCOUNT key min max在有序集合中计算指定字典区间内成员数量redis 127.0.0.1:6379> ZADD runoobkey 3 mysql(inte
25、ger) 0redis 127.0.0.1:6379> ZADD runoobkey 4 mysql(integer) 0redis 127.0.0.1:6379> ZRANGE runoobkey 0 10 WITHSCORES1) "redis" 2) "1"3) "mongodb" 4) "2"5) "mysql" 6) "4"7ZRANGE key start stop WITHSCORES通过索引区间返回有序集指定区间内的成员8ZRANGEBYLEX k
26、ey min max LIMIT offset count通过字典区间返回有序集合的成员9ZRANGEBYSCORE key min max WITHSCORES LIMIT通过分数返回有序集合指定区间内的成员10ZRANK key member返回有序集合中指定成员的索引11ZREM key member member .移除有序集合中的一个或多个成员12ZREMRANGEBYLEX key min max移除有序集合中给定的字典区间的所有成员13ZREMRANGEBYRANK key start stop移除有序集合中给定的排名区间的所有成员14ZREMRANGEBYSCORE key m
27、in max移除有序集合中给定的分数区间的所有成员15ZREVRANGE key start stop WITHSCORES返回有序集中指定区间内的成员,通过索引,分数从高到底16ZREVRANGEBYSCORE key max min WITHSCORES返回有序集中指定分数区间内的成员,分数从高到低排序17ZREVRANK key member返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序18ZSCORE key member6.5 Redis(Hash)Redis hash 是一个 string 类型的 field 和 value 的表,hash 特别适合用于对象。
28、Redis 中每个 hash 可以232 - 1 键值对(40 多亿)。实例hset key mapHey MapValue在以上实例中,我们设置了 redis 的一些描述信息(name, description, likes, visitors)到表的 runoobkey 中。Redis hash 命令下表列出了 redis hash 基本的相关命令:序命令及描述号127.0.0.1:6379> HMSET runoobkey name "redis tutorial" description "redis basic commands for cachi
29、ng" likes 20 visitors 23000 OK127.0.0.1:6379> HGL runoobkey1) "name"2) "redis tutorial"3) "description"4) "redis basic commands for caching"5) "likes" 6) "20"7) "visitors" 8) "23000"返回有序集中,成员的分数值19ZUNIONSTORE des
30、tination numkeys key key .计算给定的一个或多个有序集的并集,并在新的 key 中20ZSCAN key cursor MATCH pattern COUNT count迭代有序集合中的元素(包括元素成员和元素分值)1HDEL key field2 field2删除一个或多个表字段2HEXISTS key field查看表 key 中,指定的字段是否存在。3HGET key field获取在表中指定字段的值。4HGL key获取在表中指定 key 的所有字段和值5HINCRBY key field increment为表 key 中的指定字段的整数值加上增量 incre
31、ment 。6HINCRBYFLOAT key field increment为表 key 中的指定字段的浮点数值加上增量 increment 。7HKEYS key获取所有表中的字段8HLEN key获取表中字段的数量9HMGET key field1 field2获取所有给定字段的值10HMSET key field1 value1 field2 value2 同时将多个 field-value (域-值)对设置到表 key 中。11HSET key field value将表 key 中的字段 field 的值设为 value 。12HSETNX key field value七、Red
32、is jedis7.1 引入 Maven 依赖7.2 Java 代码public class TestRedis private Jedis jedis;Beforepublic void setup() /连接redis服务器,192.168.0.100:6379 jedis = new Jedis("192.168.0.100", 6379);/权限认证jedis.auth("admin");/* redis字符串*/<!-><dependency><groupId>redis.clients</groupI
33、d><artifactId>jedis</artifactId><version>2.9.0</version></dependency>只有在字段 field 不存在时,设置表字段的值。13HVALS key获取表中所有值14HSCAN key cursor MATCH pattern COUNT count迭代表中的键值对。Testpublic void testString() /添加数据jedis.set("name","xinxin");/向key->name中放入了val
34、ue->xinxin System.out.println(jedis.get("name");/执行结果:xinxinjedis.append("name", " is my lover"); /拼接System.out.println(jedis.get("name");jedis.del("name"); /删除某个键System.out.println(jedis.get("name");/设置多个键值对jedis.mset("name",&
35、quot;liuling","age","23",""); jedis.incr("age"); /进行加1操作System.out.println(jedis.get("name") + "-" + jedis.get("age") + "-" + jedis.get(" ");/* redis操作Map*/ Testpublic void testMap() /添加数据Map<String, St
36、ring> map = new HashMap<String, String>(); map.put("name", "xinxin");map.put("age", "22"); map.put("");jedis.hmset("user",map);/取出user中的name,执行结果:minxr->注意结果是一个泛型的List/第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数
37、List<String> rsmap = jedis.hmget("user", "name", "age", " ");System.out.println(rsmap);/删除map中的某个键值jedis.hdel("user","age");System.out.println(jedis.hmget("user", "age"); /因为删除了,所以返回的是null System.out.println(jedis.
38、hlen("user"); /返回key为user的键中存放的值的个数2 System.out.println(jedis.exists("user");/是否存在key为user的返回true System.out.println(jedis.hkeys("user");/返回map对象中的所有key System.out.println(jedis.hvals("user");/返回map对象中的所有valueIterator<String> iter=jedis.hkeys("user&
39、quot;).iterator(); while (iter.hasNext()String key = iter.next(); System.out.println(key+":"+jedis.hmget("user",key);/* jedis操作List*/ Testpublic void testList()/开始前,先移除所有的内容jedis.del("java framework");System.out.println(jedis.lrange("java framework",0,-1);/先向k
40、ey java framework中存放三条数据jedis.lpush("java framework","spring"); jedis.lpush("java framework","struts"); jedis.lpush("java framework","hibernate");/再取出所有数据jedis.lrange是按范围取出,/ 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有System.out.print
41、ln(jedis.lrange("java framework",0,-1);jedis.del("java framework"); jedis.rpush("java framework","spring"); jedis.rpush("java framework","struts"); jedis.rpush("java framework","hibernate");System.out.println(jedis.lrang
42、e("java framework",0,-1);/* jedis操作Set*/ Testpublic void testSet()/添加jedis.sadd("user","liuling");jedis.sadd("user","xinxin");jedis.sadd("user","ling"); jedis.sadd("user","zhangxinxin"); jedis.sadd("user&q
43、uot;,"who");/移除nonamejedis.srem("user","who"); System.out.println(jedis.smembers("user");/获取所有加入的valueSystem.out.println(jedis.sismember("user", "who");/who 是否是user集合的元素System.out.println(jedis.srandmember("user");八、SpringBoot 集成
44、Redis8.1、引入 maven 依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.3.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId
45、><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency>System.out.println(jedis.scard("user");/返回集合的元素个数Testpublic void test() throws InterruptedException /jedis 排序/注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的) jedis.del("a");/先清除
46、数据,再加入数据进试jedis.rpush("a", "1");jedis.lpush("a","6");jedis.lpush("a","3");jedis.lpush("a","9"); System.out.println(jedis.lrange("a",0,-1);/ 9, 3, 6, 1System.out.println(jedis.sort("a"); /1, 3, 6, 9 /输
47、入排序后结果System.out.println(jedis.lrange("a",0,-1);Testpublic void testRedisPool() RedisUtil.getJedis().set("newname", "中文测试"); System.out.println(RedisUtil.getJedis().get("newname");8.2、新增配置文件信息8.3、Java 代码Servicepublic class RedisService Autowiredprivate StringR
48、edisTemplate stringRedisTemplate; public void setStr(String key, String value) setStr(key, value, null);public void setStr(String key, String value, Long time) stringRedisTemplate.opsForValue().set(key, value); if (time != null)stringRedisTemplate.expire(key, time, TimeUnit.SECONDS);public Object ge
49、tKey(String key) return stringRedisTemplate.opsForValue().get(key);#Redis (RedisConfiguration) #spring.redis.database=0 spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=123456 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.pool.max-active=8 spring.redi
50、s.pool.max-wait=-1spring.redis.timeout=5000<groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web&l
51、t;/artifactId></dependency></dependencies>九、Redis 主从克隆三台 linux 虚拟机public void delKey(String key) stringRedisTemplate.delete(key);9.1.1、克隆虚拟机9.1.2、生成新的 mack 地址9.1.3、主从配置redis 主从概述1、redis 的功能是支持多个数据库之间的数据同步。一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收
52、主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。2、通过 redis 的功能可以很好的实现数据库的读写分离,提高服务器的负载能数据库主要进行写操作,而从数据库负责读操作。主从过程主从过程:见下图过程:1:当一个从数据库启动时,会向主数据库2:主数据库接收到 sync 命令后会开始在sync 命令,保存快照(执行 rdb 操作),并将保存期间接收到令缓存起来3:当快照完成后,redis 会将快照文件和所有缓存令给从数据库。4:从数据库收到后,会载入快照文件并执行收到的缓存令。9.1.3.1 修改 redis.conf修改从 redis 中的 redis.
53、conf 文件slaveof 192.168.33.130 6379masterauth 123456- 主 redis 服务器配置了,则需要配置十、Redis 哨兵机制10.1 什么是哨兵机制Redis 的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:·(Monitoring): 哨兵(sentinel) 会不断地检查你的 Master 和 Slave 是否正常。·提醒(Notification):当被的某个 Redis 出现问题时, 哨兵(sentinel) 可通知。以通过 API 向管理员或者其他应用程序·自动故障迁
54、移(Automatic failover):当一个 Master 不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效 Master 的其中一个 Slave 升级为新的 Master, 并让失效 Master 的其他 Slave 改为新的 Master; 当客户端试图连接失效的 Master 时,集群也会向客户端返回新 Master 的地址,使得集群可以使用 Master代替失效 Master。哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于 Mas
55、ter 是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个 Slave 作为新的 Master.每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave 定时消息,以确认对方是否”活”着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对挂(所谓的”认为宕机” Subjective Down,简称 sdown).若“哨兵群”中的多数 sentinel,都报告某一 master 没响应,系统才认为该 master"彻底"(即:客观上的真正 down 机,Objective Down,简称 odown),通过一定的vote 算法,从剩下的 slave 节点中,选一台提升为 master,然后自动修改相关配置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年影视作品摄制合同协议书(含分成模式)
- 专业律师转租合同
- 2024年度智能物流系统设计与实施合同
- 2024施工合同司法解释
- 2024办公楼零星维修项目建设项目施工合同
- 农村合作信用社贷款合同
- 2024没有借条、合同的借贷关系案例
- 工程承包合同模板简化版
- 校园学生安全保障协议书样本
- 超值供货合同模板汇编
- 二年级排球教案
- 小数乘除法竖式计算专项练习题大全(每日一练共15份)
- 天津市和平区2024-2025学年九年级上学期期中考试英语试题
- 2024版抗菌药物DDD值速查表
- 2024二十届三中全会知识竞赛题库及答案
- 预防接种工作规范(2023年版)解读课件
- 医院检验外包服务项目招标文件
- 档案整理及数字化服务方案
- 正高级会计师答辩面试资料
- 道路桥涵工程施工方案(完整版)
- 60万吨MTO装置中交发言稿
评论
0/150
提交评论