文档库 最新最全的文档下载
当前位置:文档库 › Redis之数据类型

Redis之数据类型

Redis之数据类型
Redis之数据类型

Redis之数据类型

redis支持的各种数据类型包括string,list ,set ,sorted set 和hash .

1.keys

redis本质上一个key-value db,所以我们首先来看看他的key。首先key 也是字符串类型,但是key中不能包括边界字符。由于key不是binary safe的字符串,所以像"my key"和"mykey\n"这样包含空格和换行的key是不允许的。顺便说一下在redis内部并不限制使用binary字符,这是redis协议限制的。"\r\n"在协议格式中会作为特殊字符。

redis 1.2以后的协议中部分命令已经开始使用新的协议格式了(比如MSET)。总之目前还是把包含边界字符当成非法的key吧,免得被bug纠缠。另外关于key的一个格式约定介绍下,object-type:id:field。比如user:1000:password,blog:xxidxx:title,还有key的长度最好不要太长。道理很明显占内存啊,而且查找时候相对短key也更慢。不过也不推荐过短的key,比如u:1000:pwd,这样的。显然没上面的user:1000:password可读性好。

下面介绍下key相关的命令

exits key 测试指定key是否存在,返回1表示存在,0不存在

del key1 key2 ....keyN 删除给定key,返回删除key的数目,0表示给定key都不存在

type key 返回给定key的value类型。返回none 表示不存在key,string 字符类型,list 链表类型set 无序集合类型...

keys pattern 返回匹配指定模式的所有key

randomkey 返回从当前数据库中随机选择的一个key,如果当前数据库是空的,返回空串

rename oldkey newkey 原子的重命名一个key,如果newkey存在,将会被覆盖,返回1表示成功,0失败。可能是oldkey不存在或者和newkey相同renamenx oldkey newkey 同上,但是如果newkey存在返回失败

dbsize 返回当前数据库的key数量

expire key seconds 为key指定过期时间,单位是秒。返回1成功,0表示key已经设置过过期时间或者不存在ttl key 返回设置过过期时间的key的剩余过期秒数-1表示key不存在或者没有设置过过期时间select db-index 通过索引选择数据库,默认连接的数据库所有是0,默认数据库数是16个。返回1表示成功,0失败move key db-index 将key从当前数据库移动到指定数据库。返回1成功。0 如果key不存在,或者已经在指定数据库中flushdb 删除当前数据库中所有key,此方法不会失败。慎用flushall 删除所有数据库中的所有key,此方法不会失败。更加慎用

2.string类型

string是redis最基本的类型,而且string类型是二进制安全的。意思是redis 的string可以包含任何数据。比如jpg图片或者序列化的对象。从内部实现来看其实string可以看作byte数组,最大上限是1G字节。下面是string类型的定义。struct sdshdr { long len; long free; char buf[]; }; buf是个char数组用于存贮实际的字符串内容。其实char和c#中的byte是等价的,都是一个字节len是buf数组的长度,free是数组中剩余可用字节数。由此可以理解为什么string类型是二进制安全的了。因为它本质上就是个byte数组。当然可以包含

任何数据了。另外string类型可以被部分命令按int处理.比如incr等命令,下面详细介绍。还有redis的其他类型像list,set,sorted set ,hash它们包含的元素与都只能是string类型。如果只用string类型,redis就可以被看作加上持久化特性的memcached.当然redis对string类型的操作比memcached多很多啊。如下:set key value 设置key对应的值为string类型的value,返回1表示成功,0失败setnx key value 同上,如果key已经存在,返回0 。nx 是not exist的意思get key 获取key对应的string值,如果key不存在返回nil getset key value 原子的设置key的值,并返回key的旧值。如果key不存在返回nil mget key1 key2 ... keyN 一次获取多个key的值,如果对应key不存在,则对应返回nil。下面是个实验,首先清空当前数据库,然后设置k1,k2.获取时k3对应返回nil.Hello Redis MP@139 5

mset key1 value1 ... keyN valueN 一次设置多个key的值,成功返回1表示所有的值都设置了,失败返回0表示没有任何值被设置msetnx key1 value1 ... keyN valueN 同上,但是不会覆盖已经存在的key incr key 对key的值做加加操作,并返回新的值。注意incr一个不是int的value会返回错误,incr一个不存在的key,则设置key为1 decr key 同上,但是做的是减减操作,decr一个不存在key,则设置key为-1 incrby key integer 同incr,加指定值,key不存在时候会设置key,并认为原来的value是0 decrby key integer 同decr,减指定值。decrby完全是为了可读性,我们完全可以通过incrby一个负值来实现同样效果,反之一样。append key value 给指定key的字符串值追加value,返回新字符串值的长度。

redis> flushdb OK redis> dbsize (integer) 0 redis> set k1 a OK redis> set

k2 b OK redis> mget k1 k2 k3 1. "a" 2. "b" 3. (nil)

substr key start end 返回截取过的key的字符串值,注意并不修改key的值,下标是从0开始的。

下面给个例子

redis> set k hello OK redis> append k ,world (integer) 11 redis> get k "hello,world" redis> substr k 0 8 "hello,wor" redis> get k "hello,world" 3.list类型

redis的list类型其实就是一个每个子元素都是string类型的双向链表。所以[lr]push和[lr]pop命令的算法时间复杂度都是O(1)。另外list会记录链表的长度。所以llen操作也是O(1).链表的最大长度是(2的32次方-1)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得listHello Redis MP@139 6

既可以用作栈,也可以用作队列。有意思的是list的pop操作还有阻塞版本的。当我们[lr]pop一个list对象是,如果list是空,或者不存在,会立即返回nil。但是阻塞版本的b[lr]pop可以则可以阻塞,当然可以加超时时间,超时后也会返回nil。

