redis基本數(shù)據(jù)類型

redis基本數(shù)據(jù)類型

1锣尉、String

在Redis中抖锥,所有的 key 都是字符串(java中操作的key會被序列化,在redis中都是字符串形式)贰逾。不同的key對應(yīng)的value則具備不同的數(shù)據(jù)結(jié)構(gòu),所說的五種不同的數(shù)據(jù)類型错洁,指的是value的數(shù)據(jù)類型不同秉宿。

Redis 中的字符串是動態(tài)字符串,內(nèi)部是可以修改的屯碴,像 Java 中的 StringBuffer描睦,它采用分配冗余空間
的方式來減少內(nèi)存的頻繁分配。在 Redis 內(nèi)部結(jié)構(gòu)中导而,一般實(shí)際分配的內(nèi)存會大于需要的內(nèi)存忱叭,當(dāng)字符
串小于 1M 的時候,擴(kuò)容都是在現(xiàn)有的空間基礎(chǔ)上加倍今艺,擴(kuò)容每次擴(kuò) 1M 空間韵丑,最大 512M。

Redis 字符串常用指令:

命令 描述 示例
set 設(shè)置key對應(yīng)的value的值 set key value
append key 已存在虚缎,在對應(yīng)的value后追加值撵彻,否則就創(chuàng)建新的鍵值對 append key value
decr 可以實(shí)現(xiàn)對value的減 1 操作(前提是 value 是一個數(shù)字),如果value不是數(shù)字,會報錯,如果value 不存在,則會給一個默認(rèn)的值為0,在默認(rèn)值的基礎(chǔ)上減1 decr key
decrby 和 decr 類似,但是可以自己設(shè)置步長实牡,該命令第二個參數(shù)就是步長(increment) decrby key increment
get 獲取key對應(yīng)的value的值 get key
getrange 用來返回key對應(yīng)的value的子串千康,類似于java里邊的 substring。這個命令第二個和第三個參數(shù)就是截取的起始和終止位置铲掐,其中,下標(biāo)從0開始計數(shù)值桩,-1 表示最后一個字符串摆霉,-2 表示倒數(shù)第二個字符串,以此類推... getrange key start end
getset 獲取并更新某一個 key, 會先返回key對應(yīng)的value奔坟,然后更新key對應(yīng)的value為新set的值 getset key value
incr 給某一個 key 的 value 自增 (自增1) incr key
incrby 給某一個 key 的 value 自增携栋,同時還可以設(shè)置步長(increment) incrby key increment
incrbyfloat 和 incrby 類似,但是自增的步長可以設(shè)置為浮點(diǎn)數(shù) incrbyfloat key 0.5
mget咳秉、mset 批量獲取和批量存儲 mget key1 key2 key3
mset key1 value1 key2 value2
ttl 查看 key 的有效期 (-1永不過期) ttl key
setex 在給 key 設(shè)置 value 的同時婉支,還設(shè)置過期時間(單位:s) setex key second value
psetex 和 setex 類似 (單位:ms) psetex key milliseconds value
setnx 默認(rèn)情況下, set 命令會覆蓋已經(jīng)存在的 key澜建,setnx 則不會 (已存在的不會進(jìn)行修改向挖,且返回0,不存在的設(shè)置成功炕舵,返回1) setnx key value
msetnx 批量設(shè)置(有一個key存在何之,就都失敗,返回0) msetnx key1 value1 key2 value2
setrange 覆蓋一個已經(jīng)存在的 key 的value (offset:偏移量咽筋,起始下標(biāo)溶推,從0開始) setrange key offset value
strlen 查看字符串長度 strlen key

1.2 BIT 命令

在Redis中,字符串都是以二進(jìn)制的方式存儲的。例如:

set k1 a, a對應(yīng)ASCII碼是97 蒜危,97轉(zhuǎn)為二進(jìn)制是 01100001虱痕, BIT相關(guān)的命令就是對二進(jìn)制進(jìn)行操作的。

