redis-03-數(shù)據(jù)類型

聲明

本篇文章并沒任何的技術(shù)含量缠局。
只是本人的命令練習(xí)記錄则奥,以備以后查看。

[TOC]

1 redis 基礎(chǔ)命令

在看基本數(shù)據(jù)類型之前狭园,先來看看redis的key相關(guān)的知識點(diǎn)读处。

1.1 keys

127.0.0.1:6379> keys *
1) "counter:__rand_int__"
2) "mylist"
3) "key:__rand_int__"
4) "k1"

1.2 exists

判斷某個(gè)key是否存在

127.0.0.1:6379> EXISTS k1
(integer) 1 # 1表示存在
127.0.0.1:6379> EXISTS k11
(integer) 0 # 0表示不存在

1.3 move

指定鍵,移動數(shù)據(jù)至指定的DB唱矛。

move key db-index
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> MOVE k1 6 # 將k1移動至6號庫
(integer) 1
127.0.0.1:6379> keys *
1) "k2"
127.0.0.1:6379> SELECT 6
OK
127.0.0.1:6379[6]> keys *
1) "k1"

1.4 expire

為給定 key 設(shè)置生存時(shí)間罚舱,當(dāng) key 過期時(shí)(生存時(shí)間為 0 ),它會被自動刪除绎谦。

expire key seconds
127.0.0.1:6379[6]> set k1 v1
OK
127.0.0.1:6379[6]> set k2 v2
OK
127.0.0.1:6379[6]> EXPIRE k1 10 # 10秒之后,k1被刪除
(integer) 1

1.5 ttl

返回key剩余的過期時(shí)間管闷。

  • 在Redis 2.6和之前版本
  • 如果key不存在或者已過期時(shí)返回-1
  • 從Redis2.8開始
  • 如果key不存在或者已過期窃肠,返回 -2
  • 如果key沒有設(shè)置過期時(shí)間(永久有效)包个,返回 -1

1.6 type

返回key所存儲的value的數(shù)據(jù)結(jié)構(gòu)類型冤留,比如string, list, set, zsethash等不同的類型碧囊。

2 redis-五大數(shù)據(jù)類型-簡介

  • string

string具有其他語言中的字符串的特性。string類型是Redis最基本的數(shù)據(jù)類型纤怒,一個(gè)redis中字符串value最多可以是512M

string類型是二進(jìn)制安全的糯而。意思是redis的string可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對象 肪跋。

  • list

list是一個(gè)字符串列表歧蒋,按照插入順序排序土砂。

  • hash

我的第一映像就是Java里的Map<String,Object>坎拐。
很相似罗侯,但不盡相同饥瓷。

  • set

和Java的Set<String>類似械念,是一個(gè)無序的字符串集合缔恳。

  • zset

和set的不同之處是壳嚎,zset的每個(gè)元素都會關(guān)聯(lián)一個(gè)double類型的score规求。

3 string

3.1 set/get/append/strlen/del

127.0.0.1:6379[6]> FLUSHALL
OK
127.0.0.1:6379[6]> set k1 a
OK
127.0.0.1:6379[6]> get k1 # 為k1設(shè)置值為"a"
"a"
127.0.0.1:6379[6]> APPEND k1 bcd # 為k1追加"bcd"
(integer) 4
127.0.0.1:6379[6]> get k1
"abcd"
127.0.0.1:6379[6]> STRLEN k1 # 查看長度
(integer) 4
127.0.0.1:6379[6]> DEL k1
(integer) 1
127.0.0.1:6379[6]> keys *
(empty list or set)

3.2 incr/incrby/decr/decrby

127.0.0.1:6379[6]> FLUSHALL
OK
127.0.0.1:6379[6]> set k1 1
OK
127.0.0.1:6379[6]> get k1
"1"
127.0.0.1:6379[6]> INCR k1
(integer) 2
127.0.0.1:6379[6]> INCR k1
(integer) 3
127.0.0.1:6379[6]> INCRBY k1 5 # 指定遞增的步徑長度為5
(integer) 8
127.0.0.1:6379[6]> INCRBY k1 5 # 指定遞減的步徑長度為3
(integer) 13
127.0.0.1:6379[6]> DECR k1
(integer) 12
127.0.0.1:6379[6]> DECRBY k1 3
(integer) 9
127.0.0.1:6379[6]>