为什么要阻塞版本的pop呢,主要是为了避免轮询。举个简单的例子如果我们用list来实现一个工作队列。执行任务的thread可以调用阻塞版本的pop去获取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,也可以避免轮询带来的延迟。ok下面介绍list相关命令lpush key string 在key对应list的头部添加字符串元素,返回1表示成功,0表示key 存在且不是list类型rpush key string 同上,在尾部添加llen key 返回key对

应list的长度,key不存在返回0,如果key对应类型不是list返回错误lrange key start end 返回指定区间内的元素,下标从0开始,负值表示从后面计算,-1表示倒数第一个元素,key不存在返回空列表ltrim key start end 截取list,保留指定区间内元素,成功返回1,key不存在返回错误lset key index value 设置list中指定下标的元素值,成功返回1,key或者下标不存在返回错误lrem key count value 从key对应list中删除count个和value相同的元素。count为0时候删除全部lpop key 从list的头部删除元素,并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对应值不是list返回错误rpop 同上,但是从尾部删除blpop key1...keyN timeout 从左到右扫描返回对第一个非空list进行lpop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在,list2,list3都是非空则对list2做lpop并返回从list2中删除的元素。如果所有的list都是空或不存在,则会阻塞timeout秒,timeout为0表示一直阻塞。当阻塞时,如果有client对key1...keyN中的任意key进行push操作,则第一在这个key上被阻塞的client会立即返回。如果超时发生,则返回nil。有点像unix 的select或者poll。

brpop 同blpop,一个是从头部删除一个是从尾部删除。rpoplpush srckey destkey 从srckey对应list的尾部移除元素并添加到destkey对应list的头部,最后返回被移除的元素值,整个操作是原子的.如果srckey是空或者不存在返回nil。

4.set类型

redis 的set是string类型的无序集合。set元素最大可以包含(2的32次方-1)个元素。set的是通过hash table实现的,所以添加,删除,查找的复杂度都是

O(1)。hash table会随着添加或者删除自动的调整大小。需要注意的是调整hash table大小时候需要同步(获取写锁)会阻塞其他读写操作。可能不久后就会改用跳表(skip list)来实现,跳表已经在sorted set中使用了。

关于set集合类型除了基本的添加删除操作,其他有用的操作还包含集合的取并集(union),交集(intersection),差集(difference)。通过这些操作可以很容易的实现sns中的好友推荐和blog的tag功能。

下面详细介绍set相关命令sadd key member 添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经在集合中返回0,key对应的set不存在返回错误srem key member 从key对应set中移除给定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set 类型的值返回错误spop key 删除并返回key对应set中随机的一个元素,如果set是空或者key不存在返回nil srandmember key 同spop,随机取set中的一个元素,但是不删除元素smove srckey dstkey member 从srckey对应set 中移除member并添加到dstkey对应set中,整个操Hello Redis MP@139 7 作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key 不是set类型返回错误scard key 返回set的元素个数,如果set是空或者key 不存在返回0 sismember key member 判断member是否在set中,存在返回1,0表示不存在或者key不存在sinter key1 key2...keyN 返回所有给定key 的交集sinterstore dstkey key1...keyN 同sinter,但是会同时将交集存到dstkey下sunion key1 key2...keyN 返回所有给定key的并集sunionstore dstkey key1...keyN 同sunion,并同时保存并集到dstkey下sdiff key1 key2...keyN 返回所有给定key的差集sdiffstore dstkey key1...keyN 同sdiff,

并同时保存差集到dstkey下smembers key 返回key对应set的所有元素,结果是无序的

5.sorted set类型

和set一样,sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。sorted set的实现是skip list和hash table 的混合体。当元素被添加到集合中时,一个元素到score的映射被添加到hash table中,所以给定一个元素获取score的开销是O(1),另一个score到元素的映射被添加到skip list并按照score排序,所以就可以有序的获取集合中的元素。添加,删除操作开销都是O(log(N))和skip list的开销一致,redis的skip list 实现用的是双向链表,这样就可以逆序从尾部取元素。sorted set最经常的使用方式应该是作为索引来使用。我们可以把要排序的字段作为score存储,对象的id当元素存储。

下面是sorted set相关命令: zadd key score member 添加元素到集合,元素在集合中存在则更新对应score zrem key member 删除指定元素,1表示成功,如果元素不存在返回0 zincrby key incr member 增加对应member的score 值,然后移动元素并保持skip list保持有序。返回更新后的score值zrank key member 返回指定元素在集合中的排名(下标),集合中元素是按score从小到大排序的zrevrank key member 同上,但是集合中元素是按score从大到小排序zrange key start end 类似lrange操作从集合中去指定区间的元素。返回的是有序结果zrevrange key start end 同上,返回结果是按score逆序的zrangebyscore key min max 返回集合中score在给定区间的元素zcount key min max 返回集合中score在给定区间的数量zcard key 返回集合中元素

个数zscore key element 返回给定元素对应的score zremrangebyrank key min max 删除集合中排名在给定区间的元素zremrangebyscore key min max 删除集合中score在给定区间的元素

6.hash类型

redis hash是一个string类型的field和value的映射表。它的添加,删除操作都是O(1)(平均).hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新建一个hash对象时开始是用zipmap(又称为small hash)来存储的。这个zipmap其实并不是hash table,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销。尽管zipmap的添加,删除,查找都是O(n),但是由于一般对象的field数量都不太多。所以使用zipmap也是很快的,也就是说添加删除平均还是O(1)。如果field或者value的大小超出一定限制后,redis会在内部自动将zipmap替换成正常的hash实现. 这个限制可以在配置文件中指定。Hello Redis MP@139 8