命令 描述 示例
getbit key 對應(yīng)的 value 在 offset 處的 bit 值 getbit key offset
setbit 修改 key 對應(yīng)的 value 在 offset 處的 bit 值 setbit key offset value
bitcount 統(tǒng)計二進(jìn)制數(shù)據(jù)中 1 的個數(shù) bitcount key [start end]
實(shí)例: a對應(yīng)的是 01100001辐赞, b對應(yīng)的是 01100010
127.0.0.1:6379> set k1 a
OK
127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> getbit k1 0
(integer) 0
127.0.0.1:6379> getbit k1 1
(integer) 1
127.0.0.1:6379> getbit k1 2
(integer) 1
127.0.0.1:6379> getbit k1 3
(integer) 0
127.0.0.1:6379> getbit k1 4
(integer) 0
127.0.0.1:6379> getbit k1 5
(integer) 0
127.0.0.1:6379> getbit k1 6
(integer) 0
127.0.0.1:6379> getbit k1 7
(integer) 1
127.0.0.1:6379> setbit k1 6 1
(integer) 0
127.0.0.1:6379> setbit k1 7 0
(integer) 1
127.0.0.1:6379> get k1
"b"
127.0.0.1:6379> bitcount k1
(integer) 3
127.0.0.1:6379> bitcount k1 0 3
(integer) 3
127.0.0.1:6379> 

bit的一個運(yùn)用:統(tǒng)計個數(shù)部翘。

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

序號 命令 描述
1 SET key value 設(shè)置指定 key 的值
2 GET key 獲取指定 key 的值。
3 GETRANGE key start end 返回 key 中字符串值的子字符
4 GETSET key value 將給定 key 的值設(shè)為 value 占拍,并返回 key 的舊值(old value)略就。
5 GETBIT key offset 對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)晃酒。
6 MGET key1 [key2..] 獲取所有(一個或多個)給定 key 的值表牢。
7 SETBIT key offset value 對 key 所儲存的字符串值,設(shè)置或清除指定偏移量上的位(bit)贝次。
8 SETEX key seconds value 將值 value 關(guān)聯(lián)到 key 崔兴,并將 key 的過期時間設(shè)為 seconds (以秒為單位)。
9 SETNX key value 只有在 key 不存在時設(shè)置 key 的值蛔翅。
10 SETRANGE key offset value 用 value 參數(shù)覆寫給定 key 所儲存的字符串值敲茄,從偏移量 offset 開始。
11 STRLEN key 返回 key 所儲存的字符串值的長度山析。
12 MSET key value [key value ...] 同時設(shè)置一個或多個 key-value 對堰燎。
13 MSETNX key value [key value ...] 同時設(shè)置一個或多個 key-value 對,當(dāng)且僅當(dāng)所有給定 key 都不存在笋轨。
14 PSETEX key milliseconds value 這個命令和 SETEX 命令相似秆剪,但它以毫秒為單位設(shè)置 key 的生存時間,而不是像 SETEX 命令那樣爵政,以秒為單位仅讽。
15 INCR key 將 key 中儲存的數(shù)字值增一。
16 INCRBY key increment 將 key 所儲存的值加上給定的增量值(increment) 钾挟。
17 INCRBYFLOAT key increment 將 key 所儲存的值加上給定的浮點(diǎn)增量值(increment) 洁灵。
18 DECR key 將 key 中儲存的數(shù)字值減一。
19 DECRBY key decrement key 所儲存的值減去給定的減量值(decrement) 掺出。
20 APPEND key value 如果 key 已經(jīng)存在并且是一個字符串徽千, APPEND 命令將 value 追加到 key 原來的值的末尾。

2蛛砰、Hash

在hash結(jié)構(gòu)中罐栈,key是一個字符串,value則是一個 key/value 的鍵值對泥畅。

Redis hash 命令

命令 描述 示例
hset 添加值 hset key field value [field value ...]
eg: hset k1 name lucky
hget 獲取值 hget key field
eg:hget k1 name
hmset 批量設(shè)置 hmset key field value [field value ...]
hmget 批量獲取 hmget key field [field ...]
hdel 刪除一個指定的 field hdel key field [field ...]
hsetnx 默認(rèn)情況下荠诬,如果 key 和 field 相同琅翻,會覆蓋掉已有的 value,hsetnx 則不會 hsetnx key field value
hvals 獲取所有的 value hvals key
hkeys 獲取所有的 key hkeys key
hgetall 同時獲取所有的 key 和 value hgetall key
hexists 返回 field 是否存在(存在返回1柑贞,不存在返回0) hexists key field
hincrby 給指定的 value 自增 hincrby key field increment
hincrbyfloat 可以自增一個浮點(diǎn)數(shù) hincrbyfloat key field increment
hlen 返回 某一個 key 中 value 的數(shù)量 hlen key
hstrlen 返回某一個 key 中的某一個 field 的字符串長度 hstrlen key field