3.3 getrange/setrange

  • getrange key start end
  • 用來取子串的命令
  • start和end的取值和Python中的切片類似
  • setrange key offset value
  • 從指定的offset處開始稿壁,覆蓋value的長度
  • 如果offset>strlen(key),則在key對應(yīng)的值后補(bǔ)offset-strlen(key)個(gè)后繼續(xù)追加key
  • 不存在的key被認(rèn)為是空字符串
  • offset最大可以是2^29-1(536870911)
127.0.0.1:6379[6]> set k "abcdefgh"
OK
127.0.0.1:6379[6]> SETRANGE k 1 "x"
(integer) 8
127.0.0.1:6379[6]> get k
"axcdefgh"
127.0.0.1:6379[6]> SETRANGE k 1 "yy"
(integer) 8
127.0.0.1:6379[6]> get k
"ayydefgh"
127.0.0.1:6379[6]> SETRANGE k 1 "yyyyyyyyyy"
(integer) 11
127.0.0.1:6379[6]> get k
"ayyyyyyyyyy"
127.0.0.1:6379[6]> setrange k 15 "123x"
(integer) 19
127.0.0.1:6379[6]> get k
"ayyyyyyyyyy\x00\x00\x00\x00123x"
# 此處的k88本來不存在,視為空字符串處理
127.0.0.1:6379[6]> SETRANGE k88 3 "haha" 
(integer) 7
127.0.0.1:6379[6]> get k88
"\x00\x00\x00haha" # 視為空字符串處理所以前補(bǔ)3個(gè)零
127.0.0.1:6379[6]>

3.4 setex/getnx

  • setex(set with expire)
  • set的同時(shí)实束,給key指定一個(gè)過期時(shí)間
  • setnx(set if not exists)
  • 如果key不存在,則set值
  • return 1 如果key被設(shè)置成功
  • return 0 如果key沒有被設(shè)置成功
# 設(shè)置值的同時(shí)指定8秒后過期
127.0.0.1:6379[6]> SETEX k88 10 "haha"
OK
127.0.0.1:6379> SETNX k1 111 # 如果k1不存在則設(shè)置k1為111
(integer) 1
127.0.0.1:6379> get k1
"111"
127.0.0.1:6379> SETNX k1 222 # k1已經(jīng)存在,故不生效
(integer) 0
127.0.0.1:6379> get k1
"111"

3.5 mset/mget/msetnx

  • mset k1 v1 [k2,v2 ...]
  • mget
  • msetnx k1 v1 [k2,v2 ...]
  • 只要有一個(gè)key已經(jīng)存在奥秆,就會失敗
  • return 1,所有的key都被設(shè)置成功
  • return 0咸灿,所有的key都沒有被設(shè)置(至少一個(gè)key已經(jīng)存在)
127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> MGET k1 k2 k3
1) "v1"
2) "v2"
3) "v3"

4 list

4.1 lpush/rpush/lrange

127.0.0.1:6379> LPUSH l1 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> LRANGE l1 0 2
1) "6"
2) "5"
3) "4"
127.0.0.1:6379> LRANGE l1 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> LSET l1 2 "abc"
OK
127.0.0.1:6379> LRANGE l1 0 -1
1) "6"
2) "5"
3) "abc"
4) "3"
5) "2"
6) "1"
127.0.0.1:6379> 

4.2 lpop/rpop/lindex/llen

  • llen
  • 如果 key 不存在构订,那么就被看作是空list,并且返回長度為 0
  • 存儲在 key 里的值不是一個(gè)list的話避矢,會返回error
127.0.0.1:6379> LPUSH l1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LPOP l1
"5"
127.0.0.1:6379> RPOP l1
"1"
127.0.0.1:6379> LRANGE l1 0 -1
1) "4"
2) "3"
3) "2"

127.0.0.1:6379> RPUSH l2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LPOP l2
"1"
127.0.0.1:6379> RPOP l2
"5"
127.0.0.1:6379> LRANGE l2 0 -1
1) "2"
2) "3"
3) "4"

127.0.0.1:6379> RPUSH l3 1 2 3 4
(integer) 4
127.0.0.1:6379> LINDEX l3 0
"1"
127.0.0.1:6379> LINDEX l3 2
"3"

