Redis系列第二篇之String

Redis為k-v形式的內(nèi)存數(shù)據(jù)庫(kù)吆寨,其v對(duì)應(yīng)多種數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)形式,String就是其中一種悬钳,一起來(lái)學(xué)習(xí)String的各種命令吧!

APPEND key value

  • 可用版本: v2.0.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 如果key早已存在并且存儲(chǔ)類型為字符串昧碉,此命令將value附加到該string末尾宙刘。如果key不存在,Redis將會(huì)創(chuàng)建該key并設(shè)置為空字符串鲁僚,因此在這種特殊情況下APPENDSET相似。
  • 返回值: Integer(整型),返回附加操作后的字符串長(zhǎng)度
  • 時(shí)間序列模式
    APPEND命令可以用來(lái)創(chuàng)建一個(gè)由固定大小的樣品組成的非常緊湊的列表冰沙,這樣的列表被稱為時(shí)間序列侨艾,每當(dāng)一個(gè)新的樣品到達(dá)時(shí)我們可以用下面的命令來(lái)存儲(chǔ)它:
    APPEND timeseries "fixed-size" sample
    訪問(wèn)時(shí)間出列中單獨(dú)的元素并不困難:
    • STRLEN可以用來(lái)獲取樣品的數(shù)量
    • GETRANGE允許隨機(jī)訪問(wèn)元素。如果時(shí)間序列具有相關(guān)聯(lián)的時(shí)間信息拓挥,我們可以輕松的通過(guò)GETRANGE與Redis v2.6中可用的Lua腳本引擎相結(jié)合來(lái)輕松實(shí)現(xiàn)二進(jìn)制搜索以獲取范圍唠梨。
    • SETRANGE可以用來(lái)覆蓋一個(gè)存在的時(shí)間序列
      這種模式的局限性是被強(qiáng)制在append-only操作中,因?yàn)镽edis目前缺少可以裁剪string對(duì)象的命令所以沒(méi)有辦法將時(shí)間序列裁剪為指定大小撞叽。然而以這種方式存儲(chǔ)的時(shí)間序列的空間效率是顯著的姻成。
      提示:可以根據(jù)當(dāng)前的Unix時(shí)間切換到不同的鍵,這樣每個(gè)鍵可以只有相對(duì)少量的樣本愿棋,避免處理非常大的鍵科展,并使這種模式更友好分布在多個(gè)Redis實(shí)例中

DECR key

  • 可用版本: v1.0.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 將存儲(chǔ)在key的值減1。如果key不存在糠雨,在執(zhí)行操作之前將會(huì)被置為0才睹,如果key包含錯(cuò)誤類型的值或者包含一個(gè)不能表示為整數(shù)的值,將會(huì)返回錯(cuò)誤甘邀。此操作僅限于64位有符號(hào)整數(shù)琅攘。
  • 返回值: Integer(整型),返回減法操作后的值

DECRBY key decrement

  • 可用版本: v1.0.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋:DECR命令同為減法操作松邪,不同的是DECR為減一坞琴,而DECRBY則是減去指定的變量,如果decrement為負(fù)數(shù)逗抑,則與INCRBY功能相同剧辐。如果key不存在,則在執(zhí)行操作之前會(huì)將key置為0邮府,如果key包含錯(cuò)誤類型的值或者包含一個(gè)不能表示為整數(shù)的值荧关,將會(huì)返回錯(cuò)誤。此操作僅限于64位有符號(hào)整數(shù)褂傀。
  • 返回值: Integer(整型)忍啤,返回操作后的值

GET key

  • 可用版本: v1.0.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 獲取key對(duì)應(yīng)的value,如果key不存在將會(huì)返回nil仙辟。GET只能操作string類型同波,如果key存儲(chǔ)的不是string類型,命令將會(huì)返回錯(cuò)誤欺嗤。
  • 返回值: Bulk String(批量字符串)参萄,返回key對(duì)應(yīng)的value,如果key不存在將會(huì)返回nil煎饼。