下表列出了 redis hash 基本的相關(guān)命令:

序號 命令 描述
1 HDEL key field2 [field2] 刪除一個或多個哈希表字段
2 HEXISTS key field 查看哈希表 key 中方椎,指定的字段是否存在。
3 HGET key field 獲取存儲在哈希表中指定字段的值/td>
4 HGETALL key 獲取在哈希表中指定 key 的所有字段和值
5 HINCRBY key field increment 為哈希表 key 中的指定字段的整數(shù)值加上增量 increment 钧嘶。
6 HINCRBYFLOAT key field increment 為哈希表 key 中的指定字段的浮點(diǎn)數(shù)值加上增量 increment 棠众。
7 HKEYS key 獲取所有哈希表中的字段
8 HLEN key 獲取哈希表中字段的數(shù)量
9 HMGET key field1 [field2] 獲取所有給定字段的值
10 HMSET key field1 value1 [field2 value2 ] 同時將多個 field-value (域-值)對設(shè)置到哈希表 key 中。
11 HSET key field value 將哈希表 key 中的字段 field 的值設(shè)為 value 有决。
12 HSETNX key field value 只有在字段 field 不存在時闸拿,設(shè)置哈希表字段的值。
13 HVALS key 獲取哈希表中所有值
14 HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的鍵值對书幕。

3新荤、List

Redis 列表命令

命令 描述 示例
lpush 將value值從左往右依次插入到列表頭部。如果 key 不存在台汇,那么在進(jìn)行 push 操作前會創(chuàng)建一個空列表苛骨。 lpush key element [element ...]
lrange 返回列表指定區(qū)間內(nèi)的元素。 lrange key start stop
rpush 功能類似于lpush苟呐,從右往左依次插入到列表頭部痒芝。 rpush key element [element ...]
rpop 移除并返回列表的尾元素。 rpop key
lpop 移除并返回列表的頭元素牵素。 lpop key
lindex 返回列表中严衬,下標(biāo)為 index 的元素。 lindex key index
ltrim 可以對一個列表進(jìn)行修剪 ltrim key start stop
blpop 阻塞式的彈出笆呆,相當(dāng)于 lpop 的阻塞版 blpop key [key ...] timeout

下表列出了列表相關(guān)的基本命令:

序號 命令 描述
1 BLPOP key1 [key2] timeout 移出并獲取列表的第一個元素瞳步, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。
2 BRPOP key1 [key2] timeout 移出并獲取列表的最后一個元素腰奋, 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。
3 BRPOPLPUSH source destination timeout 從列表中彈出一個值抱怔,將彈出的元素插入到另外一個列表中并返回它劣坊; 如果列表沒有元素會阻塞列表直到等待超時或發(fā)現(xiàn)可彈出元素為止。
4 LINDEX key index 通過索引獲取列表中的元素
5 LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素
6 LLEN key 獲取列表長度
7 LPOP key 移出并獲取列表的第一個元素
8 LPUSH key value1 [value2] 將一個或多個值插入到列表頭部
9 LPUSHX key value 將一個或多個值插入到已存在的列表頭部
10 LRANGE key start stop 獲取列表指定范圍內(nèi)的元素
11 LREM key count value 移除列表元素
12 LSET key index value 通過索引設(shè)置列表元素的值
13 LTRIM key start stop 對一個列表進(jìn)行修剪(trim)屈留,就是說局冰,讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除灌危。
14 RPOP key 移除并獲取列表最后一個元素
15 RPOPLPUSH source destination 移除列表的最后一個元素康二,并將該元素添加到另一個列表并返回
16 RPUSH key value1 [value2] 在列表中添加一個或多個值
17 RPUSHX key value 為已存在的列表添加值

4、Set

set 集合內(nèi)的元素是不重復(fù)的勇蝙。

Redis 集合命令

