导航:首页 > 数据分析 > redis数据类型如何存储

redis数据类型如何存储

发布时间:2023-03-15 23:58:03

㈠ redis的五种数据类型

Redis五种数据类型分别是string(字符串),hash(哈希),list(列表),set(集合)及sortset(有序集合)。

字符串string字符串类型是Redis中最基本的数据存储类型,它是一个由字节组成的序列,在Rediss中是二进制安全的。这意味着该类如配型族尘可以接受任何格式数据。

字符串

主要用于编程,概渣穗指念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,如s=“abcdefghij”,则s[1]=“b”,s[9]="j",这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。

㈡ Redis --- 八种数据类型(基本命令)

String、Hash、List、Set和Zset。

等同于java中的, Map<String,String> string 是redis里面的最基本的数据类型,一个key对应一个value。

应用场景 :String是最常用的一种数据类型,普通的key/value存储都可以归为此类,如用户信息,登录信息和配置信息等;

实现方式 :String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr、decr等操作(自增自减等原子操作)时会转成数值型进行计算,此时redisObject的encoding字段为int。

Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。目的就是为了提升速度,提升性能。 Redis构建了一个叫做简单动态字符串(Simple Dynamic String),简称SDS。

Redis的字符串也会遵守C语言的字符串的实现规则,即 最后一个字符为空字符。然而这个空并搭字符不会被计算在len里头。

Redis动态扩展步骤:

Redis字符串的性能优势

常用命令 :set/get/decr/incr/mget等,具体如下;

ps:计数器(字符串的内容为整数的时候可以使用),如 set number 1。

补充:

等同于java中的: Map<String,Map<String,String>> ,redis的hash是一个string类型的field和value的映射表, 特别适合存储对象。 在redis中,hash因为是一个集合,所以有两层。第一层是key:hash集合value,第二层是hashkey:string value。所以判断是否采用hash的时候可以参照有两层key的设计来做参考。并且注意的是, 设置过期时间只能在第一层的key上面设置。

应用场景 :我们要存储一个用户信息对象数据,其中包括用户ID、用户姓名、年龄和生日,通过用户ID我们希望获取该用户的姓名或者年龄或者生日枝旅;

实现方式 :Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。如,Key是用户ID, value是一个Map。 这个Map的key是成员的属性名,value是属性值 。这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据。 当前HashMap的实现有两种方式 :当HashMap的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,这时对应的value的redisObject的encoding为zipmap,当成员数量增大时会自动转成猛蔽凳真正的HashMap,此时redisObject的encoding字段为int。

常用命令 :hget/hset/hgetall等,具体如下:

等同于java中的 Map<String,List<String>> ,list 底层是一个链表,在redis中,插入list中的值,只需要找到list的key即可,而不需要像hash一样插入两层的key。 list是一种有序的、可重复的集合。

应用场景 :Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表,粉丝列表等都可以用Redis的list结构来实现;

实现方式 :Redis list的实现为一个 双向链表 ,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括 发送缓冲队列 等也都是用的这个数据结构。

常用命令 :lpush/rpush/lpop/rpop/lrange等,具体如下:

性能总结 :

它是一个字符串链表,left、right都可以插入添加。

等同于java中的 Map<String,Set<String>> ,Set 是一种无序的,不能重复的集合。并且在redis中,只有一个key它的底层由hashTable实现的,天生去重。

应用场景 :Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动去重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且 set提供了判断某个成员是否在一个set集合内的重要接口 ,这个也是list所不能提供的;如保存一些标签的名字。标签的名字不可以重复,顺序是可以无序的。

实现方式 :set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。

常用命令 :sadd/spop/smembers/sunion等,具体如下:

ZSet(Sorted Set:有序集合) 每个元素都会关联一个double类型的分数score,分数允许重复,集合元素按照score排序( 当score相同的时候,会按照被插入的键的字典顺序进行排序 ),还可以通过 score 的范围来获取元素的列表。

应用场景 :Redis sorted set的使用场景与set类似,区别是set不是自动有序的,而sorted set可以 通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序的,即自动排序。 当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构,比如twitter 的public timeline可以以发表时间作为score来存储,这样获取时就是自动按时间排好序的。

