Redis入門教程

redis基礎(chǔ)知識匯總.png

1椒舵、Redis簡介

  • Redis是一個開源的使用ANSI C語言編寫、遵守BSD協(xié)議磨澡、支持網(wǎng)絡(luò)碗啄、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫稳摄,并提供多種語言的API稚字。


  • 它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹担╲alue)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型秩命。

  • Redis支持?jǐn)?shù)據(jù)的持久化尉共,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中褒傅,重啟的時(shí)候可以再次加載進(jìn)行使用弃锐。

  • Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時(shí)還提供list殿托,set霹菊,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。

  • Redis支持?jǐn)?shù)據(jù)的備份旋廷,即master-slave模式的數(shù)據(jù)備份鸠按。

2、Redis常見的業(yè)務(wù)場景

  • 定時(shí)器饶碘、計(jì)數(shù)器目尖。
  • 發(fā)布、訂閱消息系統(tǒng)扎运。
  • 模擬類似于HttpSession這種需要設(shè)定過期時(shí)間的功能瑟曲。
  • 取最新N個數(shù)據(jù)的操作,如:可以將最新的10條評論的ID放在Redis的List集合里面豪治。
  • 內(nèi)存存儲和持久化:redis支持異步將內(nèi)存中的數(shù)據(jù)寫到硬盤上洞拨,同時(shí)不影響繼續(xù)服務(wù)。

3负拟、Redis 優(yōu)勢

  • 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 烦衣。
  • 豐富的數(shù)據(jù)類型 – Redis支持二進(jìn)制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。
  • 原子 – Redis的所有操作都是原子性的掩浙,同時(shí)Redis還支持對幾個操作全并后的原子性執(zhí)行花吟。
  • 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。

4厨姚、Redis與其他key-value存儲有什么不同示辈?

  • Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對他們的原子性操作,這是一個不同于其他數(shù)據(jù)庫的進(jìn)化路徑遣蚀。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時(shí)對程序員透明矾麻,無需進(jìn)行額外的抽象。

  • Redis運(yùn)行在內(nèi)存中但是可以持久化到磁盤芭梯,所以在對不同數(shù)據(jù)集進(jìn)行高速讀寫時(shí)需要權(quán)衡內(nèi)存险耀,因?yàn)閿?shù)據(jù)量不能大于硬件內(nèi)存。在內(nèi)存數(shù)據(jù)庫方面的另一個優(yōu)點(diǎn)是玖喘,相比在磁盤上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu)甩牺,在內(nèi)存中操作起來非常簡單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強(qiáng)的事情累奈。同時(shí)贬派,在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生的,因?yàn)樗麄儾⒉恍枰M(jìn)行隨機(jī)訪問澎媒。

下邊我們將重點(diǎn)介紹:

5搞乏、 RedisAPI的理解和使用。

  • 字符串的存取

    • 字典的存取


    • list的存取


  • set的存取


    • 1.Sorted-Set和Set的區(qū)別

      • sorted-set:每個成員都有一個分?jǐn)?shù)與之關(guān)聯(lián)戒努,成員唯一请敦,可以對應(yīng)多個分?jǐn)?shù)
      • 2.Sorted-Set中的成員在集合中的位置是有序的。
    • 存儲Sorted-Set常用命令:

      • 1.添加元素:zadd
        zadd sort 10 a 20 b 30 c #a的分?jǐn)?shù)是10、b的分?jǐn)?shù)是20侍筛、c的分?jǐn)?shù)是30
      • 2.獲得元素:zscore獲得分?jǐn)?shù)萤皂、zcard獲得成員數(shù)量
        zscore sort a #獲得a的分?jǐn)?shù)
      • 3.刪除元素:zrem、zremrangebyrank按照排名范圍刪除匣椰、zremrangebyscore按照分?jǐn)?shù)范圍刪除
        zrem sort a b #刪除成員a裆熙、b
        zremrangebyrank sort 0 4 #刪除排名0-4的成員
        zremrangebyscore sort 10 30 #刪除分?jǐn)?shù)10-30的成員
      • 4.范圍查詢:zrange
        zrange sort 0 -1 #所有成員
        zrange sort 0 -1 withscores #查詢成員及分?jǐn)?shù),從小到大
        zrevrange sort 0 -1 withscores #從大到小
      • 5.擴(kuò)展命令:
        zrangebyscore sort 0 100 withscores #顯示0-100分?jǐn)?shù)的成員
        zrangebyscore sort 0 100 withscores limit 0 2 #顯示0-100分?jǐn)?shù)的成員的前兩名
        zincrby sort 10 c #給c加上10
        zcount sort 80 100 # 顯示80-100分?jǐn)?shù)的成員個數(shù)
    • Sorted-Set使用場景:

      • 如大型在線游戲積分排行榜
      • 構(gòu)建索引數(shù)據(jù)