127.0.0.1:6379> LLEN l3
(integer) 4

4.3 lrem/ltrim

  • lrem key count value
  • count>0 : 從頭到尾移除count個(gè)值為value的元素
  • count<0 : 從尾到頭移除count個(gè)值為value的元素
  • count==0: 刪除所有值為value的元素
  • ltrim key start end
127.0.0.1:6379> RPUSH l1 a b c a c d e a d a
(integer) 10
127.0.0.1:6379> LRANGE l1 0 -1
 1) "a"
 2) "b"
 3) "c"
 4) "a"
 5) "c"
 6) "d"
 7) "e"
 8) "a"
 9) "d"
10) "a"
# 從頭到尾刪除兩個(gè)值為a的元素
127.0.0.1:6379> LREM l1 2 a
(integer) 2
127.0.0.1:6379> LRANGE l1 0 -1
1) "b"
2) "c"
3) "c"
4) "d"
5) "e"
6) "a"
7) "d"
8) "a"

# 從尾到頭刪除一個(gè)值為d的元素
127.0.0.1:6379> LREM l1 -1 d
(integer) 1
127.0.0.1:6379> LRANGE l1 0 -1
1) "b"
2) "c"
3) "c"
4) "d"
5) "e"
6) "a"
7) "a"

# 刪除所有值為c的元素
127.0.0.1:6379> LREM l1 0 c
(integer) 2
127.0.0.1:6379> LRANGE l1 0 -1
1) "b"
2) "d"
3) "e"
4) "a"
5) "a"


127.0.0.1:6379> RPUSH l2 a b c d a c e
(integer) 7
# 只保留索引為2-4的元素
127.0.0.1:6379> LTRIM l2 2 4
OK
127.0.0.1:6379> LRANGE l2 0 -1
1) "c"
2) "d"
3) "a"
127.0.0.1:6379>  

4.4 rpoplpush

127.0.0.1:6379> RPUSH l1 1 2 3
(integer) 3
127.0.0.1:6379> RPUSH l2 a b c
(integer) 3
127.0.0.1:6379> RPOPLPUSH l1 l2
"3"
127.0.0.1:6379> LRANGE l1 0 -1
1) "1"
2) "2"
127.0.0.1:6379> LRANGE l2 0 -1
1) "3"
2) "a"
3) "b"
4) "c"

4.5 linsert

127.0.0.1:6379> RPUSH l1 1 2 3
(integer) 3
# 給l1中的元素3前面插入元素
127.0.0.1:6379> LINSERT l1 before 3 "newVal"
(integer) 4
127.0.0.1:6379> LRANGE l1 0 -1
1) "1"
2) "2"
3) "newVal"
4) "3"
# 給l1中的元素"newVal"后面插入元素
127.0.0.1:6379> LINSERT l1 after "newVal" "anotherNewVal"
(integer) 5
127.0.0.1:6379> LRANGE l1 0 -1
1) "1"
2) "2"
3) "newVal"
4) "anotherNewVal"
5) "3"
# 在值為"ha"的元素后面插入
127.0.0.1:6379> LINSERT l1 after "ha" "o..."
# "ha"不存在悼瘾,返回-1
(integer) -1
127.0.0.1:6379> LRANGE l1 0 -1
1) "1"
2) "2"
3) "newVal"
4) "anotherNewVal"
5) "3"
127.0.0.1:6379>  

5 set

5.1 sadd/smembers/sismember/srem/scard

127.0.0.1:6379> SADD s1 1 2 3 1 2 3 1
(integer) 3
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SISMEMBER s1 2 # contains
(integer) 1
127.0.0.1:6379> SISMEMBER s1 111
(integer) 0

127.0.0.1:6379> SCARD s1 # count
(integer) 3
127.0.0.1:6379> SREM s1 2 # del
(integer) 1
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "3"

5.2 srandmember/spop

127.0.0.1:6379> SADD s2 0 1 2 3 4 5 6 7 8 9
(integer) 10
# srandmember并不會刪除元素
127.0.0.1:6379> SRANDMEMBER s2 3 # 隨機(jī)獲取三個(gè)成員
1) "8"
2) "7"
3) "6"
127.0.0.1:6379> SRANDMEMBER s2 3
1) "8"
2) "2"
3) "4"
127.0.0.1:6379> SRANDMEMBER s2 3
1) "2"
2) "7"
3) "4"