底层实现 : zset 是 Redis 提供的一个非常特别的数据结构,常用作排行榜等功能,以用户 id 为 value ,关注时间或者分数作为 score 进行排序。实现机制分别是 zipList 和 skipList 。规则如下:

zipList:满足以下两个条件

skipList:不满足以上两个条件时使用跳表、组合了hash和skipList

为什么用skiplist不用平衡树?

主要从内存占用、对范围查找的支持和实现难易程度这三方面总结的原因。

拓展:mysql为什么不用跳表?

常用命令 :zadd/zrange/zrem/zcard等;

官网地址: https://redis.io/commands/geoadd

可以用来推算两地之间的距离,方圆半径内的人。

关于经度纬度的限制: https://www.redis.net.cn/order/3685.html

一般我们使用Hyperloglog做基数统计。

什么是基数?就是一个集合中不重复的数的个数。

集合A:{1,3,5,7,9,7}

集合B:{1,3,5,7,9}

AB集合的基数都是5

应用:统计网站的访问量(一个人访问网站很多次仍然算作一次)。

优点:占用的内存是固定的,找2^64次方个数的基数,只需要12KB内存。

缺点:有0.81%的错误率,可以忽略不计

概述: bitmap 存储的是连续的二进制数字(0 和 1),通过 bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身 。 我们知道 8 个 bit 可以组成一个 byte,所以 bitmap 本身会极大的节省储存空间。

应用场景: 适合需要保存状态信息(比如是否签到、是否登录...)并需要进一步对这些信息进行分析的场景。比如用户签到情况、活跃用户情况、用户行为统计(比如是否点赞过某个视频)。

针对上面提到的一些场景,这里进行进一步说明。

使用场景一:用户行为分析 很多网站为了分析你的喜好,需要研究你点赞过的内容。

使用场景二:统计活跃用户

使用时间作为 key,然后用户 ID 为 offset,如果当日活跃过就设置为 1

那么我该如果计算某几天/月/年的活跃用户呢(暂且约定,统计时间内只有有一天在线就称为活跃),有请下一个 redis 的命令

使用场景三:用户在线状态

对于获取或者统计用户在线状态,使用 bitmap 是一个节约空间效率又高的一种方法。

只需要一个 key,然后用户 ID 为 offset,如果在线就设置为 1,不在线就设置为 0。

补充

巨人的肩膀:

https://www.cnblogs.com/Small-sunshine/p/11687809.html
https://mp.weixin.qq.com/s/CMu7oXVIKp2s-PXTdMlimA

㈢ Redis的五种数据结构及其底层实现原理

redis的字符串类型是由一种叫做简单动态字符串(SDS)的数据类型来实现

SDC和C语言字符串的区别:
1:SDS保存了字符串的长度,而C语言不保存,盯棚凯只能遍历找到第一个的结束符才能确定字符串的长度
2:修改SDS,会检查空间是否足够,不足会先扩展空间,防止缓冲区溢出,C字符串不会检查
3:SDS的预分配空间机制,可以减少为字符串重新分配空间的次数
备注:重新分配空间方式,小于1M的数据 翻倍+1,例如:13K+13K+1,如果大于1M,每次多分配1M,例如:10M+1M+1,如果字符串变短,并不会立即缩短,而是采用惰性空间释放,有专门的API可以释放多余空间

hash结构里其实是一个字典,有许多的键值对
redis的哈希表是一个dictht结构体:

哈希表节点的结构体如下:

hash算法:
当要将一个新的键值对添加到字典里面时, 程序需要先根据键值对的键计算出哈希值和索引值, 然后再根据索引值, 将包含新键值对的哈希表节点放到哈希表数组的指定索引上面。

hash冲突解决方式:链表法,后入的放到最前面
rehash:
键值数据量变动时,时为了让哈希表的负载因子(load factor)维持在一个合理的范围之内, 当哈希表保存的键值对数量太多或者太少时, 程序需要对哈希表的大小进行相应的扩展或和仿者收缩。
如果是扩充,新数组的空间大小为 大于2*used的2的n次方,比如:used=5,则去大于10的第一个2的n次方,为16
如果是缩小,新数组的空间大小为第一个不大于used的2的n次方,比如:used=5,则新大小为4