GETDEL key

  • 可用版本: v6.2.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 獲取key對(duì)應(yīng)的值并且刪除key(只能操作于string類型)
  • 返回值: Bulk String(批量字符串)讹挎,如果key不存在返回nil校赤。如果key不是string類型,返回錯(cuò)誤筒溃。

GETEX key [ EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | PERSIST]

  • 可用版本: v6.2.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 獲取key的值马篮,同時(shí)可以選擇設(shè)置key的有效期。
  • 選項(xiàng)說(shuō)明:
    • EX 以秒為單位設(shè)置key的有效期
    • PX 以毫秒為單位設(shè)置key的有效期
    • EXAT 將有效期設(shè)置為精確到秒的時(shí)間戳
    • PXAT 將有效期設(shè)置為精確到毫秒的時(shí)間戳
    • PERSIST 移除相關(guān)聯(lián)的key的有效期
  • 返回值: Bulk String(批量字符串)怜奖,key不存在返回nil浑测,否則返回key對(duì)應(yīng)的value

GETRANGE key start end

  • 可用版本: v2.4.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(N),其中N為返回字符串的長(zhǎng)度歪玲。
  • 解釋: 返回存儲(chǔ)在key中字符串的子串迁央,子串由偏移量startend組成的閉區(qū)間決定,如果偏移量為負(fù)數(shù)滥崩,表示從字符串的結(jié)尾開(kāi)始便宜:-1表示最后一個(gè)字符岖圈,-2表示倒數(shù)第二個(gè)字符等。如果偏移量超出字符串長(zhǎng)度范圍钙皮,則將會(huì)被限制在字符串長(zhǎng)度范圍內(nèi)蜂科。
  • 返回值: Bulk String(批量字符串)

GETSET key value

  • 可用版本: v1.0.0開(kāi)始,從v6.2.0開(kāi)始短条,此命令被視為廢棄导匣,可以被帶有GET選項(xiàng)的SET命令替代
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 設(shè)置key的值的同時(shí)返回key存儲(chǔ)的舊值。如果key持有的不是string類型將會(huì)返回錯(cuò)誤茸时。SET成功后贡定,key之前所有的有效期將會(huì)被丟棄。
  • 設(shè)計(jì)模式: GETSET可以與INCR一起用于原子復(fù)位計(jì)數(shù)可都。比如:當(dāng)有程序檢測(cè)到有事件發(fā)生時(shí)厕氨,可以調(diào)用INCR命令,如果需要獲取并重置計(jì)數(shù)器的值時(shí)汹粤,可以調(diào)用GETSET命令。
  • 返回值: Bulk String(批量字符串)田晚,返回存儲(chǔ)在key中的舊值或者nil(當(dāng)key不存在時(shí))嘱兼。

INCR key

  • 可用版本: v1.0.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 將存儲(chǔ)在key中的值加1,如果key不存在則命令在執(zhí)行操作前會(huì)先將key的值置為0贤徒。如果key持有的數(shù)據(jù)類型不是string或者無(wú)法表示為一個(gè)整數(shù)時(shí)將會(huì)返回錯(cuò)誤芹壕。同時(shí)此命令被限制在操作64位有符號(hào)整數(shù)范圍內(nèi)。
  • 返回值: Integer(整型)接奈,返回加1操作后的值

INCRBY key increment

  • 可用版本: v1.0.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 此命令與INCR相似踢涌,不同之處在于此命令將由調(diào)用者指定增量,如果增量為1序宦,則與INCR命令功能一樣睁壁。
  • 返回值: Integer(整型),返回加法操作后的值