命令 描述 示例
sadd 添加元素到一個 key 中 sadd key member [member ...]
smembers 獲取一個 key 下的所有元素沫勿。 smembers key
srem 移除指定的元素 srem key member [member ...]
sismemeber 返回某一個成員是否在集合中(返回0:不存在,1:存在) sismember key member
scard 返回集合的數(shù)量 scard key
srandmember 隨機(jī)返回一個元素 srandmember key [count]
spop 隨機(jī)返回并且出棧一個元素 spop key [count]
smove 把一個元素從一個集合移到另一個集合中去 smove source destination member
sdiff 返回兩個集合的差集 sdiff key [key ...]
sinter 返回兩個集合的交集 sinter key [key ...]
sdiffstore 類似于 sdiff ,不同的是产雹,計算出來的結(jié)果會保存在一個新的集合中诫惭。 sdiffstore destination key [key ...]
sinterstore 類似于 sinter,只是將計算出來的交集保存到一個新的集合中蔓挖。 sinterstore destination key [key ...]
sunion 求并集 sunion key [key ...]
sunionstore 求并集并且將結(jié)果保存到新的集合中夕土。 sunionstore destination key [key ...]

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

序號 命令 描述
1 SADD key member1 [member2] 向集合添加一個或多個成員
2 SCARD key 獲取集合的成員數(shù)
3 SDIFF key1 [key2] 返回給定所有集合的差集
4 SDIFFSTORE destination key1 [key2] 返回給定所有集合的差集并存儲在 destination 中
5 SINTER key1 [key2] 返回給定所有集合的交集
6 SINTERSTORE destination key1 [key2] 返回給定所有集合的交集并存儲在 destination 中
7 SISMEMBER key member 判斷 member 元素是否是集合 key 的成員
8 SMEMBERS key 返回集合中的所有成員
9 SMOVE source destination member 將 member 元素從 source 集合移動到 destination 集合
10 SPOP key 移除并返回集合中的一個隨機(jī)元素
11 SRANDMEMBER key [count] 返回集合中一個或多個隨機(jī)數(shù)
12 SREM key member1 [member2] 移除集合中一個或多個成員
13 SUNION key1 [key2] 返回所有給定集合的并集
14 SUNIONSTORE destination key1 [key2] 所有給定集合的并集存儲在 destination 集合中
15 SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素

5、ZSet

有序集合

Redis 有序集合命令

命令 描述 示例
zadd 將指定的元素添加到有序集合中 zadd key score member
zscore 返回 member 的 score 值 zscore key member
zrange 返回集合中的一組元素 (WITHSCORES: 會攜帶值) zrange key start stop [withscores]
zrevrange 返回一組元素瘟判,但是是倒序 zrevrange key start stop
zcard 返回元素個數(shù) zcard key
zcount 返回 score 在某一個區(qū)間內(nèi)的元素個數(shù) zcount key min max
eg:
zcount k1 60 90 包含60,90
zcount k1 (60 (90 不包含60,90
zrangebyscore 按照 score 的范圍返回元素 zrangebyscore key min max [withscores]
zrank 返回元素排名 (從小到大) zrank key member
zrevrank 返回元素排名 (從大到小) zrevrank key member
zincrby score 自增 zincrby key increment member
zinterstore 給兩個集合求交集 ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight]
zrem 彈出一個元素 zrem key member [member ...]
zlexcount 計算有序集合中成員數(shù)量 zlexcount key min max
eg:
zlexcount k1 - + 統(tǒng)計全部
zlexcount k1 (member (member
zrangebylex 返回指定區(qū)間內(nèi)的成員 zrangebylex key min max
eg:
zrangebylex k1 - +
zrangebylex k1 (member (member

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

序號 命令 描述
1 ZADD key score1 member1 [score2 member2] 向有序集合添加一個或多個成員怨绣,或者更新已存在成員的分?jǐn)?shù)
2 ZCARD key 獲取有序集合的成員數(shù)
3 ZCOUNT key min max 計算在有序集合中指定區(qū)間分?jǐn)?shù)的成員數(shù)
4 ZINCRBY key increment member 有序集合中對指定成員的分?jǐn)?shù)加上增量 increment
5 ZINTERSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的交集并將結(jié)果集存儲在新的有序集合 key 中
6 ZLEXCOUNT key min max 在有序集合中計算指定字典區(qū)間內(nèi)成員數(shù)量
7 ZRANGE key start stop [WITHSCORES] 通過索引區(qū)間返回有序集合成指定區(qū)間內(nèi)的成員
8 ZRANGEBYLEX key min max [LIMIT offset count] 通過字典區(qū)間返回有序集合的成員
9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通過分?jǐn)?shù)返回有序集合指定區(qū)間內(nèi)的成員
10 ZRANK key member 返回有序集合中指定成員的索引
11 ZREM key member [member ...] 移除有序集合中的一個或多個成員
12 ZREMRANGEBYLEX key min max 移除有序集合中給定的字典區(qū)間的所有成員
13 ZREMRANGEBYRANK key start stop 移除有序集合中給定的排名區(qū)間的所有成員
14 ZREMRANGEBYSCORE key min max 移除有序集合中給定的分?jǐn)?shù)區(qū)間的所有成員
15 ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定區(qū)間內(nèi)的成員,通過索引拷获,分?jǐn)?shù)從高到底
16 ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分?jǐn)?shù)區(qū)間內(nèi)的成員篮撑,分?jǐn)?shù)從高到低排序
17 ZREVRANK key member 返回有序集合中指定成員的排名,有序集成員按分?jǐn)?shù)值遞減(從大到小)排序
18 ZSCORE key member 返回有序集中刀诬,成員的分?jǐn)?shù)值
19 ZUNIONSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的并集咽扇,并存儲在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成員和元素分值)