redis的list列表是使用双向链表来实现的
···
typedef struct listNode {
struct listNode * pre; //前置节点
struct listNode * next; //后置节点
void * value; //节点的值
}

typedef struct list {
listNode *head; //表头节点
listNode tail; //表尾节点
unsigned long len; //链表所包含的节点数量
void (
p) (void ptr); //节点值赋值函数 这里有问题
void (
free) (void ptr); //节点值释放函数
int (
match) (void *ptr, void *key) //节点值对比函数
}
···

1:有序集合的底层实现之一是跳表, 除此之外跳表它在 Redis 中没有其他应用。
2:整数集合(intset)是集合键的底层实现之一: 当一个集合只包含整数值元素, 并且这个集合的元素数量不多时, Redis 就会使用整数集合作为集合键的底层实现。
3:数据少是,使用ziplist(压缩列表),占用连续内存,每项元素都是(数据+score)的方式连续存储,按照score从小到大排序。ziplist为了节省内存,每个元素占用的空间可以不同,对于大数据(long long),就多用一些字节存储,而对于小的数据(short),就少用一些字节来存储。因此查找的时候需要按顺序遍历。ziplist省内存但是查找效率低。

无序集合可以用整数集合(intset)或者凯唤字典实现

Redis的5.0版本中,放出一个新的数据结构Stream。其实也是一个队列,没一个不同的key对应的是不同的队列,没个队列的元素,也就是消息,都有一个msgid,并且需要保证msgid是严格递增的。在Stream当中,消息是默认持久化的,即便是Redis重启,也能够读取到信息。
Stream的多播,与其它队列系统相似,对不同的消费者,也有消费者Group这样的概念,不同的消费组,可以消费通一个消息,对于不同的消费组,都维护一个Idx下标,表示这一个消费群组费到了哪里,每次进行消费,都会更新一下这个下标,往后面一位进行偏移。

跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其它节点的指针,从而大道快速访问节点的目的,具有以下性质:
1:有很多层结构组成
2:每一层都是一个有序的链表,排列顺序为由高到低,都至少包含两个链表节点,分别是前面的head节点和后面的nil节点
3:最底层的链表包含了所有的元素
4:如果一个元素出现在某一层的链表中,那么在该层之下的链表也全部都会出现
5:链表中的每个节点都包含两个指针,一个指向同一层的下一个链表节点,另一个指向下一层的通一个链表节点

多个跳跃表节点构成一个跳跃表

1:搜索,从最高层的链表节点开始,如果比当前节点要大和比当前层的下一个节点要小,那么则往下找,也及时和当前层的下一层的节点下一个节点
2:插入,首先确定插入的层数,有一种方法是抛一个硬币,如果是正面就累加,直到遇到反面为止,最后记录正面的次数作为插入的层数,当确定插入的层数K后,则需要将新元素插入从底层到K层
3:删除,在各个层中找到包含指定值得节点,然后将节点从链表中删除即可,如果删除以后只剩下头尾两个节点,则删除这一层。

整数集合是Redis用于保存整数值集合的抽象数据类型,它可以保存int16_t、int32_t、int64_t的整数值,并且保证集合中不会出现重复元素。

整数集合的每个元素都是contents数组的一个数据项,他们按照从小到大的顺序排列,并且不包含任何重复项。
length属性记录了contents数组的大小。
需要注意的是虽然contents数组声明为int8_t类型,但是实际上contents数组并不保存任何int8_t类型的值,其真正类型由encoding来决定。

压缩列表(ziplist)是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或一个整数值。
压缩列表的原理:压缩列表并不是对数据利用某种算法进行压缩的,而是将数据按照一定规则编码在一块连续的内存区域,目的是节省内存。

压缩列表的每个节点构成如下:

㈣ redis数据类型和应用场景

Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。),Redis数据都是缓存在计算机内存中并且它会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化。谈到存储数据,那么必然要涉及到相关的数据类型,redis主要有以下数据类型:

描述:string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个启碧 value。value其实不仅是String,也可以是数字。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

常用命令:get、set、incr、decr、mget等。

应用场景:规key-value缓存应用。常规计数: 点赞数, 粉丝数。