INCRBYFLOAT key increment

  • 可用版本: v2.6.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 與命令INCRBY key increment相似,不同的是此命令增量可以設(shè)置為雙精度浮點(diǎn)數(shù)(float)潘明,如果增量被指定為負(fù)數(shù)行剂,則表示減法(默認(rèn)加法操作)。如果key不存在钳降,則命令在執(zhí)行操作之前將會(huì)把key置為0厚宰,如果發(fā)生以下情況之一,將會(huì)返回錯(cuò)誤:
    • key持有的錯(cuò)誤類型的值(非string類型)
    • key當(dāng)前持有的值或者指定的增量(increment)無(wú)法被解析為雙精度浮點(diǎn)類型
      字符串鍵中已經(jīng)包含的值和增量參數(shù)都可以選擇以指數(shù)表示法提供遂填,但是增量后計(jì)算的值始終以相同的格式存儲(chǔ):一個(gè)整數(shù)后跟(如果需要)一個(gè)點(diǎn)铲觉,以及表示數(shù)字的小數(shù)部分的可變位數(shù)。始終刪除尾隨零吓坚,無(wú)論計(jì)算的實(shí)際內(nèi)部精度如何撵幽,輸出的精度都固定在小數(shù)點(diǎn)后17位。
  • 返回值: Bulk String(批量字符串)凌唬,返回命令執(zhí)行操作后key所持有的值

LCS key1 key2 [LEN] [IDX] [MINMATCHLEN len] [WITHMATCHLEN]

  • 可用版本: v7.0.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(N*M)并齐,其中N為s1的長(zhǎng)度,M為s2的長(zhǎng)度
  • 解釋: LCS命令實(shí)現(xiàn)最長(zhǎng)公共子序列算法客税,與最長(zhǎng)公共字符串算法不同的是况褪,最長(zhǎng)公共子序列算法在字符串中匹配的字符不需要是連續(xù)的,例如字符串faofo的最長(zhǎng)公共子序列結(jié)果為fo更耻。LCS命令在計(jì)算兩個(gè)字符串有多相似時(shí)是非常有用的测垛,比如計(jì)算DNA序列的相似程度。
  • 選項(xiàng)說(shuō)明:
    • LEN 返回匹配結(jié)果的長(zhǎng)度
    • IDX 返回每個(gè)匹配結(jié)果的匹配位置
    • MINMATCHLEN 限制匹配列表的最小長(zhǎng)度
    • WITHMATCHLENIDX搭配使用秧均,同時(shí)返回匹配長(zhǎng)度
  • 返回值:
    • 沒(méi)有指定修飾符:返回表示匹配到的最長(zhǎng)子序列的Bulk String(批量字符串)
    • 如果指定了LEN修飾符將會(huì)返回最長(zhǎng)子序列的長(zhǎng)度
    • 如果指定了IDX修飾符食侮,將會(huì)返回一個(gè)數(shù)組,其中包含LCS長(zhǎng)度和兩個(gè)字符串(s1目胡,s2)中的所有范圍锯七、每個(gè)字符串的開(kāi)始和結(jié)束偏移量,其中有匹配項(xiàng)誉己。當(dāng)給定 WITHMATCHLEN 時(shí)眉尸,表示匹配的每個(gè)數(shù)組也將具有匹配的長(zhǎng)度

MGET key [key ...]

  • 可用版本: v1.0.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(N),N為給定key的數(shù)量
  • 解釋: 返回指定key(s)的值巨双,對(duì)于不存在的key或者持有值不是string的key噪猾,將會(huì)返回nil,命令總是成功筑累。
  • 返回值: Array(數(shù)組)袱蜡,返回由指定key(s )的值組成的數(shù)組

MSET key value [ key value ...]

  • 可用版本: v1.0.1開(kāi)始
  • 時(shí)間復(fù)雜度: O(N),N為key的數(shù)量
  • 解釋: 批量設(shè)置key-value鍵值對(duì)慢宗。如果key存在坪蚁,命令將會(huì)用新值替換key的舊值奔穿,MSET操作是原子性的。
  • 返回值: Simple String(簡(jiǎn)單字符串)迅细,命令總是返回OK巫橄。

MSETNX key value [ key value ...]

  • 可用版本: v1.0.1開(kāi)始
  • 時(shí)間復(fù)雜度: O(N),N為key的數(shù)量
  • 解釋:MSET功能一樣茵典,批量設(shè)置key-value鍵值對(duì)湘换,不同的是如果指定的key已經(jīng)存在MSETNX不會(huì)對(duì)于該key不會(huì)執(zhí)行任何操作。同樣统阿,MSETNX也是原子性的
  • 返回值: Integer(整型)
    • 如果所有給定的key都被設(shè)置了則返回1
    • 如果沒(méi)有key被設(shè)置則返回0

