04-Redis

一取试、Redis基礎(chǔ)

1.概述

Redis是一個(gè)開源渣窜,高級的鍵值存儲和一個(gè)適用的解決方案,用于構(gòu)建高性能踱蠢,可擴(kuò)展的Web應(yīng)用程序企锌。

Redis有三個(gè)主要特點(diǎn)榆浓,使它優(yōu)越于其它鍵值數(shù)據(jù)存儲系統(tǒng) -

  • Redis將其數(shù)據(jù)庫完全保存在內(nèi)存中,僅使用磁盤進(jìn)行持久化霎俩。
  • 與其它鍵值數(shù)據(jù)存儲相比哀军,Redis有一組相對豐富的數(shù)據(jù)類型柳击。
  • Redis可以將數(shù)據(jù)復(fù)制到任意數(shù)量的從機(jī)中。

2.Redis的優(yōu)點(diǎn)

  • 異澄魃瑁快 - Redis非潮途龋快洋满,每秒可執(zhí)行大約110000次的設(shè)置(SET)操作回还,每秒大約可執(zhí)行81000次的讀取/獲取(GET)操作。
  • 支持豐富的數(shù)據(jù)類型 - Redis支持開發(fā)人員常用的大多數(shù)數(shù)據(jù)類型胁编,例如列表昧旨,集合,排序集和散列等等硼啤。這使得Redis很容易被用來解決各種問題钧忽,因?yàn)槲覀冎滥男﹩栴}可以更好使用地哪些數(shù)據(jù)類型來處理解決缺菌。
  • 操作具有原子性 - 所有Redis操作都是原子操作晕鹊,這確保如果兩個(gè)客戶端并發(fā)訪問,Redis服務(wù)器能接收更新的值。
  • 多實(shí)用工具 - Redis是一個(gè)多實(shí)用工具,可用于多種用例,如:緩存易核,消息隊(duì)列(Redis本地支持發(fā)布/訂閱)岳链,應(yīng)用程序中的任何短期數(shù)據(jù)纬向,例如娩缰,web應(yīng)用程序中的會(huì)話,網(wǎng)頁命中計(jì)數(shù)等谒府。

3.Redis與其他鍵值存儲系統(tǒng)

  • Redis是鍵值數(shù)據(jù)庫系統(tǒng)的不同進(jìn)化路線,它的值可以包含更復(fù)雜的數(shù)據(jù)類型浮毯,可在這些數(shù)據(jù)類型上定義原子操作完疫。
  • Redis是一個(gè)內(nèi)存數(shù)據(jù)庫,但在磁盤數(shù)據(jù)庫上是持久的债蓝,因此它代表了一個(gè)不同的權(quán)衡厘贼,在這種情況下蝇棉,在不能大于存儲器(內(nèi)存)的數(shù)據(jù)集的限制下實(shí)現(xiàn)非常高的寫和讀速度。
  • 內(nèi)存數(shù)據(jù)庫的另一個(gè)優(yōu)點(diǎn)是浓利,它與磁盤上的相同數(shù)據(jù)結(jié)構(gòu)相比,復(fù)雜數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中存儲表示更容易操作嗜桌。 因此,Redis可以做很少的內(nèi)部復(fù)雜性。

二匿值、Redis 的安裝

第一步:安裝Redis,打開終端執(zhí)行以下命令
sudo apt-get install redis-server

第二步:啟動(dòng)Redis

redis-server

第三步:檢查Redis是否正在工作

redis-cli

執(zhí)行完得到的結(jié)果: 127.0.0.1:6379>則說明正常工作

說明:127.0.0.1是計(jì)算機(jī)的IP地址赂摆,6379是運(yùn)行Redis服務(wù)器的端口挟憔。

第四步:執(zhí)行PING命令。

redis 127.0.0.1:6379> ping 
PONG

得到結(jié)果為PONG表明Redis已成功安裝

注意:在redis的server端烟号,維護(hù)著多個(gè)數(shù)據(jù)庫(默認(rèn)為16個(gè))
  所有的數(shù)據(jù)庫以數(shù)組的形式保存在redisServer結(jié)構(gòu)中