描述: hash 是一个键值(key => value)对集合。Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

常用命令:hget,hset,hgetall 等。

应用场景:存储部分变更数据,如商品信息等。

描述:list 列表是简单的字符串列表,按照插入顺序排序。你可以添加一指圆个元素到列表的头部(左边)或者尾部(右边)。列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

常用命令:lpush(添加左边元素),rpush,lpop(移除左边第一个元素),rpop,lrange(获取列表片段,LRANGE key start stop)等。

应用场景:消息队列,关注列表,粉丝列表等都可以用Redis的list结构来实现。

描述: set是string类型的无序集合。集合是通过hashtable实现的,概念和数学中个的集合基本类似,可以交集,并集,差集等等,set中的元素是没有顺序的。所以添加,删除,查找的复杂度都是O(1)。

常用命令:sadd,spop,smembers,sunion 等。

应用场景:交集,并集,差集(微博中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中)

描述:zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同是可以打分(排序)

常用命令:zadd,zrange,zrem,zcard等

应用场唯旁塌景:排行榜,带权重的消息队列

描述:Bitmaps这个“数据结构”可以实现对位的操作。 把数据结构加上引号主要因为:
Bitmaps本身不是一种数据结构, 实际上它就是字符串 , 但是它可以对字符串的位进行操作。
Bitmaps单独提供了一套命令, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一个以位为单位的数组, 数组的每个单元只能存储0和1, 数组的下标在Bitmaps中叫做偏移量。其实大多数Bitmaps的应用场景可以用其他数据类型来实现,用Bitmaps主要是存储空间占用特别少

常用命令:getbit key offset;setbit key offset value

应用场景:统计用户访问,统计电影某天的的播放量

描述:Redis 在 2.8.9 版本添加了 HyperLogLog 结构。Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。这类数据结构的基本大的思路就是使用统计概率上的算法,牺牲数据的精准性来节省内存的占用空间及提升相关操作的性能

常用命令:pfadd, pfcount,pfmerge

应用场景:统计网站的每日UV

描述:GEO功能在Redis3.2版本提供,支持存储地理位置信息用来实现诸如附近位置、摇一摇这类依赖于地理位置信息的功能.geo的数据类型为zset.

常用命令:geoadd,geopos, geodist

应用场景:附近位置、摇一摇

参考列表:
Redis五种数据类型及应用场景

㈤ redis数据类型是什么

redis是一个key-value存储系统。

redis和Memcached类似,它支持存储的value类型相对更培拆敏多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希配枝类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。

在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

(5)redis数据类型如何存储扩展阅读

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。

这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的御顷消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

㈥ redis怎么存数组和获取数组

有两种方法:

1.把要存的数组序列化 或者 json_encode后 变成字符串再存。取的时候 反序列号或者json_decode处理成数组。

2.可以使用hash结构,以key作为1维,以hash中的field作为第二维。

㈦ redis数据库如何存取

简而言之,是一种强大的key-value数据库,之所以强大有两点:响应速度快(所以数据内存存储,只在必要时写入磁盘),特性丰富(支持多种数据类型,以及各类型上的复杂操作)。

事实上,Redis的一个重要特性就是它并非通常意义上的数据库,虽然称之为数据库是因为它可以为你存储和维护数据,但它并不像关系数据库那样提供任何的SQL方言。不过不用担心,Redis并不是吞噬数据的黑洞,它只是不支持SQL及相关功能,但却提供了稳健的协议用于与之交互。

在Redis中,没有数据表的概念,也无须关心select、join、view等操作或功能,同时也不提供类似于int或varchar的数据字段。你面对的将是相对原始的数据集合及数据类型。

探索之二:Available datatypes

下面我们深入看下这个奇怪的数据库是如何工作的。如上所见,Redis是基于key-value范式存储数据,所以先来重点看下"key"的概念。

key本质上就是简单的字符串,诸如"username"、"password"等。在定义key时,除了不能使用空格,你可以随意的使用普通的字符、数字等,像".",":","_"等在定义key时都能正常使用,所以像"user_name", "user:123:age", "user:123:username"都是不错的key的定义方式。