PSETEX key milliseconds value

  • 可用版本: v2.6.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 以毫秒為單位設(shè)置key的有效期
  • 返回值: Simple String(簡(jiǎn)單字符串)彩倚,返回OK

SET key value [ NX | XX] [GET] [ EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

  • 可用版本: v1.0.0開(kāi)始
  • 歷史:
    • v2.6.12開(kāi)始支持EXPX扶平,NXXX選項(xiàng)
    • v6.0.0開(kāi)始支持KEEPTTL選項(xiàng)
    • v6.2.0開(kāi)始支持GET帆离,EXATPXAT選項(xiàng)
    • v7.0.0開(kāi)始支持NXGET一起使用
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 將key設(shè)置為字符串value,如果key早已存在结澄,無(wú)論舊值類型是什么哥谷,命令都將會(huì)覆蓋舊值。執(zhí)行操作之前的任何有效期都會(huì)被丟棄麻献。
  • 選項(xiàng)說(shuō)明:
    • EX 以秒為單位設(shè)置key的有效期為多少秒
    • PX 以毫秒為單位設(shè)置key的有效期為多少毫秒
    • EXAT 將key的有效截止時(shí)間點(diǎn)設(shè)置為精確到秒的時(shí)間戳
    • PXAT 將key的有效截止時(shí)間點(diǎn)設(shè)置為精確到毫秒的時(shí)間戳
    • NX 只有當(dāng)key不存在時(shí)才設(shè)置
    • XX 只有當(dāng)key已經(jīng)存在時(shí)才設(shè)置
    • KEEPTTL 保留key既有的有效期
    • GET 返回key的舊值们妥,如果key不存在則返回nil。如果key所持有的的舊值不是string類型勉吻,則終止SET操作监婶。
  • 返回值:
    • Simple String(簡(jiǎn)單字符串):如果SET正確執(zhí)行將返回OK
    • Null Reply(nil): 如果用戶指定了NX或者XX選項(xiàng),并且SET操作沒(méi)有被執(zhí)行則返回nil
      如果調(diào)用方指定了GET選項(xiàng)齿桃,將會(huì)以下面兩種形式返回(無(wú)論SET命令是否執(zhí)行):
    • Bulk String(批量字符串):如果key存在惑惶,返回key對(duì)應(yīng)的舊值
    • Null Reply(nil):如果key不存在返回nil
  • 模式: 命令SET resource-name anystring NX EX max-lock-time是使用Redis實(shí)現(xiàn)鎖的一種簡(jiǎn)單方式《套荩客戶端可以通過(guò)上述命令返回的OK獲得鎖(或者當(dāng)返回nil時(shí)過(guò)一段時(shí)間再重試)带污,并且通過(guò)命令DEL移除鎖。
    當(dāng)有效期到達(dá)后鎖將自動(dòng)釋放香到」涡蹋可以通過(guò)以下兩點(diǎn)來(lái)使鎖系統(tǒng)更加健壯:
    • 設(shè)置隨機(jī)字符串(Token)而不是設(shè)置固定字符串
    • 通過(guò)腳本當(dāng)Token匹配時(shí)才刪除key而不是簡(jiǎn)單的通過(guò)DEL命令移除鎖
      上述兩點(diǎn)避免了當(dāng)鎖過(guò)期后,客戶端再次嘗試釋放另一個(gè)客戶端創(chuàng)建的鎖养渴。

SETEX key seconds value

  • 可用版本: v2.0.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 將key的值設(shè)置為字符串value,同時(shí)設(shè)置key的有效期為指定的秒數(shù)泛烙,如果秒數(shù)不可用將會(huì)返回錯(cuò)誤理卑。SETEX是原子操作。
  • 返回值: Simple String(簡(jiǎn)單字符串)

SETNX key value

  • 可用版本: v1.0.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 如果key不存在則將key的值設(shè)置為字符串value蔽氨,如果key早已存在則不執(zhí)行任何操作藐唠。
  • 返回值: Integer(整型)
    • 如果key被設(shè)置了返回1
    • 如果key沒(méi)被設(shè)置返回0

SETRANGE key offset value

  • 可用版本: v2.2.0開(kāi)始
  • 時(shí)間復(fù)雜度: 如果字符串很小帆疟,不計(jì)算拷貝字符串帶來(lái)的開(kāi)銷時(shí)時(shí)間復(fù)雜度為O(1),否則時(shí)間復(fù)雜度為O(M)宇立,M為value的長(zhǎng)度
  • 解釋: 從指定offset開(kāi)始到結(jié)尾的覆蓋key持有的字符串值踪宠,如果offset大于key持有字符串的當(dāng)前長(zhǎng)度,則用零字節(jié)填充字符串以使offset適合妈嘹,不存在的鍵被視為空字符串柳琢,因此此命令將確保它包含足夠大的字符串以能夠在偏移量處設(shè)置值。
    注意润脸,offset可以設(shè)置的最大值為2^29-1(536870911)柬脸,因?yàn)镽edis字符串類型最大長(zhǎng)度為512MB,如果需要增長(zhǎng)超過(guò)這個(gè)限制毙驯,可以使用多個(gè)key倒堕。
  • 返回值: Integer(整型),返回命令執(zhí)行后key持有的字符串的長(zhǎng)度爆价。

