Java中怎么調(diào)用Redis

這篇文章給大家介紹Java中怎么調(diào)用redis,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)建站始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營(yíng)理念,通過(guò)多達(dá)十載累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的營(yíng)銷推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:銅雕雕塑等企業(yè),備受客戶好評(píng)。

調(diào)用Redis的相關(guān)方法

1.  字符串?dāng)?shù)據(jù)類型(String)接口說(shuō)明

字符串類型是Redis中最為基礎(chǔ)的數(shù)據(jù)存儲(chǔ)類型,它在Redis中是二進(jìn)制安全的,這便意味著該類型可以接受任何格式的數(shù)據(jù),如JPEG圖像數(shù)據(jù)或Json對(duì)象描述信息等。在Redis中字符串類型的Value最多可以容納的數(shù)據(jù)長(zhǎng)度是512M。

#設(shè)定該Key持有指定的字符串Value,如果該Key已經(jīng)存在,則覆蓋其原有值。

void set(finalString key, final String value)

#獲取指定Key的Value,如果該Key不存在,返回null。

byte[] get(finalString key)

#判斷該鍵是否存在,存在返回1,否則返回0

booleanexists(final String key)

//刪除指定的Key

longdelete(final String... keys)

//重命名指定的Key, 如果參數(shù)中的兩個(gè)Keys的命令相同,或者是源Key不存在,該命令都會(huì)返回相關(guān)的錯(cuò)誤信息。如果newKey已經(jīng)存在,則直接覆蓋。

voidrename(final String oldkey, final String newkey)

//如果新值不存在,則將參數(shù)中的原值修改為新值。其它條件和RENAME一致。

booleanrenamenx(final String oldkey, final String newkey)

//設(shè)置某個(gè)key的過(guò)期時(shí)間(單位:秒), 在超過(guò)該時(shí)間后,Key被自動(dòng)的刪除。如果該Key在超時(shí)之前被修改,與該鍵關(guān)聯(lián)的超時(shí)將被移除。

booleanexpire(final String key, final int seconds)

# EXPIREAT的作用和 EXPIRE 類似,都用于為 key 設(shè)置生存時(shí)間。不同在于 EXPIREAT命令接受的時(shí)間參數(shù)是 UNIX 時(shí)間戳(unixtimestamp)。

booleanexpireAt(final String key, final long unixTime)

#通過(guò)ttl命令查看一下指定Key的剩余存活時(shí)間(秒數(shù)),0表示已經(jīng)過(guò)期,-1表示永不過(guò)期。long ttl(final Stringkey)

#將當(dāng)前數(shù)據(jù)庫(kù)中的mysetkey鍵移入到ID為dbIndex的數(shù)據(jù)庫(kù)中

booleanmove(final String key, final int dbIndex)

#原子性的設(shè)置該Key為指定的Value,返回該Key的原有值,如果該Key之前并不存在,則返回null。

byte[]getSet(final String key, final String value)

#返回一組指定Keys的Values的列表。

List<byte[]>  mget(final String... keys)

#如果指定的Key不存在,則設(shè)定該Key持有指定字符串Value,此時(shí)其效果等價(jià)于SET命令。相反,如果該Key已經(jīng)存在,該命令將不做任何操作并返回。

booleansetnx(final String key, final String value)

booleansetex(final String key, final int seconds, final String value)

#該命令原子性的完成參數(shù)中所有key/value的設(shè)置操作,如果在這一批Keys中有任意一個(gè)Key已經(jīng)存在了,那么該操作將全部回滾,即所有的修改都不會(huì)生效。

booleanmsetnx(final String... keysvalues)

#將指定Key的Value原子性的遞增1。如果該Key不存在,其初始值為0,在incr之后其值為1,返回遞增后的值。