不像RDBMS中的字段名称,这里的key是Redis中的重要组成部分,所以我们必须在处理key时多加小心。在下面的讲述中,Redis并没有table的概念,所以像"SELECT username from users WHERE user_id=123;"这种简单任务都只能换种方式实现,为了达到这种目的,在Redis上,一种方式是通过key "user:123:username"来获取结果value。如你所见,key的定义中携带了神秘信息(像user ids)。在Redis中,key的重要性可见一斑。(其他key-value数据库中key的地位也是如此。)

㈧ redis基本数据类型

在Redis中,所有的 key 都是字符串(java中操作的key会被序列化,源喊乱在redis中都是字符串形式)。不同的key对应的value则具备不同的数据结构,所说的五种不同的数据类型,指的是value的数据类型不同。

Redis 中的字符串是动态字符串,内部是可以修改的,像 Java 中的 StringBuffer,它采用分配冗余空间
的方式来减少内存的频繁分配。在 Redis 内部结构中,一般实际分配的内存会大于需要的内存,当字符
串小于 1M 的时候,扩容都是在现有的空间雹档基础上加倍,扩容每次扩 1M 空间,最大 512M。

Redis 字符串常用指令:

在Redis中,字符串都是以二进制的方式存储的。例如:

set k1 a, a对应ASCII码是97 ,97转为二进制是 01100001, BIT相关的命令就是对二进制进行操作的。

bit的一个运用:统计个数。

下表列出了常用的 redis 字符串命令:

在hash结构中,key是一个字符串,value则是渗模一个 key/value 的键值对。

Redis hash 命令

下表列出了 redis hash 基本的相关命令:

Redis 列表命令

下表列出了列表相关的基本命令:

set 集合内的元素是不重复的。

Redis 集合命令

下表列出了 Redis 集合基本命令:

有序集合

Redis 有序集合命令

下表列出了 redis 有序集合的基本命令:

以上都是对于value的操作,下面是对key的操作。

1、 四种数据类型(list/set/zset/hash),在第一次使用时,如果容器不存在,就自动创建一个

2、 四种数据类型(list/set/zset/hash),如果里边没有元素了,那么立即删除容器,释放内存。

㈨ redis数据结构

redis数据结构

Redis是一种存储key-value的内存型数据库,它的key都是字符串类型,value支持存储5种类型的数据:String(字符串类型)、List(列表类型)、Hash(哈希表类型、即key-value类型)、Set(无序集合类型,元素不可重复)、Zset(有序集合类型,元素不可重复)。

针对这5种数据类型,Redis在底层都是使用的redisObject对象表示的。redisObject有3个重要的属性:type、encoding、ptr。

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。

在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

㈩ Redis存储格式

redis目前提供四种数据类型:string,list,set及zset(sorted set)。
redis使用了两种文件格式:全量数据和增量请求。全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载;增量请求文件则是把内存中的数据序列化为操作请求,用于读取文件进行replay得到数据,序列化的操作包括SET、RPUSH、SADD、ZADD。redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。save seconds updates,save配置,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。appendonly yes/no ,appendonly配置,指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的,所以有的数据会在一段时间内只存在于内存中。appendfsync no/always/everysec ,appendfsync配置,no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。

阅读全文

与redis数据类型如何存储相关的资料

热点内容
黄石响应式网站建设多少钱 浏览:410
怎么把excel工作簿放到一个文件夹 浏览:949
wifi网络延时大怎么处理 浏览:345
云办公的原理是把传统文件放哪里 浏览:113
不属于群防群治队伍数据项有哪些 浏览:404
java树向上找 浏览:241
数据库查询票价 浏览:503
word黑色下划线怎么去掉 浏览:879
学习编程怎么学比较好 浏览:351
有什么好看的地图网站 浏览:593
oppo如何设置app黑名单 浏览:71
移动数据用了多少在哪里显示 浏览:549
excel表改变文件名颜色的方法 浏览:966
linuxshell二进制文件 浏览:36
什么是网络道德问题产生的 浏览:836
c清除文件夹 浏览:407
租房贷款用什么app 浏览:59
虚拟机oracle安装教程 浏览:745
太原编程班哪里有 浏览:544
压缩文件怎么找 浏览:586

友情链接