STRLEN key

  • 可用版本: v2.2.0開(kāi)始
  • 時(shí)間復(fù)雜度: O(1)
  • 解釋: 返回key持有的字符串的長(zhǎng)度垦巴,如果value不是字符串類型,則返回錯(cuò)誤
  • 返回值: Integer(整型)铭段,返回key對(duì)應(yīng)字符串的長(zhǎng)度骤宣,如果key不存在則返回0

SUBSTR key start end

  • 可用版本: v1.0.0開(kāi)始,從Redis v2.0.0開(kāi)始此命令被視為廢棄
  • 時(shí)間復(fù)雜度: O(N)稠项,其中N為返回的字符串的長(zhǎng)度
  • 解釋: 返回key持有的字符串值的子串涯雅,子串由startend決定組成的閉區(qū)間決定,負(fù)數(shù)的偏移量表示從字符串尾部開(kāi)始計(jì)算偏移量展运,如-1表示字符串最后一個(gè)字符活逆。
  • 返回值: Bulk String(批量字符串),返回子串

參考資料

Redis String

原文連接

Redis系列第二篇之String

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拗胜,一起剝皮案震驚了整個(gè)濱河市蔗候,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌埂软,老刑警劉巖锈遥,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異勘畔,居然都是意外死亡所灸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門炫七,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)爬立,“玉大人,你說(shuō)我怎么就攤上這事万哪∠姥保” “怎么了抡秆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吟策。 經(jīng)常有香客問(wèn)我笆呆,道長(zhǎng)嚎杨,這世上最難降的妖魔是什么财边? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任崇猫,我火速辦了婚禮,結(jié)果婚禮上效床,老公的妹妹穿的比我還像新娘睹酌。我一直安慰自己,他們只是感情好剩檀,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布憋沿。 她就那樣靜靜地躺著,像睡著了一般沪猴。 火紅的嫁衣襯著肌膚如雪辐啄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天运嗜,我揣著相機(jī)與錄音壶辜,去河邊找鬼。 笑死担租,一個(gè)胖子當(dāng)著我的面吹牛砸民,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奋救,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼岭参,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了尝艘?” 一聲冷哼從身側(cè)響起演侯,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎背亥,沒(méi)想到半個(gè)月后秒际,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狡汉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年娄徊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盾戴。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寄锐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锐峭,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布可婶,位于F島的核電站沿癞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏矛渴。R本人自食惡果不足惜椎扬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望具温。 院中可真熱鬧蚕涤,春花似錦、人聲如沸铣猩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)达皿。三九已至天吓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峦椰,已是汗流浹背龄寞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留汤功,地道東北人物邑。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像滔金,于是被迫代替她去往敵國(guó)和親色解。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容