三绊谭、Redis keys 命令

下表給出了與 Redis 鍵相關(guān)的基本命令:

序號 命令及描述
1 DEL key該命令用于在 key 存在時(shí)刪除 key
2 EXISTS key 檢查給定 key 是否存在。
3 EXPIRE key seconds為給定 key 設(shè)置過期時(shí)間汪拥。
4 PEXPIRE key milliseconds 設(shè)置 key 的過期時(shí)間以毫秒計(jì)达传。
5 KEYS pattern 查找所有符合給定模式( pattern)的 key 。
6 MOVE key db 將當(dāng)前數(shù)據(jù)庫的 key 移動(dòng)到給定的數(shù)據(jù)庫 db 當(dāng)中迫筑。
7 PERSIST key 移除 key 的過期時(shí)間趟大,key 將持久保持。
8 PTTL key 以毫秒為單位返回 key 的剩余的過期時(shí)間铣焊。
9 TTL key 以秒為單位逊朽,返回給定 key 的剩余生存時(shí)間(TTL, time to live)。
10 RANDOMKEY 從當(dāng)前數(shù)據(jù)庫中隨機(jī)返回一個(gè) key 曲伊。
11 RENAME key newkey 修改 key 的名稱
12 TYPE key 返回 key 所儲存的值的類型叽讳。

查找以 runoob 為開頭的 key:

redis 127.0.0.1:6379> KEYS runoob*
1) "runoob3"
2) "runoob1"
3) "runoob2"

獲取 redis 中所有的 key 可用使用 *****。

redis 127.0.0.1:6379> KEYS *
1) "runoob3"
2) "runoob1"
3) "runoob2"

四坟募、數(shù)據(jù)類型

Redis支持5種數(shù)據(jù)類型岛蚤。

1.字符串

String是redis最基本的類型,最大能存儲512MB的數(shù)據(jù)懈糯,String類型是二進(jìn)制安全的涤妒,即可以存儲任何數(shù)據(jù)、比如數(shù)字赚哗、圖片她紫、序列化對象等

下表列出了一些用于在Redis中管理字符串的基本命令。

編號 命令 描述說明
1 SET key value 此命令設(shè)置指定鍵的值屿储。
2 GET key 獲取指定鍵的值贿讹。
3 GETRANGE key start end 獲取存儲在鍵上的字符串的子字符串。
4 GETSET key value 設(shè)置鍵的字符串值并返回其舊值够掠。
5 GETBIT key offset 返回在鍵處存儲的字符串值中偏移處的位值民褂。
6 MGET key1 key2.. 獲取所有給定鍵的值
7 SETBIT key offset value 存儲在鍵上的字符串值中設(shè)置或清除偏移處的位
8 SETEX key seconds value 使用鍵和到期時(shí)間來設(shè)置值
9 SETNX key value 設(shè)置鍵的值,僅當(dāng)鍵不存在時(shí)
10 SETRANGE key offset value 在指定偏移處開始的鍵處覆蓋字符串的一部分
11 STRLEN key 獲取存儲在鍵中的值的長度
12 MSET key value key value … 為多個(gè)鍵分別設(shè)置它們的值
13 MSETNX key value key value … 為多個(gè)鍵分別設(shè)置它們的值,僅當(dāng)鍵不存在時(shí)
14 PSETEX key milliseconds value 設(shè)置鍵的值和到期時(shí)間(以毫秒為單位)
15 INCR key 將鍵的整數(shù)值增加1
16 INCRBY key increment 將鍵的整數(shù)值按給定的數(shù)值增加
17 INCRBYFLOAT key increment 將鍵的浮點(diǎn)值按給定的數(shù)值增加
18 DECR key 將鍵的整數(shù)值減1
19 DECRBY key decrement 按給定數(shù)值減少鍵的整數(shù)值
20 APPEND key value 將指定值附加到鍵
1.1設(shè)置