voidincrBy(final String key, final long integer) {

void incr(finalString key)

#將指定Key的Value原子性的遞減1。如果該Key不存在,其初始值為-1,在incr之后其值為1,返回遞減后的值。

longdecrBy(final String key, final long integer)

long decr(finalString key)

#如果該Key已經(jīng)存在,APPEND命令將參數(shù)Value的數(shù)據(jù)追加到已存在Value的末尾。如果該Key不存在,APPEND命令將會(huì)創(chuàng)建一個(gè)新的Key/Value。返回追加后的Value的長(zhǎng)度。

longappend(final String key, final String value)

2.  字符鏈表(List)數(shù)據(jù)類型接口說(shuō)明

在Redis中,List類型是按照插入順序排序的字符串鏈表。和數(shù)據(jù)結(jié)構(gòu)中的普通鏈表一樣,我們可以在其頭部(left)和尾部(right)添加新的元素。在插入時(shí),如果該鍵并不存在,Redis將為該鍵創(chuàng)建一個(gè)新的鏈表。與此相反,如果鏈表中所有的元素均被移除,那么該鍵也將會(huì)被從數(shù)據(jù)庫(kù)中刪除。List中可以包含的最大元素?cái)?shù)量是4,294,967,295(42億左右)。

#在指定Key所關(guān)聯(lián)的List Value的尾部插入?yún)?shù)中給出的所有Values。如果該Key不存在,該命令將在插入之前創(chuàng)建一個(gè)與該Key關(guān)聯(lián)的空鏈表,之后再將數(shù)據(jù)從鏈表的尾部插入。如果該鍵的Value不是鏈表類型,該命令將返回相關(guān)的錯(cuò)誤信息。

void rpush(finalString key, final String... string)

#在指定Key所關(guān)聯(lián)的List Value的頭部插入?yún)?shù)中給出的所有Values。如果該Key不存在,該命令將在插入之前創(chuàng)建一個(gè)與該Key關(guān)聯(lián)的空鏈表,之后再將數(shù)據(jù)從鏈表的頭部插入。如果該鍵的Value不是鏈表類型,該命令將返回相關(guān)的錯(cuò)誤信息。

void lpush(finalString key, final String... string)

#返回指定Key關(guān)聯(lián)的鏈表中元素的數(shù)量,如果該Key不存在,則返回0。如果與該Key關(guān)聯(lián)的Value的類型不是鏈表,則返回相關(guān)的錯(cuò)誤信息。

long llen(finalString key)

#返回指定范圍內(nèi)元素的列表。該命令的參數(shù)start和end都是0-based。即0表示鏈表頭部(leftmost)的第一個(gè)元素。其中start的值也可以為負(fù)值,-1將表示鏈表中的最后一個(gè)元素,即尾部元素,-2表示倒數(shù)第二個(gè)并以此類推。該命令在獲取元素時(shí),start和end位置上的元素也會(huì)被取出。如果start的值大于鏈表中元素的數(shù)量,空鏈表將會(huì)被返回。如果end的值大于元素的數(shù)量,該命令則獲取從start(包括start)開始,鏈表中剩余的所有元素。

List<byte[]>lrange(final String key, final long start, final long end)

#該命令將僅保留指定范圍內(nèi)的元素,從而保證鏈接中的元素?cái)?shù)量相對(duì)恒定。start和stop參數(shù)都是0-based,0表示頭部元素。和其他命令一樣,start和stop也可以為負(fù)值,-1表示尾部元素。如果start大于鏈表的尾部,或start大于stop,該命令不錯(cuò)報(bào)錯(cuò),而是返回一個(gè)空的鏈表,與此同時(shí)該Key也將被刪除。如果stop大于元素的數(shù)量,則保留從start開始剩余的所有元素。

void ltrim(finalString key, final long start, final long end)

#該命令將返回鏈表中指定位置(index)的元素,index是0-based,表示頭部元素,如果index為-1,表示尾部元素。如果與該Key關(guān)聯(lián)的不是鏈表,該命令將返回相關(guān)的錯(cuò)誤信息。

byte[]lindex(final String key, final long index)

#設(shè)定鏈表中指定位置的值為新值,其中0表示第一個(gè)元素,即頭部元素,-1表示尾部元素。如果索引值Index超出了鏈表中元素的數(shù)量范圍,該命令將返回相關(guān)的錯(cuò)誤信息。

void lset(finalString key, final long index, final String value)

#在指定Key關(guān)聯(lián)的鏈表中,刪除前count個(gè)值等于value的元素。如果count大于0,從頭向尾遍歷并刪除,如果count小于0,則從尾向頭遍歷并刪除。如果count等于0,則刪除鏈表中所有等于value的元素。如果指定的Key不存在,則直接返回0,返回被刪除的元素?cái)?shù)量。