# spop會刪除元素
127.0.0.1:6379> spop s2 2
1) "2"
2) "7"
127.0.0.1:6379> spop s2 2
1) "5"
2) "9"
127.0.0.1:6379> spop s2 2
1) "8"
2) "4"
127.0.0.1:6379> SMEMBERS s2
1) "0"
2) "1"
3) "3"
4) "6"

5.3 smove

127.0.0.1:6379> sadd s1 1 2 3
(integer) 3
127.0.0.1:6379> SADD s2 a b c
(integer) 3
# 將s1中的值為2的元素移動到集合s2中
127.0.0.1:6379> SMOVE s1 s2 2
(integer) 1 # return 1 ==> 成功
127.0.0.1:6379> SMEMBERS s1
1) "1"
2) "3"
127.0.0.1:6379> SMEMBERS s2
1) "2"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> SMOVE s1 s2 -1
(integer) 0 # return 0 ==> 移動失敗
127.0.0.1:6379>  

5.4 數(shù)學(xué)集合操作

127.0.0.1:6379> SADD s1 1 2 3
(integer) 3
127.0.0.1:6379> SADD s2 2 3 a b
(integer) 4
127.0.0.1:6379> SINTER s2 s1 # 交集
1) "2"
2) "3"
127.0.0.1:6379> SUNION s1 s2 # 并集
1) "3"
2) "2"
3) "b"
4) "1"
5) "a"
127.0.0.1:6379> SDIFF s1 s2 # 差集
1) "1"
127.0.0.1:6379> SDIFF s2 s1 # 差集
1) "a"
2) "b"
127.0.0.1:6379>  

6 hash

6.1 hget/hset/hmset/hmget/hgetall

127.0.0.1:6379> HSET user id 1
(integer) 1
127.0.0.1:6379> HSET user name "tom"
(integer) 1
127.0.0.1:6379> HGET user id
"1"
127.0.0.1:6379> HGET user name
"tom"
# set user.name="apache",user.age=24,user.sex="male"
127.0.0.1:6379> HMSET user name "apache" age 24 sex "male"
OK
127.0.0.1:6379> HGET user age
"24"

# get user.id,user.name,user.age,user.sex
127.0.0.1:6379> HMGET user id name age sex 
1) "1"
2) "apache"
3) "24"
4) "male"

127.0.0.1:6379> HGETALL user
1) "id"
2) "1"
3) "name"
4) "apache"
5) "age"
6) "24"
7) "sex"
8) "male"
127.0.0.1:6379>  

6.2 hlen/hdel/hkeys/hvals

127.0.0.1:6379> HDEL user age sex # del user.age ,del user.sex
(integer) 2
127.0.0.1:6379> HGETALL user
1) "id"
2) "1"
3) "name"
4) "apache"
127.0.0.1:6379> HLEN user
(integer) 2
# user.keySet()
127.0.0.1:6379> HKEYS user
1) "id"
2) "name"
# user.values()
127.0.0.1:6379> HVALS user
1) "1"
2) "apache"
127.0.0.1:6379>  

6.3 hincrby/hIncrByFloat

127.0.0.1:6379> HSET u age 1
(integer) 1
127.0.0.1:6379> HINCRBY u age 1 # u.age++
(integer) 2
127.0.0.1:6379> HINCRBY u age 1 # u.age++
(integer) 3
127.0.0.1:6379> HINCRBY u age 1 # u.age++
(integer) 4
127.0.0.1:6379> HGET u age
"4"
127.0.0.1:6379> HINCRBY u age 10 # u.age += 10
(integer) 14
127.0.0.1:6379> HGET u age
"14"
127.0.0.1:6379> HINCRBY u age -2 # u.age -= 2
(integer) 12

127.0.0.1:6379> HINCRBYFLOAT u age 1.2 # u.age += 1.2
"13.2"
127.0.0.1:6379> HINCRBYFLOAT u age 1.5 # u.age += 1.5
"14.7"
127.0.0.1:6379> HINCRBYFLOAT u age -1.5 # u.age -= 1.5
"13.2"
127.0.0.1:6379>  

6.4 hsetnx