注 : Redis命令不區(qū)分大小寫赊堪,如SET,Setset都是同一個(gè)命令面殖。字符串值的最大長度為 512MB。

演示:

#1.設(shè)置鍵值
set name 'xiaoming'

#2.設(shè)置鍵值及過期時(shí)間哭廉,以秒為單位
setex name  10 'xiaoming' 

#3.設(shè)置多個(gè)鍵值
mset name "lili"  age  18  sex 'girl'
1.2獲取

演示:

#1.據(jù)鍵獲取值脊僚,如果鍵不存在則返回nil
get name

#2.根據(jù)多個(gè)鍵獲取多個(gè)值
mget name age
1.3運(yùn)算

要求:值是字符串類型的數(shù)字

演示:

#1.將key對應(yīng)的值加1
incr age

#2.key對應(yīng)的值減1
decr age

#3.將key對應(yīng)的值加整數(shù)
incrby age 10

#4.將key對應(yīng)的值減整數(shù)
decrby age  20
1.4其他

演示:

#1.追加值
append name "hello"
get name

#2.獲取值長度
strlen name

2.哈希

Redis哈希(Hashes)是鍵值對的集合。Redis哈希是字符串字段和字符串值之間的映射群叶。因此吃挑,它們用于存儲對象。

序號 命令 說明
1 HDEL key field2 [field2] 刪除一個(gè)或多個(gè)哈希字段街立。
2 HEXISTS key field 判斷是否存在散列字段舶衬。
3 HGET key field 獲取存儲在指定鍵的哈希字段的值。
4 HGETALL key 獲取存儲在指定鍵的哈希中的所有字段和值
5 HINCRBY key field increment 將哈希字段的整數(shù)值按給定數(shù)字增加
6 HINCRBYFLOAT key field increment 將哈希字段的浮點(diǎn)值按給定數(shù)值增加
7 HKEYS key 獲取哈希中的所有字段
8 HLEN key 獲取散列中的字段數(shù)量
9 HMGET key field1 [field2] 獲取所有給定哈希字段的值
10 [HMSET key field1 value1 field2 value2 ] 為多個(gè)哈希字段分別設(shè)置它們的值
11 HSET key field value 設(shè)置散列字段的字符串值
12 HSETNX key field value 僅當(dāng)字段不存在時(shí)赎离,才設(shè)置散列字段的值
13 HVALS key 獲取哈希中的所有值
2.1設(shè)置

演示:

#1.設(shè)置單個(gè)值
hset ukey name 'zhangsan'

#2.設(shè)置多個(gè)值
hmset ukey username "xixi" password "123456"

#用于存儲包含用戶的基本信息的用戶對象逛犹,ukey是哈希表的名稱
2.2獲取

演示:

#1.獲取一個(gè)屬性的值
hget ukey name

#2.獲取多個(gè)屬性的值
hmget ukey username password

#3.獲取所有屬性和值
hgetall ukey

#4.獲取所有屬性
hkeys ukey

#5.獲取所有值
hvals ukey

#6.返回包含數(shù)據(jù)的個(gè)數(shù)
hlen ukey
2.3其他

演示:

#1.判斷屬性是否存在,存在返回1梁剔,不存在返回0
hexists ukey username

#2.刪除屬性及值
hdel ukey username 'xixi'

3.列表

Redis列表只是字符串列表虽画,按插入順序排序。您可以向Redis列表的頭部或尾部添加元素荣病。

列表的最大長度為2^32 - 1個(gè)元素(4294967295码撰,每個(gè)列表可容納超過40億個(gè)元素)。

下表列出了與列表相關(guān)的一些基本命令个盆。