long lrem(finalString key, long count, final String value)

 

#返回并彈出指定Key關(guān)聯(lián)的鏈表中的第一個(gè)元素,即頭部元素。如果該Key不存,返回null。

byte[]lpop(final String key)

#返回并彈出指定Key關(guān)聯(lián)的鏈表中的最后一個(gè)元素,即尾部元素。如果該Key不存,返回nil。

byte[]rpop(final String key)

#原子性的從與srckey鍵關(guān)聯(lián)的鏈表尾部彈出一個(gè)元素,同時(shí)再將彈出的元素插入到與dstkey鍵關(guān)聯(lián)的鏈表的頭部。如果srckey鍵不存在,該命令將返回null,同時(shí)不再做任何其它的操作了。如果srckey和dstkey是同一個(gè)鍵,則相當(dāng)于原子性的將其關(guān)聯(lián)鏈表中的尾部元素移到該鏈表的頭部。

byte[]rpoplpush(final String srckey, final String dstkey)

3.  Hashes數(shù)據(jù)類型接口說(shuō)明

我們可以將Redis中的Hashes類型看成具有String Key和String Value的map容器。所以該類型非常適合于存儲(chǔ)值對(duì)象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那么該類型的數(shù)據(jù)也將僅占用很少的磁盤空間。每一個(gè)Hash可以存儲(chǔ)4,294,967,295個(gè)鍵值對(duì)。

#為指定的Key設(shè)定Field/Value對(duì),如果Key不存在,該命令將創(chuàng)建新Key以參數(shù)中的Field/Value對(duì),如果參數(shù)中的Field在該Key中已經(jīng)存在,則用新值覆蓋其原有值。

booleanhset(final String key, final String field, final String value)

#返回參數(shù)中Field的關(guān)聯(lián)值,如果參數(shù)中的Key或Field不存,返回null。

void hget(finalString key, final String field)

#只有當(dāng)參數(shù)中的Key或Field不存在的情況下,為指定的Key設(shè)定Field/Value對(duì),否則該命令不會(huì)進(jìn)行任何操作。

voidhsetnx(final String key, final String field, final String value)

#逐對(duì)依次設(shè)置參數(shù)中給出的Field/Value對(duì)。如果其中某個(gè)Field已經(jīng)存在,則用新值覆蓋原有值。如果Key不存在,則創(chuàng)建新Key,同時(shí)設(shè)定參數(shù)中的Field/Value。

void hmset(finalString key, final Map<String, String> hash)

#獲取和參數(shù)中指定Fields關(guān)聯(lián)的一組Values。如果請(qǐng)求的Field不存在,其值返回null。如果Key不存在,該命令將其視為空Hash,因此返回一組null。

byte[] hmget(finalString key, final String... fields)

#增加指定Key中指定Field關(guān)聯(lián)的Value的值。如果Key或Field不存在,該命令將會(huì)創(chuàng)建一個(gè)新Key或新Field,并將其關(guān)聯(lián)的Value初始化為0,之后再指定數(shù)字增加的操作。返回運(yùn)算后的值

longhincrBy(final String key, final String field, final long value)    

#判斷指定Key中的指定Field是否存在。

void hexists(finalString key, final String field)

#從指定Key的Hashes Value中刪除參數(shù)中指定的多個(gè)字段,如果不存在的字段將被忽略。如果Key不存在,則將其視為空Hashes,并返回0.返回實(shí)際刪除的Field數(shù)量。

void hdel(finalString key, final String... fields)

#獲取該Key所包含的Field的數(shù)量。

void hlen(finalString key)

#返回指定Key的所有Fields名。

List<byte[]>  hkeys(final String key)

#返回指定Key的所有Values名。

List<byte[]>  hvals(final String key)

#獲取該鍵包含的所有Field/Value。其返回格式為一個(gè)Field、一個(gè)Value,并以此類推。

Map<byte[],byte[]>  hgetAll(final String key)

4.  字符集合(Set)數(shù)據(jù)類型接口說(shuō)明