hash-max-zipmap-entries 64 #配置字段最多64个hash-max-zipmap-value 512 #配置value最大为512字节下面介绍hash相关命令hset key field value 设置hash field为指定值,如果key不存在,则先创建hget key field 获取指定的hash field hmget key filed1....fieldN 获取全部指定的hash filed hmset key filed1 value1 ... filedN valueN 同时设置hash的多个field hincrby key field integer 将指定的hash filed 加上给定值hexists key field 测试指定field是否存在hdel key field 删除指定的hash

field hlen key 返回指定hash的field数量hkeys key 返回hash的所有field hvals key 返回hash的所有value hgetall key 返回hash的所有filed和value 3) redis

Redis集群研究

Redis Sentinel数据库M-S配置(Redis的分片与复制集技术) 1.Redis Sentinel介绍 Redis Sentinel是Redis官方提供的集群管理工具,主要有三大功能: 监控,能持续监控Redis的主从实例是否正常工作; 通知,当被监控的Redis实例出问题时,能通过API通知系统管理员或其他程序;自动故障恢复,如果主实例无法正常工作,Sentinel将启动故障恢复机制把一个从实例提升为主实例,其他的从实例将会被重新配置到新的主实例,且应用程序会得到一个更换新地址的通知。 Redis Sentinel是一个分布式系统,可以部署多个Sentinel实例来监控同一组Redis实例,它们通过Gossip协议来确定一个主实例宕机,通过 Agreement协议来执行故障恢复和配置变更,一般在生产环境中部署多个实例来提高系统可用性,只要有一个Sentinel实例运行正常,就能保证被监控的Redis实例运行正常(类似Zookeeper,通过多个Zookeeper来提高系统可用性); 2.Redis HA方案 HA的关键在于避免单点故障及故障恢复,在Redis Cluster未发布之前,Redis 一般以主/从方式部署(这里讨论的应用从实例主要用于备份,主实例提供读写,有不少应用是读写分离的,读写操作需要取不同的Redis实例,该方案也可用于此种应用,原理都是相通的,区别在于数据操作层如何封装),该方式要实现HA主要有如下几种方案: 1).keepalived:通过keepalived的虚拟IP,提供主从的统一访问,在主出现问题时,通过keepalived运行脚本将从提升为主,待主恢复后先同步后自动变为主,该方案的好处是主从切换后,应用程序不需要知道(因为访问的虚拟IP 不变),坏处是引入keepalived增加部署复杂性; 2).zookeeper:通过zookeeper来监控主从实例,维护最新有效的IP,应用通过zookeeper取得IP,对Redis进行访问; 3).sentinel:通过Sentinel监控主从实例,自动进行故障恢复,该方案有个缺陷:因为主从实例地址(IP&PORT)是不同的,当故障发生进行主从切换后,应用程序无法知道新地址,故在Jedis2.2.2中新增了对Sentinel的支持,应用通过 redis.clients.jedis.JedisSentinelPool.getResource()取得的Jedis 实例会及时更新到新的主实例地址。 笔者所在的公司先使用了方案1一段时间后,发现keepalived在有些情况下会导致数据丢失,keepalived通过shell脚本进行主从切换,配置复杂,而且keepalived成为新的单点,后来选用了方案3,使用Redis官方解决方案;(方

Redis面试专题及答案

redis和memcached什么区别?为什么高并发下有时单线程的redis比多线程的memcached效率要高? 区别: 1.mc可缓存图片和视频。rd支持除k/v更多的数据结构; 2.rd可以使用虚拟内存,rd可持久化和aof灾难恢复,rd通过主从支持数据备份; 3.rd可以做消息队列。 原因:mc多线程模型引入了缓存一致性和锁,加锁带来了性能损耗。 redis主从复制如何实现的?redis的集群模式如何实现?redis的key是如何寻址的? 主从复制实现:主节点将自己内存中的数据做一份快照,将快照发给从节点,从节点将数据恢复到内存中。之后再每次增加新数据的时候,主节点以类似于mysql的二进制日志方式将语句发送给从节点,从节点拿到主节点发送过来的语句进行重放。 分片方式: -客户端分片 -基于代理的分片 ●Twemproxy ●codis -路由查询分片 ●Redis-cluster(本身提供了自动将数据分散到Redis Cluster不同节点的能力,整个数据集合的某个数据子集存储在哪个节点对于用户来说是透明的) redis-cluster分片原理:Cluster中有一个16384长度的槽(虚拟槽),编号分别为0-16383。每个Master节点都会负责一部分的槽,当有某个key被映射到某个Master负责的槽,那么这个Master负责为这个key提供服务,至于哪个Master节点负责哪个槽,可以由用户指定,也可以在初始化的时候自动生成,只有Master才拥有槽的所有权。Master节点维护着一个16384/8字节的位序列,Master节点用bit来标识对于某个槽自己是否拥有。比如对于编号为1的槽,Master只要判断序列的第二位(索引从0开始)是不是为1即可。这种结构很容易添加或者删除节点。比如如果我想新添加个节点D, 我需要从节点A、B、C中得部分槽到D上。 使用redis如何设计分布式锁?说一下实现思路?使用zk可以吗?如何实现?这两种有什么区别? redis: 1.线程A setnx(上锁的对象,超时时的时间戳t1),如果返回true,获得锁。 2.线程B 用get获取t1,与当前时间戳比较,判断是是否超时,没超时false,若超时执行第3步; 3.计算新的超时时间t2,使用getset命令返回t3(该值可能其他线程已经修改过),如果 t1==t3,获得锁,如果t1!=t3说明锁被其他线程获取了。 4.获取锁后,处理完业务逻辑,再去判断锁是否超时,如果没超时删除锁,如果已超时,不用处理(防止删除其他线程的锁)。 zk: 1.客户端对某个方法加锁时,在zk上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点node1; 2.客户端获取该路径下所有已经创建的子节点,如果发现自己创建的node1的序号是最小的,就认为这个客户端获得了锁。 3.如果发现node1不是最小的,则监听比自己创建节点序号小的最大的节点,进入等待。

Redis的5个常见使用场景

Redis的5个常见使用场景概括 大家平时在使用Redis的时候有没有总结过Redis常用于哪些场景呢。下面科多老师带着大家一起来总结一下,希望能够帮助到各位同学。 1、会话缓存(Session Cache) 最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis 缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗? 幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis 来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。 2、全页缓存(FPC) 除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性 问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。 再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。 此外,对WordPress的用户来说,Pantheon有一个非常好的插件wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。 3、队列 Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis 能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。 如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这 里去查看。 4、排行榜/计数器 Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set) 和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可: 当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行: ZRANGE user_scores 0 10 WITHSCORES