以上都是對于value的操作,下面是對key的操作陕壹。

6质欲、key

命令 描述 示例
del 刪除一個 key/value del key [key ...]
dump 序列化給定的 key dump key
exists 判斷一個 key 是否存在(存在返回1,不存在返回0) exists key
ttl 查看一個 key 的有效期(-1 永久有效糠馆, -2 已經(jīng)過期) ttl key
expire 給一個 key 設(shè)置有效期嘶伟,如果 key 在過期之前被重新 set 了,則過期時間會失效又碌。 expire key seconds
persist 移除一個 key 的過期時間 persist key
keys * 查看所有的 key keys *
keys pattern
pttl 和 ttl 一樣九昧,只不過這里返回的是毫秒 pttl key

7、說明

1毕匀、 四種數(shù)據(jù)類型(list/set/zset/hash)铸鹰,在第一次使用時,如果容器不存在皂岔,就自動創(chuàng)建一個

2蹋笼、 四種數(shù)據(jù)類型(list/set/zset/hash),如果里邊沒有元素了躁垛,那么立即刪除容器剖毯,釋放內(nèi)存。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末教馆,一起剝皮案震驚了整個濱河市逊谋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌土铺,老刑警劉巖胶滋,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件板鬓,死亡現(xiàn)場離奇詭異,居然都是意外死亡镀钓,警方通過查閱死者的電腦和手機(jī)穗熬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丁溅,“玉大人唤蔗,你說我怎么就攤上這事】呱停” “怎么了妓柜?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涯穷。 經(jīng)常有香客問我棍掐,道長,這世上最難降的妖魔是什么拷况? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任作煌,我火速辦了婚禮,結(jié)果婚禮上赚瘦,老公的妹妹穿的比我還像新娘粟誓。我一直安慰自己,他們只是感情好起意,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布鹰服。 她就那樣靜靜地躺著,像睡著了一般揽咕。 火紅的嫁衣襯著肌膚如雪悲酷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天亲善,我揣著相機(jī)與錄音设易,去河邊找鬼。 笑死蛹头,一個胖子當(dāng)著我的面吹牛亡嫌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掘而,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼于购!你這毒婦竟也來了袍睡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤肋僧,失蹤者是張志新(化名)和其女友劉穎斑胜,沒想到半個月后控淡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡止潘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年掺炭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凭戴。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡涧狮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出么夫,到底是詐尸還是另有隱情者冤,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布档痪,位于F島的核電站涉枫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腐螟。R本人自食惡果不足惜愿汰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乐纸。 院中可真熱鬧衬廷,春花似錦、人聲如沸锯仪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庶喜。三九已至小腊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間久窟,已是汗流浹背秩冈。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斥扛,地道東北人入问。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像稀颁,于是被迫代替她去往敵國和親芬失。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359