6禽笑、Redis keys的通用操作

  • 1:所有鍵列:keys *

  • 2:指定開頭鍵列:keys [*]?

  • 3:刪:del 鍵...

  • 4:判斷存在:exists 鍵

  • 5:重命名:rename 舊鍵名 新鍵名

  • 6:設(shè)過期時(shí)間:expire 鍵 [seconds]

  • 7:查過期時(shí)間:ttl 鍵

  • 8:鍵的值類型:type 鍵

  • 9:清空緩存:flushall

7弛车、Redis特性

  • 多數(shù)據(jù)庫

  • Redis事務(wù)

  • Redis一個實(shí)例包含多個數(shù)據(jù)庫:默認(rèn)16個 。

    客戶端默認(rèn)連接0號數(shù)據(jù)庫
    select 1 #選擇1號數(shù)據(jù)庫
    move name 1 #移動 name 到1號數(shù)據(jù)庫

  • 事務(wù):

    • 事務(wù)是用戶定義的一個數(shù)據(jù)庫操作序列蒲每,這些操作要么全做要么全不做,是一個不可分割的工作單位纷跛。

    • 事務(wù)具有四個特性:原子性(Atomicity)、一致性(Consistency)邀杏、隔離性(Isolation)和持續(xù)性(Durability)贫奠。這個四個特性也簡稱為ACID特性。
        原子性:事務(wù)是數(shù)據(jù)庫的邏輯工作單位望蜡,事務(wù)中包括的諸操作要么都做唤崭,要么都不做。
        一致性:事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)脖律。
        隔離性:一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾谢肾。即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對其他并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能互相干擾小泉。
      提交芦疏,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來的其他操作或故障不應(yīng)該對其執(zhí)行結(jié)果有任何影響微姊。

    • 為什么事務(wù)非正常結(jié)束時(shí)會影響數(shù)據(jù)庫數(shù)據(jù)的正確性酸茴,請列舉一例說明之。
        答:事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)兢交。如果數(shù)據(jù)庫系統(tǒng)運(yùn)行中發(fā)生故障薪捍,有些事務(wù)尚未完成就被迫中斷,這些未完成事務(wù)對數(shù)據(jù)庫所做的修改有一部分已寫入物理數(shù)據(jù)庫配喳,這時(shí)數(shù)據(jù)庫就處于一種不正確的狀態(tài)酪穿,或者說是不一致的狀態(tài)。

    • 例如某工廠的庫存管理系統(tǒng)中晴裹,要把數(shù)量為Q的某種零件從倉庫1移到倉庫2存放被济。則可以定義一個事務(wù)T,T包括兩個操作息拜;Q1=Q1-Q溉潭,Q2=Q2+Q净响。如果T非正常終止時(shí)只做了第一個操作少欺,則數(shù)據(jù)庫就處于不一致性狀態(tài)喳瓣,庫存量無緣無故少了Q。

    • multi:開啟事務(wù)

    • exec:提交赞别,執(zhí)行的命令被原子化執(zhí)行

    • discard:回滾

8畏陕、 Redis的持久化

  • Redis的持久化實(shí)現(xiàn)方式主要有兩種:RDB和AOF

  • 1.RDB和AOF兩種持久化機(jī)制的介紹

  • RDB持久化機(jī)制,對Redis中的數(shù)據(jù)執(zhí)行周期性的持久化仿滔。

  • AOF機(jī)制對每條寫入命令作為日志惠毁,以append-only的模式寫入一個日志文件中,在redis重啟的時(shí)候崎页,可以通過回放AOF日志中的寫入指令來重新構(gòu)建整個數(shù)據(jù)集鞠绰。

RDB和AOF的優(yōu)缺點(diǎn)