B. VisiSet 入门手册

VisiSet中文操作手册_V1.0 Matrix 2000 目录 一、调试工具及界面介绍............................................................................................................. - 2 - 1、打开调试软件V ISI S ET (2) 2、连接V ISI S ET与读码器 (2) 3、调试读码器 (3) 四、参数调试 ............................................................................................................................... - 6 -附录1. 读码器固件升级方法

一、调试工具及界面介绍 1、打开调试软件VisiSet 正确安装读码器后,打开VisiSet软件。有两种方法: <1> 点击桌面上的快捷方式,如下图: <2> 从开始菜单启动,点击开始->程序->Datalogic->VisiSet->VisiSet.exe。 2、连接VisiSet与读码器 打开VisiSet后,程序窗口如下图所示: 点击工具栏中的Options按钮,会出现下面的窗口: 此窗口用来设置读码器与电脑通讯所用的串口的设置。例如,选择使用哪一个串口,波特率是多少,是否有奇偶校验等。把这些设置与电脑串口的设置改为一样。然后点击Save

关闭此窗口。出厂时的设定为:115200-8-N-1 如下图,点击Connect : 大约2秒钟,VisiSet 与读码器连接成功,连上后的状态如下图: 左边的一列按钮为调试工具,用于调试读码器;右边为数据显示窗口,可以显示读到的条码的内容。 3、 调试读码器 VisiSet 与读码器成功连接后,我们就可以对读码器进行调试。 测试工具 数据显示窗口

memcached&redis性能测试

一、Memcached 1.1、memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web 应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。 Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal . com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。 1.2、Memcached是如何工作的 Memcached的神奇来自两阶段哈希(two-stage hash)。Memcached就像一个巨大的、存储了很多对的哈希表。通过key,可以存储或查询任意的数据。客户端可以把数据存储在多台memcached上。当查询数据时,客户端首先参考节点列表计算出key的哈希值(阶段一哈希),进而选中一个节点;客户端将请求发送给选中的节点,然后memcached节点通过一个内部的哈希算法(阶段二哈希),查找真正的数据(item)。举个列子,假设有3个客户端1, 2, 3,3台memcached A, B, C:Client 1想把数 据”tuletech”以key “foo”存储。Client 1首先参考节点列表(A, B, C),计算key “foo”的哈希值,假设memcached B被选中。接着,Client 1直接connect 到memcached B,通过key “foo”把数据”tuletech”存储进去。Client 2使用与Client 1相同的客户端库(意味着阶段一的哈希算法相同),也拥有同样的

memcache、redis、tair性能对比测试报告材料

memcache、redis、tair性能对比测试报告 第1章限制条件 前一周所做的分布缓存技术预言中有包括ehcache、memcache、redis、tair,还包括了基于MongoDB的分布式技术。测试中,考虑到各自功能的差异化特点,其中选择了memcache、redis、tair功能特性相近的缓存服务器进行性能对比,所以ehcache、MongoDB将不做为本次测试的规范,其原因如下: 1)Ehcache是组件级别的缓存,要搭建一个独立的缓存服务器,需要用到ehcache server 模块,这是个war包,能运行在web 容器中,决定整个缓存服务器性能的好坏因素太多,比如web服务器,集群方式等。跟memcache、redis、tair没有对比性。 2)MongoDB是面向文档的数据库,跟缓存没有可比性。 第2章测试场景概述 性能测试包括单机环境和分布式环境,主要针对memcache、redis、tair各缓存服务器在缓存了不同级别的数据下,多个线程并发操作向缓存set/get缓存数据,考虑到网络方面的负载,又将每次set/get操作的缓存数据的大小分为三个不同的级别:1KB,10KB,100KB,通过对上述的条件进行排列,取得以下的测试场景。 第3章单机环境测试 3.1.测试场景: 1.当各缓存的数据库空时,以单线程通过各缓存客户端set调用向服务端推送数据,比较 10000操作所消耗的时间,以上动作通过使用不同大小的单个缓存对象重复三次。2.在场景一完成的情况下,以单线程通过各缓存客户端get调用向服务端获取数据,比较 10000操作所消耗的时间,以上动作通过使用不同大小的单个缓存对象重复三次。3.并发200个线程通过缓存软件的客户set调用向服务端推送数据,每个线程完成10000 次的操作,比较服务器的tps大小,以上动作通过使用不同大小的单个缓存对象重复三

redis twemproxy集群安装手册