序號 命令 說明
1 BLPOP key1 [key2 ] timeout 刪除并獲取列表中的第一個(gè)元素脖岛,或阻塞,直到有一個(gè)元素可用
2 BRPOP key1 [key2 ] timeout 刪除并獲取列表中的最后一個(gè)元素颊亮,或阻塞柴梆,直到有一個(gè)元素可用
3 BRPOPLPUSH source destination timeout 從列表中彈出值,將其推送到另一個(gè)列表并返回它; 或阻塞终惑,直到一個(gè)可用
4 LINDEX key index 通過其索引從列表獲取元素
5 LINSERT key BEFORE/AFTER pivot value 在列表中的另一個(gè)元素之前或之后插入元素
6 LLEN key 獲取列表的長度
7 LPOP key 刪除并獲取列表中的第一個(gè)元素
8 LPUSH key value1 [value2] 將一個(gè)或多個(gè)值添加到列表
9 LPUSHX key value 僅當(dāng)列表存在時(shí)绍在,才向列表添加值
10 LRANGE key start stop 從列表中獲取一系列元素
11 LREM key count value 從列表中刪除元素
12 LSET key index value 通過索引在列表中設(shè)置元素的值
13 LTRIM key start stop 修剪列表的指定范圍
14 RPOP key 刪除并獲取列表中的最后一個(gè)元素
15 RPOPLPUSH source destination 刪除列表中的最后一個(gè)元素,將其附加到另一個(gè)列表并返回
16 RPUSH key value1 [value2] 將一個(gè)或多個(gè)值附加到列表
17 RPUSHX key value 僅當(dāng)列表存在時(shí)才將值附加到列表
3.1設(shè)置

演示:

#1.在頭部插入
127.0.0.1:6379> lpush alist redis
(integer) 1
127.0.0.1:6379> lpush alist mongodb
(integer) 2
127.0.0.1:6379> lpush alist mysql
(integer) 3
127.0.0.1:6379> lrange alist 0 10
1) "mysql"
2) "mongodb"
3) "redis"

#2.在尾部插入
127.0.0.1:6379> rpush alist aaa
(integer) 4
127.0.0.1:6379> lrange alist 0 10
1) "musql"
2) "mongodb"
3) "redis"
4) "aaa"


#3.在一個(gè)元素的前/后插入新元素
127.0.0.1:6379> linsert alist after aaa bbb
(integer) 5
127.0.0.1:6379> lrange alist 0 10
1) "musql"
2) "mongodb"
3) "redis"
4) "aaa"
5) "bbb"
127.0.0.1:6379> linsert alist before aaa ccc
(integer) 6
127.0.0.1:6379> lrange alist 0 10
1) "musql"
2) "mongodb"
3) "redis"
4) "ccc"
5) "aaa"
6) "bbb"


#4.設(shè)置指定索引的元素值,索引從0開始
127.0.0.1:6379> lset alist 3 bbb
OK
127.0.0.1:6379> lrange alist 0 10
1) "musql"
2) "mongodb"
3) "redis"
4) "bbb"
5) "aaa"
6) "bbb"

#注意:索引值可以是負(fù)數(shù)雹有,表示偏移量是從list的尾部開始偿渡,如-1表示最后一個(gè)元素
3.2獲取

演示:

#1.移除并返回key對應(yīng)的list的第一個(gè)元素  
127.0.0.1:6379> lpop alist
"musql"

#2.移除并返回key對應(yīng)的list的最后一個(gè)元素
127.0.0.1:6379> rpop alist
"bbb"

#3.返回存儲在key的列表中的指定范圍的元素
127.0.0.1:6379> lrange alist 0 10
1) "mongodb"
2) "redis"
3) "bbb"
4) "aaa"
#注意:start end都是從0開始
3.3其他

演示:

#1.裁剪列表,改為原集合的一個(gè)子集
127.0.0.1:6379> ltrim alist 0 2
OK
127.0.0.1:6379> lrange alist 0 10
1) "mongodb"
2) "redis"
3) "bbb"
#包頭包尾

#2.返回存儲在key里的list的長度
127.0.0.1:6379> llen alist
(integer) 3

#3.返回列表中索引對應(yīng)的值  
127.0.0.1:6379> lindex alist 2
"bbb"

4.集合

Redis集合是唯一字符串的無序集合件舵。 唯一值表示集合中不允許鍵中有重復(fù)的數(shù)據(jù)卸察。