RDB持久化機(jī)制的優(yōu)點(diǎn)

  • 1、RDB會生成多個數(shù)據(jù)文件飒焦,每個數(shù)據(jù)文件都代表了某一個時(shí)刻中redis的數(shù)據(jù)蜈膨,這種多個數(shù)據(jù)文件的方式,非常適合做冷備(就是停止數(shù)據(jù)庫服務(wù)來作數(shù)據(jù)備份)牺荠,可以將這種完整的數(shù)據(jù)文件發(fā)送到一些遠(yuǎn)程的安全存儲上去翁巍,比如說Amazon的S3云服務(wù)上去,在國內(nèi)可以是阿里云的ODPS分布式存儲上休雌,以預(yù)定好的備份策略來定期備份redis中的數(shù)據(jù)灶壶。

  • 2、RDB也可以做冷備杈曲,生成多個文件驰凛,每個文件都代表了某一個時(shí)刻的完整的數(shù)據(jù)快照。AOF也可以做冷備担扑,只有一個文件洒嗤,但是你可以,每隔一定時(shí)間魁亦,去copy一份這個文件出來(實(shí)際上很少人會用AOF作冷備渔隶,因?yàn)檫€需要自己寫一些腳本去做這個事情,各種定時(shí)洁奈,很麻煩间唉。RDB做冷備,優(yōu)勢在哪兒呢利术?由redis去控制固定時(shí)長生成快照文件的事情呈野,RDB數(shù)據(jù)做冷備,在最壞的情況下印叁,提供數(shù)據(jù)恢復(fù)的時(shí)候被冒,速度比AOF快)军掂。

  • 3、RDB對redis對外提供的讀寫服務(wù)昨悼,影響非常小蝗锥,可以讓redis保持高性能,因?yàn)閞edis主進(jìn)程只需要fork一個子進(jìn)程率触,讓子進(jìn)程執(zhí)行磁盤IO操作來進(jìn)行RDB持久化即可终议。

  • 4、RDB葱蝗,每次寫穴张,都是直接寫redis內(nèi)存,只是在一定的時(shí)候两曼,才會將數(shù)據(jù)寫入磁盤中皂甘。AOF,每次都是要寫文件的悼凑,雖然可以快速寫入os cache中偿枕,但是還是有一定的時(shí)間開銷的,速度肯定比RDB略慢一些。

  • 5佛析、相對于AOF持久化機(jī)制來說益老,直接基于RDB數(shù)據(jù)文件來重啟和恢復(fù)redis進(jìn)程,更加快速寸莫。

  • 6捺萌、AOF,存放的指令日志膘茎,做數(shù)據(jù)恢復(fù)的時(shí)候桃纯,其實(shí)是要回放和執(zhí)行所有的指令日志,來恢復(fù)出來內(nèi)存中的所有數(shù)據(jù)披坏。

  • 7态坦、RDB,就是一份數(shù)據(jù)文件(二進(jìn)制)棒拂,恢復(fù)的時(shí)候伞梯,直接加載到內(nèi)存中即可。

  • 結(jié)合上述優(yōu)點(diǎn)帚屉,RDB特別適合做冷備份谜诫。

  • RDB持久化機(jī)制的缺點(diǎn)

    • 1、如果想要在redis故障時(shí)攻旦,盡可能少的丟失數(shù)據(jù)喻旷,那么RDB沒有AOF好。一般來說牢屋,RDB數(shù)據(jù)快照文件且预,都是每隔5分鐘槽袄,或者更長時(shí)間生成一次,這個時(shí)候就得接受一旦redis進(jìn)程宕機(jī)锋谐,那么會丟失最近5分鐘的數(shù)據(jù)遍尺。

    • 2、這個問題怀估,也是RDB最大的缺點(diǎn)狮鸭,就是不適合做第一優(yōu)先的恢復(fù)方案合搅,如果你依賴RDB做第一優(yōu)先恢復(fù)方案多搀,會導(dǎo)致數(shù)據(jù)丟失的比較多。

    • 3灾部、RDB每次在fork子進(jìn)程來執(zhí)行RDB快照數(shù)據(jù)文件生成的時(shí)候康铭,如果數(shù)據(jù)文件特別大,可能會導(dǎo)致對客戶端提供的服務(wù)暫停數(shù)毫秒赌髓,或者甚至數(shù)秒从藤。

    • 4、一般不要讓RDB的間隔太長锁蠕,否則每次生成的RDB文件太大了夷野,對redis本身的性能可能會有影響的。

  • AOF持久化機(jī)制的優(yōu)點(diǎn)

    • 1荣倾、AOF可以更好的保護(hù)數(shù)據(jù)不丟失悯搔,一般AOF會每隔1秒,通過一個后臺線程執(zhí)行一次fsync操作舌仍,最多丟失1秒鐘的數(shù)據(jù)妒貌。

    • 2、AOF日志文件以append-only模式寫入铸豁,所以沒有任何磁盤尋址的開銷灌曙,寫入性能非常高,而且文件不容易破損节芥,即使文件尾部破損在刺,也很容易修復(fù)

    • 3、AOF日志文件即使過大的時(shí)候头镊,出現(xiàn)后臺重寫操作蚣驼,也不會影響客戶端的讀寫。因?yàn)樵趓ewrite log的時(shí)候拧晕,會對其中的指導(dǎo)進(jìn)行壓縮隙姿,創(chuàng)建出一份需要恢復(fù)數(shù)據(jù)的最小日志出來。再創(chuàng)建新日志文件的時(shí)候厂捞,老的日志文件還是照常寫入输玷。當(dāng)新的merge后的日志文件ready的時(shí)候队丝,再交換新老日志文件即可。

    • 4欲鹏、AOF日志文件的命令通過非郴茫可讀的方式進(jìn)行記錄,這個特性非常適合做災(zāi)難性的誤刪除的緊急恢復(fù)赔嚎。比如某人不小心用flushall命令清空了所有數(shù)據(jù)膘盖,只要這個時(shí)候后臺rewrite還沒有發(fā)生,那么就可以立即拷貝AOF文件尤误,將最后一條flushall命令給刪了侠畔,然后再將該AOF文件放回去,就可以通過恢復(fù)機(jī)制损晤,自動恢復(fù)所有數(shù)據(jù)软棺。

  • AOF持久化機(jī)制的缺點(diǎn)

    • 1、對于同一份數(shù)據(jù)來說尤勋,AOF日志文件通常比RDB數(shù)據(jù)快照文件更大喘落。

    • 2、AOF開啟后最冰,支持的寫QPS會比RDB支持的寫QPS低瘦棋,因?yàn)锳OF一般會配置成每秒fsync一次日志文件,當(dāng)然暖哨,每秒一次fsync赌朋,性能也還是很高的(如果fsync的頻率過高,性能就會大幅度下降)鹿蜀。

    • 3箕慧、比如,如果你要保證一條數(shù)據(jù)都不丟茴恰,也是可以的颠焦,AOF的fsync設(shè)置成沒寫入一條數(shù)據(jù),fsync一次往枣,那就完蛋了伐庭,redis的QPS大降。

    • 4分冈、以前AOF發(fā)生過bug圾另,就是通過AOF記錄的日志,進(jìn)行數(shù)據(jù)恢復(fù)的時(shí)候雕沉,沒有恢復(fù)一模一樣的數(shù)據(jù)出來集乔。所以說,類似AOF這種較為復(fù)雜的基于命令日志/merge/回放的方式坡椒,比基于RDB每次持久化一份完整的數(shù)據(jù)快照文件的方式扰路,更加脆弱一些尤溜,容易有bug。不過AOF就是為了避免rewrite過程導(dǎo)致的bug汗唱,因此每次rewrite并不是基于舊的指令日志進(jìn)行merge的宫莱,而是基于當(dāng)時(shí)內(nèi)存中的數(shù)據(jù)進(jìn)行指令的重新構(gòu)建,這樣健壯性會好很多哩罪。

    • 5授霸、唯一的比較大的缺點(diǎn),其實(shí)就是做數(shù)據(jù)恢復(fù)的時(shí)候际插,會比較慢碘耳,還有做冷備,定期的備份腹鹉,不太方便藏畅,可能要自己手寫復(fù)雜的腳本去做敷硅,做冷備不太合適功咒。

    • 6、如果我們想要redis僅僅作為純內(nèi)存的緩存來用绞蹦,那么可以禁止RDB和AOF所有的持久化機(jī)制力奋。

    • 7、通過RDB或AOF幽七,都可以將redis內(nèi)存中的數(shù)據(jù)給持久化到磁盤上面來景殷,然后可以將這些數(shù)據(jù)備份到別的地方去,比如說阿里云等一些云服務(wù)上澡屡。

    • 8猿挚、如果redis掛了,服務(wù)器上的內(nèi)存和磁盤上的數(shù)據(jù)都丟了驶鹉,可以從云服務(wù)上拷貝回來之前的數(shù)據(jù)绩蜻,放到指定的目錄中,然后重新啟動redis室埋,redis就會自動根據(jù)持久化數(shù)據(jù)文件中的數(shù)據(jù)办绝,去恢復(fù)內(nèi)存中的數(shù)據(jù),繼續(xù)對外提供服務(wù)姚淆。

    • 9孕蝉、如果同時(shí)使用RDB和AOF兩種持久化機(jī)制,那么在redis重啟的時(shí)候腌逢,會默認(rèn)使用AOF來重新構(gòu)建數(shù)據(jù)降淮,因?yàn)锳OF中的數(shù)據(jù)更加完整(因?yàn)锳OF默認(rèn)每隔一秒往AOF文件里面寫入一條寫操作,和RDB是每隔一段時(shí)間生成一個快照)搏讶。