在Redis中,我們可以將Set類型看作為沒有排序的字符集合,和List類型一樣,我們也可以在該類型的數(shù)據(jù)值上執(zhí)行添加、刪除或判斷某一元素是否存在等操作。需要說(shuō)明的是,這些操作的時(shí)間復(fù)雜度為O(1),即常量時(shí)間內(nèi)完成次操作。Set可包含的最大元素?cái)?shù)量是4,294,967,295。

和List類型不同的是,Set集合中不允許出現(xiàn)重復(fù)的元素,這一點(diǎn)和C++標(biāo)準(zhǔn)庫(kù)中的set容器是完全相同的。換句話說(shuō),如果多次添加相同元素,Set中將僅保留該元素的一份拷貝。和List類型相比,Set類型在功能上還存在著一個(gè)非常重要的特性,即在服務(wù)器端完成多個(gè)Sets之間的聚合計(jì)算操作,如unions、intersections和differences。由于這些操作均在服務(wù)端完成,因此效率極高,而且也節(jié)省了大量的網(wǎng)絡(luò)IO開銷。

#如果在插入的過(guò)程用,參數(shù)中有的成員在Set中已經(jīng)存在,該成員將被忽略,而其它成員仍將會(huì)被正常插入。如果執(zhí)行該命令之前,該Key并不存在,該命令將會(huì)創(chuàng)建一個(gè)新的Set,此后再將參數(shù)中的成員陸續(xù)插入。如果該Key的Value不是Set類型,該命令將返回相關(guān)的錯(cuò)誤信息。

booleansadd(final String key, final String... members)

#獲取與該Key關(guān)聯(lián)的Set中所有的成員。

List<byte[]>  smembers(final String key)

#從與Key關(guān)聯(lián)的Set中刪除參數(shù)中指定的成員,不存在的參數(shù)成員將被忽略,如果該Key并不存在,將視為空Set處理。

void srem(finalString key, final String... members)

#隨機(jī)的移除并返回Set中的某一成員。由于Set中元素的布局不受外部控制,因此無(wú)法像List那樣確定哪個(gè)元素位于Set的頭部或者尾部。

byte[] spop(finalString key)

#原子性的將參數(shù)中的成員從srckey 鍵移入到dstkey鍵所關(guān)聯(lián)的Set中。因此在某一時(shí)刻,該成員或者出現(xiàn)在source中,或者出現(xiàn)在dstkey中。如果該成員在srckey中并不存在,該命令將不會(huì)再執(zhí)行任何操作并返回0,否則,該成員將從srckey移入到dstkey。如果此時(shí)該成員已經(jīng)在dstkey中存在,那么該命令僅是將該成員從srckey中移出。如果和Key關(guān)聯(lián)的Value不是Set,將返回相關(guān)的錯(cuò)誤信息。

booleansmove(final String srckey, final String dstkey,final String member)

#獲取Set中成員的數(shù)量。

long scard(finalString key)

#判斷參數(shù)中指定成員是否已經(jīng)存在于與Key相關(guān)聯(lián)的Set集合中。

booleansismember(final String key, final String member)

#該命令將返回參數(shù)中所有Keys關(guān)聯(lián)的Sets中成員的交集。因此如果參數(shù)中任何一個(gè)Key關(guān)聯(lián)的Set為空,或某一Key不存在,那么該命令的結(jié)果將為空集。

List<byte[]>  sinter(final String... keys)

#該命令和sinter命令在功能上完全相同,兩者之間唯一的差別是sinter返回交集的結(jié)果成員,而該命令將交集成員存儲(chǔ)在dstkey關(guān)聯(lián)的Set中。如果dstkey鍵已經(jīng)存在,該操作將覆蓋它的成員。

voidsinterstore(final String dstkey, final String... keys)

#該命令將返回參數(shù)中所有Keys關(guān)聯(lián)的Sets中成員的并集。

List<byte[]>  sunion(final String... keys)

#該命令和sunion命令在功能上完全相同,兩者之間唯一的差別是sunion返回并集的結(jié)果成員,而該命令將并集成員存儲(chǔ)在dstkey關(guān)聯(lián)的Set中。如果dstkey鍵已經(jīng)存在,該操作將覆蓋它的成員。