一個(gè)集合中的最大成員數(shù)量為2^32 - 1(即4294967295,每個(gè)集合中元素?cái)?shù)量可達(dá)40億個(gè))個(gè)铅祸。

下表列出了與集合相關(guān)的一些基本命令。

序號 命令 說明
1 SADD key member1 [member2] 將一個(gè)或多個(gè)成員添加到集合
2 SCARD key 獲取集合中的成員數(shù)
3 SDIFF key1 [key2] 減去多個(gè)集合
4 SDIFFSTORE destination key1 [key2] 減去多個(gè)集并將結(jié)果集存儲在鍵中
5 SINTER key1 [key2] 相交多個(gè)集合
6 SINTERSTORE destination key1 [key2] 交叉多個(gè)集合并將結(jié)果集存儲在鍵中
7 SISMEMBER key member 判斷確定給定值是否是集合的成員
8 SMOVE source destination member 將成員從一個(gè)集合移動(dòng)到另一個(gè)集合
9 SPOP key 從集合中刪除并返回隨機(jī)成員
10 SRANDMEMBER key [count] 從集合中獲取一個(gè)或多個(gè)隨機(jī)成員
11 SREM key member1 [member2] 從集合中刪除一個(gè)或多個(gè)成員
12 SUNION key1 [key2] 添加多個(gè)集合
13 SUNIONSTORE destination key1 [key2] 添加多個(gè)集并將結(jié)果集存儲在鍵中
14 SSCAN key cursor [MATCH pattern] [COUNT count] 遞增地迭代集合中的元素
4.1設(shè)置

演示:

#1.添加元素
redis 127.0.0.1:6379> sadd aset redis 
(integer) 1 
redis 127.0.0.1:6379> sadd aset mongodb 
(integer) 1 
redis 127.0.0.1:6379> sadd aset sqlite 
(integer) 1 
redis 127.0.0.1:6379> sadd aset sqlite 
(integer) 0 
redis 127.0.0.1:6379> smembers aset  

1) "sqlite" 
2) "mongodb" 
3) "redis"
#aset 為鍵
#注意 :如果被添加兩次,但是由于集合的唯一屬性临梗,所以它只算添加一次涡扼。
4.2獲取

演示:

#1.返回key集合中所有元素
redis 127.0.0.1:6379> smembers aset  

#2.返回集合元素個(gè)數(shù)
redis 127.0.0.1:6379> scard aset  
4.3交集

演示:

#1.求多個(gè)集合的交集  
127.0.0.1:6379> sadd aset1 aaa
(integer) 1
127.0.0.1:6379> sadd aset1 mysql
(integer) 1
127.0.0.1:6379> sadd aset1 bbbb
(integer) 1
127.0.0.1:6379> sinter aset aset1
1) "mysql"
2) "aaa"

#2.求多個(gè)集合的差集   
127.0.0.1:6379> sdiff aset aset1
1) "mongodb"
2) "redis"

#3.判斷元素是否在集合中,存在返回1盟庞,不存在返回0
127.0.0.1:6379> sismember aset mysql
(integer) 1
4.4有序集合

Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重復(fù)的成員吃沪。

不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù)。redis正是通過分?jǐn)?shù)來為集合中的成員進(jìn)行從小到大的排序什猖。

有序集合的成員是唯一的,但分?jǐn)?shù)(score)卻可以重復(fù)

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