打開Redis.conf文件


第一句的意思是 每隔15分鐘佳鳖,有一個發(fā)生變化纳本,保存一次。


redis數(shù)據(jù)保存在硬盤上的地址


微信掃碼關(guān)注java架構(gòu)腋颠,獲取Java面試題和架構(gòu)師相關(guān)題目和視頻繁成。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市淑玫,隨后出現(xiàn)的幾起案子巾腕,更是在濱河造成了極大的恐慌,老刑警劉巖絮蒿,帶你破解...
    沈念sama閱讀 212,185評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尊搬,死亡現(xiàn)場離奇詭異,居然都是意外死亡土涝,警方通過查閱死者的電腦和手機(jī)佛寿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來但壮,“玉大人冀泻,你說我怎么就攤上這事±” “怎么了弹渔?”我有些...
    開封第一講書人閱讀 157,684評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長溯祸。 經(jīng)常有香客問我肢专,道長,這世上最難降的妖魔是什么焦辅? 我笑而不...
    開封第一講書人閱讀 56,564評論 1 284
  • 正文 為了忘掉前任博杖,我火速辦了婚禮,結(jié)果婚禮上筷登,老公的妹妹穿的比我還像新娘剃根。我一直安慰自己,他們只是感情好仆抵,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,681評論 6 386
  • 文/花漫 我一把揭開白布跟继。 她就那樣靜靜地躺著,像睡著了一般镣丑。 火紅的嫁衣襯著肌膚如雪舔糖。 梳的紋絲不亂的頭發(fā)上宣渗,一...
    開封第一講書人閱讀 49,874評論 1 290
  • 那天蕉朵,我揣著相機(jī)與錄音,去河邊找鬼餐济。 笑死,一個胖子當(dāng)著我的面吹牛摇庙,可吹牛的內(nèi)容都是我干的旱物。 我是一名探鬼主播,決...
    沈念sama閱讀 39,025評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼卫袒,長吁一口氣:“原來是場噩夢啊……” “哼宵呛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起夕凝,我...
    開封第一講書人閱讀 37,761評論 0 268
  • 序言:老撾萬榮一對情侶失蹤宝穗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后码秉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逮矛,經(jīng)...
    沈念sama閱讀 44,217評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,545評論 2 327
  • 正文 我和宋清朗相戀三年转砖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了须鼎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,694評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡府蔗,死狀恐怖晋控,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情礁竞,我是刑警寧澤糖荒,帶...
    沈念sama閱讀 34,351評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站模捂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜘矢。R本人自食惡果不足惜狂男,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,988評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望品腹。 院中可真熱鬧岖食,春花似錦、人聲如沸舞吭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,778評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羡鸥。三九已至蔑穴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惧浴,已是汗流浹背存和。 一陣腳步聲響...
    開封第一講書人閱讀 32,007評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捐腿。 一個月前我還...
    沈念sama閱讀 46,427評論 2 360
  • 正文 我出身青樓纵朋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茄袖。 傳聞我的和親對象是個殘疾皇子操软,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,580評論 2 349