一、概述 1、Redis集群安装有两种方式,第一种为编译源码安装,第二种为二进制安 装,具体选择哪一种方式根据实际情况决定。 2、本文档所使用版本如下: redis:redis-3.0.0-rc5 Twemproxy:nutcracker-0.4.0 autoconfig:2.69 3、常用Linux命令不清楚可以查看相关网站 4、本文档所述redis集群架构如下: 5、本文档使用120和121搭建redis集群,每台机器各启动两个redis实例 和一个twemproxy实例。Redis端口分别为6379 6380 6、采用源码编译方式安装需服务器具有访问外网权限,二进制安装不需求。 7、所有安装包均已上传至文件服务器 二、源码编译方式安装 1、安装automake 执行:yum install automake,出现如下输入Y完成安装:

2、libtool安装 执行:yum install libtool 出现如下输入yes完成安装 3、autoconfig安装 ①上传autoconf-2.69.tar.gz至/usr/local/src目录下 ②执行tar -xzvf autoconf-2.69.tar.gz ③cd autoconf-2.69 ④执行./configure ⑤执行make ⑥执行make install 至此,autoconfig安装完毕 4、redis安装 ①上传redis-3.0.0-rc5.zip至/usr/local/src目录下 ②执行unzip redis-3.0.0-rc5.zip ③执行cd redis-3.0.0-rc5 ④执行make&&make install ⑤执行mkdir /usr/local/redis ⑥执行cp src/redis-server src/redis-cli /usr/local/redis ⑦执行cd /usr/local/redis ⑧执行chmod 777 redis-server redis-cli ⑨执行./redis-server --port 6379 --save "" & 出现如下 ⑩执行./redis-cli -p 6379出现如下

我终于深入参与了一个分布式系统了,好多想法不一样了!

我终于深入参与了一个分布式系统了,好多想法不一样了! 原文出处:Turbo Zhang 的博客前言 过去两个月深入的参与了一个分布式系统的开发,记得之前有人说过“想成为架构师之前,都是从微观架构开始的”。尽 管我从没想过将来的某一天要成为一个架构师,或者领域专家,我只是想萌萌哒的编码,写着自己喜欢的Code,和一 群志同道合的朋友做出大家喜欢的商品和产品。但是工作久了慢慢的搭架子的事情还是会来到你的面前,因为时间总会把一部分人慢慢推向海边,使得他们成为最早见到阳光的人。不扯淡了,为什么要说阳光呢,还是因为过去的两(三)个月可能过的太充实也太痛苦了,完成之后,曙光来临的时候整个人是会发光的哦。“深度”参与是因为我终于有机会在搭 架子的过程中有了话语权和选择权,同时也会承担70%以上的编码工作。 之前我的自我认知是我可能在软件方面的积累还可以,比如设计模式,架构分层,程序解耦,API入手等方面,但是总觉得我在硬件网络方面积累的太少,太薄了。 比如: 不同操纵系统之间的特点;

网络端口管理与分发; 哪些网络协议可以帮助我们更好的完成工作,监控虚拟机的时候是在虚机上加代理好还是用协议去控制; 硬件是否支持分布式,在扩展过程中对于.net C#的兼容怎么样; 什么时候使用多线程,在把线程交给程序调度的时候我们怎么控制和捕捉线程的异常; 日志系统对于整个分散的系统是多么的重要; 何时使用关系数据库,什么时候使用Nosql; 消息队列用擅长的MSMQ还是RabbitMQ. 怎样有效的和其他部门的同事沟通; 用什么样的方式去有效调度不同语言开发的系统; 测试用例对于大系统从零散到完整是多么的重要; 系统标准,代码原则对于后期的维护余扩展是多么的重要;等; 项目简介 首先项目详细内容不便多说,简答的说,就是为国内某大型厂商建立一套协调其自身搭建的私有云以及其购买的公有 云的一套系统。说牛X一点就是:一套混合云系统。 使用Restful

redis系列三-springboot如何使用redis做缓存及缓存注解的用法总结

redis系列三-springboot如何使用redis做缓存及缓存注解的 用法总结 1. 概述 本文介绍spring boot 如何使用Redis做缓存,如何对redis 缓存进行定制化配置(如key的有效期)以及spring boot 如何初始化redis做缓存。使用具体的代码介绍了@Cacheable,@CacheEvict,@CachePut,@CacheConfig等注解及其属性的用法。 2. spring boot集成redis 2.1. application.properties 配置application.properties,包含如下信息: 指定缓存的类型 配置redis的服务器信息 请不要配置spring.cache.cache-names值,原因后面再说 ## 缓存 # spring.cache.cache-names=book1,book2 spring.cache.type=REDIS # REDIS (RedisProperties)

spring.redis.database=0 spring.redis.host=192.168.188.7 spring.redis.password= spring.redis.port=6379 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.pool.max-active=100 spring.redis.pool.max-wait=-1123456789101112131234567891 0111213 2.2. 配置启动类 @EnableCaching: 启动缓存 重新配置RedisCacheManager,使用新的配置的值 @SpringBootApplication @EnableCaching // 启动缓存 public class CacheApplication { private static final Logger log = LoggerFactory.getLogger(CacheApplication.class); public static void main(String[] args) { https://www.wendangku.net/doc/e45923596.html,("Start CacheApplication.. ");

Ehcache-Redis-Tair缓存性能对比

Ehcache/Redis/Tair缓存性能对比 后面介绍的不同方式都有测试数据,这些测试数据都是在同一的测试环境下得出的测试结果: 测试机器的配置如下: 64位5核CPU, E5620 @ 2.40GHz,内存8G CDN端缓存 由于计数器的价值并不在,具体的值是多少,尤其是对一些大访问量的商品来说个位或者十位的数据并没有什么意义,所以对这些热门商品的计数器访问可以采用定时更新的办法,可以将计数器的值直接缓存在CDN上或者后端Nginx的缓存中,定时再到数据库服务器上获取最新的计数器的值,这样能够大量减少对后端服务器的访问请求,而且计数器的数据量很小对缓存服务器的空间需求也不大。 改进的结构图如下: 直接在Nginx中利用Cache策略缓存住热门计数器的值,利用http协议的cache+max age来失效缓存的方式更新计数器的值。