127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> HSET user id 1
(integer) 1
127.0.0.1:6379> HSETNX user name "tom" # 不存在,則設(shè)置值
(integer) 1
127.0.0.1:6379> HSETNX user name "tom" # 存在,則無效
(integer) 0
127.0.0.1:6379>  

7 zset

7.1 zadd/zrange

127.0.0.1:6379> ZADD z1 1 v1 2 v2 3 v3
(integer) 3
127.0.0.1:6379> ZRANGE z1 0 -1
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> ZRANGE z1 0 -1 withscores
1) "v1"
2) "1"
3) "v2"
4) "2"
5) "v3"
6) "3"
127.0.0.1:6379>  

7.2 zRangeByScore

# 1 <= score <= 2
127.0.0.1:6379> ZRANGEBYSCORE z1 1 2
1) "v1"
2) "v2"
# 1 <= score <= 2 同時(shí)獲取score
127.0.0.1:6379> ZRANGEBYSCORE z1 1 2 withscores
1) "v1"
2) "1"
3) "v2"
4) "2"
# 1 <= score < 2 
127.0.0.1:6379> ZRANGEBYSCORE z1 1 (2
1) "v1"
# 1 <= score < 2 同時(shí)獲取score
127.0.0.1:6379> ZRANGEBYSCORE z1 1 (2 withscores
1) "v1"
2) "1"

# 再次添加元素v4,v5
127.0.0.1:6379> ZADD z1 4 v4 5 v5
(integer) 2
127.0.0.1:6379> ZRANGE z1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
# 2 <= score <= 4
127.0.0.1:6379> ZRANGEBYSCORE z1 2 4
1) "v2"
2) "v3"
3) "v4"

# 此處的limit和MySQL類似
127.0.0.1:6379> ZRANGEBYSCORE z1 2 4 limit 2 1
1) "v4"
127.0.0.1:6379> ZRANGEBYSCORE z1 2 4 limit 0 1
1) "v2"
127.0.0.1:6379>  

7.3 zrem/zcard/zcount

127.0.0.1:6379> ZADD z2 1 v1 2 v2 3 v3
(integer) 3
127.0.0.1:6379> ZCARD z2 # size of z2
(integer) 3
127.0.0.1:6379> ZREM z2 v2 v3 # del v2,v3
(integer) 2
127.0.0.1:6379> ZRANGE z2 0 -1
1) "v1"

# 1 <= score <=5 的元素的個(gè)數(shù)
127.0.0.1:6379> ZCOUNT z2 1 5
(integer) 1

# 獲取v1的score
127.0.0.1:6379> ZSCORE z2 v1
"1"
127.0.0.1:6379>  

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市审胸,隨后出現(xiàn)的幾起案子亥宿,更是在濱河造成了極大的恐慌,老刑警劉巖砂沛,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烫扼,死亡現(xiàn)場離奇詭異,居然都是意外死亡碍庵,警方通過查閱死者的電腦和手機(jī)映企,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怎抛,“玉大人卑吭,你說我怎么就攤上這事÷砭” “怎么了豆赏?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長富稻。 經(jīng)常有香客問我掷邦,道長,這世上最難降的妖魔是什么椭赋? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任抚岗,我火速辦了婚禮,結(jié)果婚禮上哪怔,老公的妹妹穿的比我還像新娘宣蔚。我一直安慰自己向抢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布胚委。 她就那樣靜靜地躺著挟鸠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亩冬。 梳的紋絲不亂的頭發(fā)上艘希,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機(jī)與錄音硅急,去河邊找鬼覆享。 笑死,一個(gè)胖子當(dāng)著我的面吹牛营袜,可吹牛的內(nèi)容都是我干的撒顿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荚板,長吁一口氣:“原來是場噩夢啊……” “哼核蘸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啸驯,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祟峦,沒想到半個(gè)月后罚斗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宅楞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年针姿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厌衙。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡距淫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出婶希,到底是詐尸還是另有隱情榕暇,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布喻杈,位于F島的核電站彤枢,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏筒饰。R本人自食惡果不足惜缴啡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓷们。 院中可真熱鬧业栅,春花似錦秒咐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至娘汞,卻和暖如春歹茶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背你弦。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工惊豺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人禽作。 一個(gè)月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓尸昧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旷偿。 傳聞我的和親對象是個(gè)殘疾皇子烹俗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

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