序號 命令及描述
1 ZADD key score1 member1 [score2 member2]向有序集合添加一個(gè)或多個(gè)成員票彪,或者更新已存在成員的分?jǐn)?shù)
2 ZCARD key 獲取有序集合的成員數(shù)
3 ZCOUNT key min max 計(jì)算在有序集合中指定區(qū)間分?jǐn)?shù)的成員數(shù)
4 ZINCRBY key increment member 有序集合中對指定成員的分?jǐn)?shù)加上增量 increment
5 ZINTERSTORE destination numkeys key [key ...] 計(jì)算給定的一個(gè)或多個(gè)有序集的交集并將結(jié)果集存儲在新的有序集合 key 中
6 ZLEXCOUNT key min max 在有序集合中計(jì)算指定字典區(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...移除有序集合中的一個(gè)或多個(gè)成員
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 ...]計(jì)算給定的一個(gè)或多個(gè)有序集的并集推掸,并存儲在新的 key 中
20 ZSCAN key cursor [MATCH pattern] [COUNT count]迭代有序集合中的元素(包括元素成員和元素分值

演示:

a.添加

127.0.0.1:6379> zadd z1 1 a 3 b 4 c 5 d 2 e
(integer) 5

b.獲取

#1.返回指定范圍的元素
127.0.0.1:6379> zrange z1 1 3
1) "e"
2) "b"
3) "c"

#2.返回元素個(gè)數(shù)
127.0.0.1:6379> zcard z1
(integer) 5

#3.返回有序集合key中,score在min和max之間的元素的個(gè)數(shù)
127.0.0.1:6379> zcount z1 2 5
(integer) 4

#4.返回有序集合key中驻仅,成員member的score值
127.0.0.1:6379> zscore z1 b
"3"

五谅畅、與 python 交互

pip3 install redis

引入模塊

from redis import StrictRedis

這個(gè)模塊中提供了StrictRedis對象(Strict嚴(yán)格),用于連接redis服務(wù)器噪服,并按照不同類型提供 了不同方法毡泻,進(jìn)行交互操作

StrictRedis對象方法:

通過init創(chuàng)建對象,指定參數(shù)host粘优、port與指定的服務(wù)器和端口連接仇味,host默認(rèn)為localhost,port默認(rèn)為6379敬飒,db默認(rèn)為0
sr = StrictRedis(host='localhost', port=6379, db=0)

代碼演示:

from redis import  *

# 創(chuàng)建一個(gè)StrictReids對象邪铲,與redis服務(wù)器建立連接
sr = StrictRedis(host='localhost', port=6379, db=0)

#1.增
try:
    
    result = sr.set('py1', 'gj')
    # result如果為true,則表示添加成功
    print(result)
except Exception as e:
    print(e)
    
#2.刪
#result = sr.delete('py1')
#print(result)

#3.改
result = sr.set('py1','he')

#4.查
#如果建不存在无拗,則返回None
result = sr.get('py1')

#5.獲取建
result = sr.keys()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末带到,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子英染,更是在濱河造成了極大的恐慌揽惹,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件四康,死亡現(xiàn)場離奇詭異搪搏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)闪金,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門疯溺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來论颅,“玉大人,你說我怎么就攤上這事囱嫩∈逊瑁” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵墨闲,是天一觀的道長今妄。 經(jīng)常有香客問我,道長鸳碧,這世上最難降的妖魔是什么盾鳞? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮瞻离,結(jié)果婚禮上腾仅,老公的妹妹穿的比我還像新娘。我一直安慰自己琐脏,他們只是感情好攒砖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著日裙,像睡著了一般吹艇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昂拂,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天受神,我揣著相機(jī)與錄音,去河邊找鬼格侯。 笑死鼻听,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的联四。 我是一名探鬼主播撑碴,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朝墩!你這毒婦竟也來了醉拓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤收苏,失蹤者是張志新(化名)和其女友劉穎亿卤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹿霸,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡排吴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了懦鼠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钻哩。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屹堰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憋槐,到底是詐尸還是另有隱情双藕,我是刑警寧澤淑趾,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布阳仔,位于F島的核電站,受9級特大地震影響扣泊,放射性物質(zhì)發(fā)生泄漏近范。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一延蟹、第九天 我趴在偏房一處隱蔽的房頂上張望评矩。 院中可真熱鬧,春花似錦阱飘、人聲如沸斥杜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔗喂。三九已至,卻和暖如春高帖,著一層夾襖步出監(jiān)牢的瞬間缰儿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工散址, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乖阵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓预麸,卻偏偏與公主長得像瞪浸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子吏祸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

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