优点: 实现方式简单,改动小,能够挡住热门商品的计数器访问请求,采用这种方式对查询请求来说,能达到类似于静态服务器的性能,如Nginx能达到2w的QPS 缺点:没有解决同一商品的计数器合并请求的问题,数据量会增大一倍对更新请求没有办法缓存,只能减少查询请求的压力 基于Java的存储方式 由于目前采用Nginx模块的方法开发,每次修改要重新编译Nginx服务器,所以想采用基于Java的方式,使得维护要容易一些。 选用Ehcache作为数据存储服务器,Ehcache也是基于内存存储,支持定时持久化功能,非常适合存储像计数器这种小数据类型。处理Http请求使用Tomcat容器,结构图如下: 处理逻辑采用一个servlet实现,并且在这个servlet中通过一致性Hash从Ehcache中获取计数器值。 在实际的部署结构中,可以将Tomcat和Ehcache部署在同一台机器上。 基于这种模式的测试结果如下:

Redis备份容灾及高可用方案

Redis 备份、容灾及高可用方案

一,Redis简单介绍 Redis是一个高性能的key-value非关系型数据库,由于其具有高性能的特性,支持高可用、持久化、多种数据结构、集群等,使其脱颖而出,成为常用的非关系型数据库。 此外,Redis的使用场景也比较多。 我们常通过Reids的队列功能做购买限制。比如到节假日或者推广期间,进行一些活动,对用户购买行为进行限制,限制今天只能购买几次商品或者一段时间内只能购买一次。也比较适合适用。 4.排名 Redis在内存中对数字进行递增或递减的操作实现得非常好。所以我们在很多排名的场景中会应用Redis来进行,比如小说网站对小说进行排名,根据排名,将排名靠前的小说推荐给用户。

5.发布/订阅 Redis提供发布和订阅功能,发布和订阅的场景很多,比如我们可以基于发布和订阅的脚本触发器,实现用Redis的发布和订阅功能建立起来的聊天系统。 此外还有很多其它场景,Redis都表现的不错。 二,Redis使用中单点故障问题 正是由于Redis具备多种优良特新,且应用场景非常丰富,以至于Redis在各个公司都有它存在的身影。那么随之而来的问题和风险也就来了。Redis虽然应用场景丰富,但部分公司在实践Redis应用的时候还是相对保守使用单节点部署,那为日后的维护带来了安全风险。 在2015年的时候,曾处理过一个因为单点故障原因导致的业务中断问题。当时的Redis都未采用分布式部署,采用单实例部署,并未考虑容灾方面的问题。 当时我们通过Redis服务器做用户购买优惠商品的行为控制,但后来由于未知原因Redis节点的服务器宕机了,导致我们无法对用户购买行为进行控制,造成了用户能够在一段时间内多次购买优惠商品的行为。 这种宕机事故可以说已经对公司造成了不可挽回的损失了,安全风险问题非常严重,作为当时运维这个系统的我来说有必要对这个问题进行修复和在架构上的改进。于是我开始了解决非分布式应用下Redis单点故障方面的研究学习。

软件开发应知应会-84分

研究数据结构就是研究() A.数据的逻辑结构 B.数据的存储结构 C.数据的逻辑结构和存储结构 D.数据的逻辑结构、存储结构及其运算结构 栈和队列的共同特点是()。 A.都是先进先出 B.都是先进后出 C.只允许在端点处插入和删除 D.没有共同点 关键路径是事件结点网络中()。 A.从源点到汇点的最长路径 B.从源点到汇点的最短路径 C.最长的回路 D.最短的回路 以下是线性表的数据结构是()。 A.数组 B.单链表 C.双链表 D.循环链表 以下()是常用的哈希函数构造方法。 A.直接寻址法 B.除留余数法 C.随机数法 D.平方取中法 不属于Swift属性的是() A.存储属性 B.计算属性 C.类型属性 D.以上都不是 CSS3的优点是() A.减少开发成本

B.减少维护成本 C.提高页面性能 D.以上都是 Objective-C最大的特色是承自Smalltalk的(),此机制与今日C++式之主流风格差异甚大。 A.消息传递模型(message passing) B.阅读者模式模型 C.单例模式模型 D.广播模型 CSS的定位常用属性有以下几个值() A.static B.relative C.fixed D.absolute 以下哪些是语义化标签? A.div B.span C.article D.header 在shell中,使用一个定义过的变量,引用时在变量名前加()。 A.$ B.& C.* D.@ SQL中删除数据库的关键字是()。 A.select B.insert C.delete D.drop SQL语句中删除一个表中记录,使用的关键字是()。 A.select B.insert C.delete

SSDB入门基础

SSDB ?入?门基础 ?文档信息!2 SSDB 简介!3 PHP 使?用?示例!3 SSDB 数据类型!3 KV!3 Hashmap!3 Zset!4安装和运?行!4使?用 SSDB 命令?行客户端(ssdb-cli)!6运?行 ssdb-cli!6进?行 KV 操作!6进?行 hashmap 操作!6进?行 zset 操作!7 SSDB 应?用程序开发!7?示例 1: 在线书店!8保存书籍信息!8建?立排序索引!8分?页浏览!8相关链接!8

?文档信息 作者: ideawu ??网站: https://www.wendangku.net/doc/e45923596.html,/?日期: 2013-09-29 更新: 2013-10-13