voidsunionstore(final String dstkey, final String... keys)

#返回參數(shù)中第一個(gè)Key所關(guān)聯(lián)的Set和其后所有Keys所關(guān)聯(lián)的Sets中成員的差異。如果Key不存在,則視為空Set。

List<byte[]>sdiff(final String... keys)

#該命令和SDIFF命令在功能上完全相同,兩者之間唯一的差別是SDIFF返回差異的結(jié)果成員,而該命令將差異成員存儲(chǔ)在dstkey關(guān)聯(lián)的Set中。如果dstkey鍵已經(jīng)存在,該操作將覆蓋它的成員。

voidsdiffstore(final String dstkey, final String... keys)

#和SPOP一樣,隨機(jī)的返回Set中的一個(gè)成員,不同的是該命令并不會(huì)刪除返回的成員。

voidsrandmember(final String key)

5.  有序集合(Sorted-Sets)數(shù)據(jù)類型接口說(shuō)明

Sorted-Sets和Sets類型極為相似,它們都是字符串的集合,都不允許重復(fù)的成員出現(xiàn)在一個(gè)Set中。它們之間的主要差別是Sorted-Sets中的每一個(gè)成員都會(huì)有一個(gè)分?jǐn)?shù)(score)與之關(guān)聯(lián),Redis正是通過(guò)分?jǐn)?shù)來(lái)為集合中的成員進(jìn)行從小到大的排序。然而需要額外指出的是,盡管Sorted-Sets中的成員必須是唯一的,但是分?jǐn)?shù)(score)卻是可以重復(fù)的。

在Sorted-Set中添加、刪除或更新一個(gè)成員都是非??焖俚牟僮?,其時(shí)間復(fù)雜度為集合中成員數(shù)量的對(duì)數(shù)。由于Sorted-Sets中的成員在集合中的位置是有序的,因此,即便是訪問(wèn)位于集合中部的成員也仍然是非常高效的。事實(shí)上,Redis所具有的這一特征在很多其它類型的數(shù)據(jù)庫(kù)中是很難實(shí)現(xiàn)的,換句話說(shuō),在該點(diǎn)上要想達(dá)到和Redis同樣的高效,在其它數(shù)據(jù)庫(kù)中進(jìn)行建模是非常困難的。

#在該命令中我們可以指定多組score/member作為參數(shù)。如果在添加時(shí)參數(shù)中的某一成員已經(jīng)存在,該命令將更新此成員的分?jǐn)?shù)為新值,同時(shí)再將該成員基于新值重新排序。如果鍵不存在,該命令將為該鍵創(chuàng)建一個(gè)新的Sorted-Sets Value,并將score/member對(duì)插入其中。如果該鍵已經(jīng)存在,但是與其關(guān)聯(lián)的Value不是Sorted-Sets類型,相關(guān)的錯(cuò)誤信息將被返回。

booleanzadd(final String key, final double score, final String member)

#該命令按順序返回在參數(shù)start和stop指定范圍內(nèi)的成員,這里start和stop參數(shù)都是0-based,即0表示第一個(gè)成員,-1表示最后一個(gè)成員。如果start大于該Sorted-Set中的最大索引值,或start > stop,此時(shí)一個(gè)空集合將被返回。如果stop大于最大索引值,該命令將返回從start到集合的最后一個(gè)成員。如果命令中帶有可選參數(shù)WITHSCORES選項(xiàng),該命令在返回的結(jié)果中將包含每個(gè)成員的分?jǐn)?shù)值,如value1,score1,value2,score2...?!?/p>

List<byte[]>  zrange(final String key, final long start,final long end)

#該命令將移除參數(shù)中指定的成員,其中不存在的成員將被忽略。如果與該Key關(guān)聯(lián)的Value不是Sorted-Set,相應(yīng)的錯(cuò)誤信息將被返回。

booleanzrem(final String key, final String... members)