SSDB 简介 SSDB 是?一个 C++ 语?言开发的?高性能开源 NoSQL 数据库服务器, ?支持 Key-value, Key-hashmap, Key-zset(sorted set) 等数据结构, ?十分适合存储数亿条级别的列表, 排序表等集合数据, 是 Redis 的替代和增强?方案. SSDB 具有和 Redis 相似的 API, ?支持的客户端包括: PHP, C++, Python, Java, Lua, Ruby, Nodejs, etc. 项??目主?页: https://https://www.wendangku.net/doc/e45923596.html,/ideawu/ssdb PHP 使?用?示例 set('key', '123'); $resp = $ssdb->get('key'); echo $resp; // output: 123 SSDB 数据类型 SSDB ?支持三种数据类型, 别分是 KV(key-value), Hashmap(map), Zset(sorted set). 三种数据类型处于不同的命名区间, 所以不同类型的数据可以起相同的名字, 但不建议这么做. KV KV 数据类型?支持基本的 set(), get(), del(), incr() ?几种操作. KV 数据类型主要?用于存储离散的, 之间没有关系(或者关系被忽略)的?大数据, 如图?片?文件, ?大段?文本等. ?一般 KV 类型都可以被 Hashmap 替代, 但 KV 会?比 Hashmap 性能?高?一些. key value k1vc k2vx k3vy Hashmap Hashmap 类型和 KV 功能相似, 可?用于存储?大体积的数据, 但不同的数据项在业务上处于某个集合. 并且, Hashmap 维护了?一个集合?大?小的计数. Hashmap 中的数据项是 Key-value 的键值对, 并且按 Key 的字节数组顺序进?行排序.

Windows下Redis集群搭建

Windows下搭建Redis集群 Redis 集群简介 Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。 Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。 Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。 集群搭建 要让集群正常运作至少需要三个主节点,不过在刚开始试用集群功能时,强烈建议使用六个节点:其中三个为主节点,而其余三个则是各个主节点的从节点。 主节点崩溃,从节点的Redis就会提升为主节点,代替原来的主节点工作,崩溃的主Redis回复工作后,会成为从节点 1). 创建Redis集群目录 在redis安装的根目录下通过命令行创建6个以端口命名的文件夹 mkdir 7000 7001 7002 7003 7004 7005

将安装的redis文件夹中的redis.windows.conf以及redis-server,分别拷贝到新建的六个文件夹中 2). 更改配置 将六个文件夹下的redis.windows.conf文件中以下属性进行修改: port 7001(对应文件夹的端口号) cluster-enabled yes(开启实例的集群模式)去掉注释

金蝶云星空K3 Cloud V7.2 分布式缓存使用说明书

金蝶云星空 分布式缓存使用说明书 修改记录 Ver. No 发版日期编制人批准人修改的章节号V1.02017/12/08 刘兵赖碧云初始版本 V1.22018/01/03 刘兵赖碧云 6.1.2 V1.3 2018/02/24 刘兵赖碧云 6.1

目录 1.概述 (3) 1.1.目的 (3) 1.2.范围 (3) 1.3.适用对象 (3) 1.4.参考资料 (3) 2.问题与解决策略 (3) 3.目标和约束 (3) 4.部署Redis服务 (4) 4.1.安装服务--service-install(安装必须的步骤) (4) 4.2.卸载服务--service-uninstall (4) 4.3.启动服务--service-start(安装必须的步骤) (4) 4.4.停止服务--service-stop (5) 4.5.服务配置修改(服务名和端口) (5) 4.6.Redis-cli配置(如果4.1按照2,3小点进行了修改,此节配置可以忽略) (5) 5.Redis配置文件修改 (5) 6.Redis缓存代码示例 (6) 6.1.1.写缓存和读缓存 (6) 6.1.2.错误的读写缓存 (7) 7.附录 (8)

1. 概述 1.1. 目的 为系统集群及分布式应用提供基础缓存服务。 1.2. 范围 适用版本:V6.2和后续版本 1.3. 适用对象 本文档适用于: 开发工程师:部署和开发指导。 实施人员:部署指导。 1.4. 参考资料 Redis相关资料 2. 问题与解决策略 愿景关注点描述与示例 3. 目标和约束 目标: 提供单据和基础数据的分布式缓存支持;

redis缓存技术学习

1 什么是redis redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 2 性能怎么样 Redis是一个高性能的key-value内存数据库。官方性能测试结果: set操作每秒110000次,get操作每秒81000次。 3 可不可以存对象 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。 4 Redis与memcache的最大区别 Replication(树形) data types(String、Lists、Sorted Sets、Hashes) persistence (snapshot、aof) 很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis 具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快。但是测试结果基本是Redis占绝对优势。一直在思考这个原因,目前想到的原因有这几方面。 Libevent。和Memcached不同,Redis并没有选择libevent。Libevent为了迎合通用性造成代码庞大(目前Redis代码还不到libevent的1/3)及牺牲了在特定平台的不少性能。Redis 用libevent中两个文件修改实现了自己的epoll event loop(4)。业界不少开发者也建议Redis

Redis中文入门手册

Redis中文入门手册1.0 中国海事服务网(https://www.wendangku.net/doc/e45923596.html,) zhangli收集整理

目录 1)Redis简介 (3) 2)数据类型 (3) 2.1.Redis的Key (3) 2.1.1.key相关指令介绍 (3) 2.2.Redis的vaule (3) 2.2.1.string类型 (3) 2.2.2.hash类型 (4) 2.2.3.list类型 (5) 2.2.4.set类型 (5) 2.2.5.sorted set类型 (6) 3)持久化 (7) 3.1.快照方式:(默认持久化方式) (7) 3.2.日志追加方式: (7) 4)虚拟内存(适用于value比key大的情况) (8) 4.1.Redis虚拟内存简介 (8) 4.2.Redis虚拟内存相关配置 (8) 4.3.redis虚拟内存工作方式简介 (9) 4.3.1.当vm-max-threads设为0时(阻塞方式) (9) 4.3.2.当vm-max-threads大于0时(工作线程方式) (9) 5)主从同步 (9) 5.1.Redis主从复制简介 (9) 5.2.Redis主从复制的过程介绍 (10) 附录A:redis的安装与配置 (10) 1.1.安装 (10) 1.1.1.编译安装 (10) 1.1.2.配置 (11) 1.1.3.启动redis (11) 1.1.4.关闭redis (11) 1.1.5.更新安装redis (12) 1.1.6.redis系统管理相关指令简介 (12) 附录B:安装phpredis模块 (12) 参考资料与知识扩展 (13)