#該命令將為指定Key中的指定成員增加指定的分?jǐn)?shù)。如果成員不存在,該命令將添加該成員并假設(shè)其初始分?jǐn)?shù)為0,此后再將其分?jǐn)?shù)加上increment。如果Key不存,該命令將創(chuàng)建該Key及其關(guān)聯(lián)的Sorted-Sets,并包含參數(shù)指定的成員,其分?jǐn)?shù)為increment參數(shù)。如果與該Key關(guān)聯(lián)的不是Sorted-Sets類型,相關(guān)的錯(cuò)誤信息將被返回。

Doublezincrby(final String key, final double score,final String member)

# Sorted-Set中的成員都是按照分?jǐn)?shù)從低到高的順序存儲(chǔ),該命令將返回參數(shù)中指定成員的位置值,其中0表示第一個(gè)成員,它是Sorted-Set中分?jǐn)?shù)最低的成員。

long zrank(finalString key, final String member)

#該命令的功能和ZRANK基本相同,唯一的差別在于該命令獲取的索引是從高到低排序后的位置,同樣0表示第一個(gè)元素,即分?jǐn)?shù)最高的成員。

longzrevrank(final String key, final String member)

#該命令的功能和ZRANGE基本相同,唯一的差別在于該命令是通過(guò)反向排序獲取指定位置的成員,即從高到低的順序。如果成員具有相同的分?jǐn)?shù),則按降序字典順序排序。

List<byte[]>zrevrange(final String key, final long start, final long end)

#該命令將返回分?jǐn)?shù)在min和max之間的所有成員,即滿足表達(dá)式min <= score <= max的成員,其中返回的成員是按照其分?jǐn)?shù)從低到高的順序返回,如果成員具有相同的分?jǐn)?shù),則按成員的字典順序返回。

List<byte[]>  zrangeWithScores(final String key, final longstart,final long end)

#該命令除了排序方式是基于從高到低的分?jǐn)?shù)排序之外,其它功能和參數(shù)含義均與ZRANGEBYSCORE相同。

List<byte[]>  zrevrangeWithScores(final String key, finallong start,final long end)

#獲取與該Key相關(guān)聯(lián)的Sorted-Sets中包含的成員數(shù)量。

long zcard(finalString key)

#獲取指定Key的指定成員的分?jǐn)?shù)。

Doublezscore(final String key, final String member)

##獲取指定Key的指定成員的分?jǐn)?shù)。

void watch(finalString... keys)

#給指定的Key的成員排序

Sort sort(finalString key)

Sort sort(finalString key, final SortingParams sortingParameters,

        final String dstkey)

Sort sort(finalString key, final String dstkey)

#

void blpop(finalString[] args)

void brpop(finalString[] args)

#該命令用于獲取分?jǐn)?shù)(score)在min和max之間的成員數(shù)量。

longzcount(final String key, final double min, final double max)

longzcount(final String key, final String min, final String max)

#該命令將返回分?jǐn)?shù)在min和max之間的所有成員,即滿足表達(dá)式min <= score <= max的成員,其中返回的成員是按照其分?jǐn)?shù)從低到高的順序返回,如果成員具有相同的分?jǐn)?shù),則按成員的字典順序返回。

List<byte[]>  zrangeByScore(final String key, final doublemin,final double max)

List<byte[]>  zrangeByScore(final String key, final Stringmin,final String max)

List<byte[]>  zrangeByScore(final String key, final doublemin,final double max, final int offset, int count)

List<byte[]>  zrangeByScoreWithScores(final String key,final double min,final double max)

List<byte[]>  zrangeByScoreWithScores(final String key,final double min,

        final double max, final int offset, final int count)

#

voidzremrangeByRank(final String key, final long start,final long end)

voidzremrangeByScore(final String key, final double start,final double end)

voidzremrangeByScore(final String key, final String start,final String end)

voidzunionstore(final String dstkey, final String... sets)

voidzunionstore(final String dstkey, final ZParams params,final String... sets)

voidzinterstore(final String dstkey, final String... sets)

voidzinterstore(final String dstkey, final ZParams params,final String... sets)

關(guān)于Java中怎么調(diào)用Redis就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

名稱欄目:Java中怎么調(diào)用Redis
當(dāng)前網(wǎng)址:http://muchs.cn/article18/ijsodp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、虛擬主機(jī)、網(wǎng)站排名標(biāo)簽優(yōu)化、企業(yè)建站網(wǎng)站營(yíng)銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)