iBase4J —— Java 开源框架整合-系统的基础

iBase4J —— Java 开源框架整合-系统的基础 iBase4J应用于SpringMVC,Mybatis,Redis缓存,Dubbo,ActiveMQ,面向模块分布式基础SpringSession统一管理session,Druid数据库连接等等 主要功能如下: 1、数据库 Druid数据库连接池,监控数据库访问性能,详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。数据库密码加密。 2、持久层 mybatis持久化,aop切换数据库实现读写分离,PageHelper分页。Transtraction 注解Jta事务。 3、MVC 基于spring mvc注解。Exception统一管理。基于session的国际化提示信息,职责链模式的本地语言拦截器、登录拦截器、权限拦截器。 4、调度 Spring task, 可以查询已经注册的任务。立即执行一次任务。 5、缓存和Session 注解redis缓存数据,Spring-session和redis实现分布式session同步。 6、多系统交互 Dubbo,ActiveMQ多系统交互,ftp/sftp发送文件到独立服务器,使文件服务分离。没有权限的文件只用negix代理即可。

7、日志 log4j2打印日志,业务日志和调试日志分开打印。同时基于时间和文件大小分割日志文件。 8、工具类 上传下载excel,汉字转拼音,身份证号码验证,数字转大写人民币,FTP/SFTP上传下载,发送邮件,redis缓存,加密等等。 9、项目构建 maven构建项目,mybatis generator生成mybatis映射文件。 说明:启动项目前请安装Redis和ZooKeeper,您可以在附件中下载。系统中均使用默认配置。 eclipse使用maven命令: mybatis-generator:generate生成mybatis文 件; clean:clean package -P build tomcat7:run-war-only 启动tomcat7。

REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案

REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案

文档修订摘要

目录 REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案 (1) 1. 概述 (4) 2. 初认识 (4) 3. 缓存穿透解决方案 (4) 4. 缓存击穿解决方案 (5) 5. 缓存雪崩的解决方案 (6) 6. 小结 (8)

1.概述 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。 为了克服上述的问题,项目通常会引入NoSQL技术,这是一种基于内存的数据库,并且提供一定的持久化功能。 redis技术就是NoSQL技术中的一种,但是引入redis又有可能出现缓存穿透,缓存击穿,缓存雪崩等问题。本文就对这三种问题进行较深入剖析。 2.初认识 ?缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 ?缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。 ?缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。 3.缓存穿透解决方案 一个一定不存在缓存及查询不到的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不 到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。 有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个 足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。另外 也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数据不存在,还是系 统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。 粗暴方式伪代码: //伪代码public object GetProductListNew() { int cacheTime = 30; String cacheKey = "product_list"; String cacheValue = CacheHelper.Get(cacheKey);

面料英语

面料英文知识Slubbed Single drill? 面料名称英语翻译(转) 1. 棉织物:COTTON FABRIC 2. 平纹织物:PLAIN CLOTH 3. 斜纹织物:TWILL CLOTH 4. 缎纹织物:SATIN AND SATEEN CLOTH 5. 纯纺织物:PURE YARN FABRIC 6. 混纺织物:BLENDED FABRIC 7. 混并织物:MIXTURE 8. 交织织物:MIXED FABRIC 9. 服装用织物:DRESS FABRIC 10. 装饰用织物:FURNISHING FABRIC 11. 产业用织物:TECHNICAL FABRIC 12. 平布:PLAIN CLOTH 13. 粗平布:COARSE SHEETING 14. 中平布:PLAIN CLOTH 15. 细平布:FINE PLAIN 16. 粘纤平布:VISCOSE PLAIN CLOTH 17. 富纤平布:POLYNOSIC PLAIN CLOTH 18. 粘/棉平布:VISCOSE/COTTON PLAIN CLOTH 19. 粘/维平布:VISCOSE/VINYLON PLAIN CLOTH 20. 涤/棉平布:T/C PLAIN CLOTH 21. 涤/粘平布:POLYESTERE/VISCOSE PLAIN CLOTH 22. 棉/丙平布:COTTON/POLYPROPYLENE PLAIN CLOTH 23. 棉/维平布:C/V PLAIN CLOTH 24. 细纺:CAMBRIC 25. 涤/棉细纺:T/C CAMBRIC 26. 府绸:POPLIN 27. 纱府绸:POPLINETTE 28. 线府绸:THREADY POPLIN 29. 涤/棉府绸:T/C POPLIN 30. 棉/维府绸:C/V POPLIN 31. 麻纱:HAIR CORDS 32. 柳条麻纱:STRIPED HAIR CORDS 33. 异经麻纱:END-AND-END HAIR CORDS 34. 提花麻纱:FIGURED HAIR CORDS 35. 罗布:LENO-LIKE CLOTH 36. 罗缎:BENGALINE,TUSSORES 37. 巴厘纱:VOILE 38. 麦尔纱:MULL 39. 防绒布:DOWN-PROOF FABRIC 40. 双经布:DOUBLE ENDS FABRIC 41. 双纬布:DOUBLE WEFT FABRIC

相关文档