Python使用Redis:五類數(shù)據(jù)類型操作

類型 簡介 特性 場景
String 二進(jìn)制安全 可以包含任何數(shù)據(jù)腋逆,比如jpg圖片或者序列化的對象穿扳,一個鍵最大能存儲512M --
Hash 鍵值對集合橡伞,對應(yīng)Python中的Dict呻纹;Java中的Map 適合存儲對象,并且可以像數(shù)據(jù)庫中update一個屬性一樣只修改某一項屬性值(Memcached中需要取出整個字符串反序列化成對象修改完再序列化存回去) 存儲死讹、讀取站欺、修改用戶屬性
List 鏈表(雙向鏈表) 增刪快迎瞧,提供了操作某一段元素的API ① 最新消息排行等功能(比如朋友圈的時間線)间螟;② 消息隊列
Set 哈希表實現(xiàn)吴旋,元素不重復(fù) ⒈ 添加损肛、刪除,查找的復(fù)雜度都是O(1) 荣瑟;⒉ 為集合提供了求交集治拿、并集、差集等操作 ① 共同好友笆焰;② 利用唯一性劫谅,統(tǒng)計訪問網(wǎng)站的所有獨立ip;③ 好友推薦時嚷掠,根據(jù)tag求交集捏检,大于某個閾值就可以推薦
Sorted Set(有序集合) 將Set中的元素增加一個權(quán)重參數(shù)score,元素按score有序排列 數(shù)據(jù)插入集合時不皆,已經(jīng)進(jìn)行天然排序 ① 排行榜贯城;② 帶權(quán)重的消息隊列

1、String(字符串)

redis的string

1.1- set(name, value, ex=None, px=None, nx=False, xx=False)
? -- 在redis中設(shè)置name對應(yīng)的值粟焊。不存在則創(chuàng)建冤狡,存在則修改
? -- ex,過期時間(秒)
? -- px项棠,過期時間(毫秒)
? -- nx悲雳,如果設(shè)置為True,則只有name不存在時香追,當(dāng)前set方法才執(zhí)行
? -- xx合瓢,如果設(shè)置為True,則只有name存在時透典,當(dāng)前set方法才執(zhí)行

1.2- setnx(name, value)
? -- 在redis中設(shè)置name對應(yīng)的值晴楔。只有name不存在時,才執(zhí)行添加

1.3- setex(name, value, time)
? -- 在redis中設(shè)置name對應(yīng)的值
? -- time峭咒,過期時間(數(shù)字秒 或 timedelta對象)

1.4- psetex(name, value, time_ms)
? -- 在redis中設(shè)置name對應(yīng)的值
? -- time_ms税弃,過期時間(數(shù)字毫秒 或 timedelta對象)

1.5- mset(*args, **kwargs)
? -- 在redis中批量設(shè)置值
? -- eg:mset(k1='v1', k2='v2') 或 mget({'k1': 'v1', 'k2': 'v2'})

1.6- get(name)
? -- 獲取redis中name對應(yīng)的值

1.7- mget(keys, *args)
? -- 批量獲取redis中name對應(yīng)的值
? -- keys,redis的name
? -- eg:mget('cn-zh', 'chinese') 或 mget(['cn-zh', 'chinese'])

1.8- getset(name, value)
? -- 在redis中設(shè)置name對應(yīng)的值并獲取原來的值

1.9- getrange(name, start, end)
? -- 在redis中截取獲得子序列(根據(jù)字節(jié)獲取凑队,非字符)
? -- start则果,字符串中字節(jié)的起始位置
? -- end,字符串中字節(jié)的結(jié)束位置
? -- eg:"文藝青年"漩氨,0-3表示 “文”

1.10- setrange(key, offset, value)
? -- 修改redis中name對應(yīng)的字符串內(nèi)容西壮,從指定字符串索引開始向后替換(新值太長則向后添加)
? -- offset,字符串的索引叫惊。字節(jié)(一個漢字為三個字節(jié))
? -- value款青,要修改的值

1.11- setbit(name, offset, value)
? -- 對redis中name對應(yīng)值的二進(jìn)制表示位數(shù)進(jìn)行操作
? -- offset,二進(jìn)制位的索引(將值變換成二進(jìn)制后在進(jìn)行索引)
? -- value霍狰,值只能是0或1
? -- eg:n1 = "foo" 二進(jìn)制表示為:01100110 01101111 01101111
所以setbit('n1', 7, 1)表示將二進(jìn)制后的n1的第7位修改為1抡草,即:01100111 01101111 01101111饰及。轉(zhuǎn)化為字符串則是"goo"

1.12- getbit(name, offset)
? -- 獲取在redis中name對應(yīng)的值的二進(jìn)制表示中的某位的值(0或1)

1.13- bitcount(key, start=None, end=None)
? -- 獲取在redis中name對應(yīng)值的二進(jìn)制表示中 1 的個數(shù)
? -- keys,redis的name
? -- start渠牲,位的起始位置
? -- end旋炒,位的結(jié)束位置

1.14- bitop(operation, dest, *keys)
? -- 獲取多個值,并做位運算签杈,將最后結(jié)果保存至新的name對應(yīng)的值
? -- operation,AND(并)鼎兽、OR(或)答姥、NOT(非)、XOR(異或)
? -- dest谚咬,新的redis的name
? -- *keys鹦付,要查找的redis的name
? -- eg:bitop("AND", 'new_name', 'n1', 'n2', 'n3')表示獲取redis中n1,n2,n3對應(yīng)的值,所有值做位運算(求并集)择卦,然后將結(jié)果保存到new_name對應(yīng)的值中

1.15- strlen(name)
? -- 返回name對應(yīng)值的字節(jié)長度(一個漢字為三個字節(jié))

1.16- incr(name, amount=1)
? -- 自增name的對應(yīng)值敲长,當(dāng)name不存在時創(chuàng)建name=amount,否則自增
? -- amount秉继,自增數(shù)(int)

1.17- incrbyfloat(name, amount=1.0)
? -- 自增name的對應(yīng)值祈噪,當(dāng)name不存在時創(chuàng)建name=amount,否則自增
? -- amount尚辑,自增數(shù)(float)

1.18- decr(name, amount=1)
? -- 自減name的對應(yīng)值辑鲤,當(dāng)name不存在時創(chuàng)建name=amount,否則自減
? -- amount杠茬,自減數(shù)(int)

1.19- append(key, value)
? -- 在redis中name對應(yīng)值后面追加內(nèi)容
? -- key月褥,redis的name
? -- value,要追加的字符串

2瓢喉、List(列表)

(redis的list在內(nèi)存中按照一個name對應(yīng)一個列表來存儲)


redis的list

2.1- lpush(name,values)
? -- 在name對應(yīng)的list中從左到右添加新元素
? -- ps:rpush(name, values)表示從右到左添加
? -- eg:conn.lpush('en', 80,90,10) # 保存順序:10, 90, 80

2.2- lpushx(name, value)
? -- 在name對應(yīng)的list中添加元素宁赤,只當(dāng)name存在才把元素添加到list最左邊
? -- ps:rpushx(name, value)表示從右到左添加

2.3- llen(name)
? -- name對應(yīng)的list中元素的個數(shù)

2.4- linsert(name, where, refvalue, value)
? -- 在name對應(yīng)的list中的某個元素前或后插入一個新的元素
? -- where,前或后
? -- refvalue栓票,標(biāo)識元素决左。在它前后插入
? -- value,要插入的元素

2.5- r.lset(name, index, value)
? -- 對name對應(yīng)的list中的某個索引位置重新賦值
? -- index逗载,list中的索引值
? -- value哆窿,要改變的值

2.6- r.lrem(name, value, num)
? -- 在name對應(yīng)的list中刪除指定元素
? -- value,要刪除的元素
? -- num厉斟,num=0挚躯,刪除list中所有指定元素;num=2擦秽,從前往后刪除2個码荔;num=-2漩勤,從后往前刪除2個

2.7- lpop(name)
? -- 在name對應(yīng)的list的最左側(cè)獲取一個元素并移除,返回該元素
? -- ps:rpop(name)表示在最右側(cè)操作執(zhí)行

2.8- lindex(name, index)
? -- 在name對應(yīng)的list中根據(jù)索引獲取元素

2.9- lrange(name, start, end)
? -- 在name對應(yīng)的list分片獲取數(shù)據(jù)
? -- start缩搅,索引起始位置
? -- end越败,索引結(jié)束位置

2.10- ltrim(name, start, end)
? -- 在name對應(yīng)的list中,移除不在start到end范圍的元素
? -- start硼瓣,索引起始位置
? -- end究飞,索引結(jié)束位置

2.11- rpoplpush(src, dst)
? -- 從某個列表取出最右側(cè)的元素,將其添加到另一個列表的最左側(cè)
? -- src堂鲤,取元素的列表
? -- dst亿傅,加元素的列表

2.12- brpoplpush(src, dst, timeout=0)
? -- 從一個列表的右側(cè)移除一個元素并將其添加到另一個列表左側(cè)
? -- src,取出并要移除元素的列表
? -- dst瘟栖,要插入元素的列表
? -- timeout葵擎,當(dāng)src對應(yīng)的list中沒有數(shù)據(jù)時,阻塞等待有數(shù)據(jù)的超時時間半哟,0表示永遠(yuǎn)阻塞

2.13- blpop(keys, timeout)
? -- 將多個列表排列酬滤,按照從左到右去取對應(yīng)列表的元素
? -- keys,redis的name的集合
? -- timeout寓涨,超時時間盯串,當(dāng)所有列表的元素都取完后,阻塞等到列表重新有元素的時間缅茉,0表示永遠(yuǎn)阻塞
? -- ps:brpop(keys, timeout)表示從右到左取元素

2.14- 自定義增量迭代
? -- 由于redis類庫中沒有提供對列表元素的增量迭代嘴脾,如果需要循環(huán)name對應(yīng)的list中的所有元素,則需要滿足:
?? -- a蔬墩、獲取name對應(yīng)的所有列表
?? -- b译打、循環(huán)列表
? -- 但如果列表過大,就應(yīng)該自定義增量迭代功能

def list_iter(name):
    """
    :param name: 要迭代name對應(yīng)的list
    :return: yield返回列表元素
    """
    list_count = conn.llen(name)
    for index in range(list_count):
        yield conn.lindex(name, index)

for iter in list_iter('txt'):
    print(item)

3拇颅、Hash(哈希)

redis的dict

3.1- hset(name, key, value)
? -- 在name對應(yīng)的dict中設(shè)置一個鍵值對(不存在奏司,則創(chuàng)建;存在樟插,則修改)
? -- name為redis中的name
? -- key為name對應(yīng)的dict中的key
? -- value為name對應(yīng)的dict中的value
? -- eg:conn.hset('cn-zh', 'k1', 'v1')

3.2- hmset(name, mapping)
? -- 在name對應(yīng)的dict中批量設(shè)置鍵值對
? -- name為redis中的name
? -- mapping韵洋,字典。如:{'k1': 'v1', 'k2': 'v2'}
? -- eg:conn.hmset('cn-zh', {'k1': 'v1', 'k2': 'v2'})

3.3- hget(name, key)
? -- 在name對應(yīng)的dict中根據(jù)key獲取value值
? -- eg:conn.hget('cn-zh', 'k1')

3.4- hmget(name, keys, *args)
? -- 在name對應(yīng)的dict中獲取多個key的value值
? -- keys黄锤,要獲取key集合搪缨。如:['k1', 'k2', 'k3']
? -- *args,要獲取的key鸵熟。如:k1, k2, k3
? -- eg:conn.hmget('cn-zh', ['k1', 'k2', 'k3']) 或 conn.hmget('cn-zh', 'k1', 'k2', 'k3')

3.5- hgetall(name)
? -- 獲取name對應(yīng)的dict中所有的鍵值

3.6- hlen(name)
? -- 獲取name對應(yīng)的dict中鍵值對的個數(shù)

3.7- hkeys(name)
? -- 獲取name對應(yīng)的dict中所有key的值

3.8- hvals(name)
? -- 獲取name對應(yīng)的dict中所有value的值

3.9- hexists(name, key)
? -- 檢查name對應(yīng)的dict是否存在當(dāng)前傳入的key

3.10- hdel(name, *keys)
? -- 把name對應(yīng)的dict中指定的key的鍵值對刪除

3.11- hincrby(name, key, amount=1)
? -- 自增name對應(yīng)的hash中指定的key的值副编,不存在時創(chuàng)建key=amount
? -- key,dict對應(yīng)的key
? -- amount流强, 自增數(shù)(int)

3.12- hincrbyfloat(name, key, amount=1.0)
? -- 自增name對應(yīng)的dict中的指定 key的值痹届,不存在時創(chuàng)建key=amount
? -- key呻待,dict對應(yīng)的key
? -- amount,自增數(shù)(float)

3.13- hscan(name, cursor=0, match=None, count=None)
? -- 增量式迭代獲取队腐,優(yōu)勢在于數(shù)據(jù)大蚕捉。可實現(xiàn)分片的獲取數(shù)據(jù)柴淘,非一次全獲取完迫淹,將內(nèi)存撐爆
? -- cursor,游標(biāo)(基于游標(biāo)分批獲取數(shù)據(jù))
? -- match悠就,匹配指定key千绪,默認(rèn)None,表示所有的key
? -- count梗脾, 每次分片最少獲取的個數(shù),默認(rèn)None盹靴,表示采用Redis的默認(rèn)分片個數(shù)
? -- eg:
cursor1, data1 = conn.hscan('cn-zh', cursor=0, match=None, count=None)
cursor2, data2 = conn.hscan('cn-zh', cursor=cursor1, match=None, count=None)
...
直到返回值cursor的值為0時炸茧,表示數(shù)據(jù)已通過分片獲取結(jié)束

3.14- hscan_iter(name, match=None, count=None)
? -- 利用yield封裝hscan創(chuàng)建生成器,實現(xiàn)分批到redis中獲取數(shù)據(jù)
? -- match稿静,匹配指定key梭冠,默認(rèn)None,表示所有的key
? -- count改备,每次分片最少獲取的個數(shù)控漠,默認(rèn)None,表示采用redis的默認(rèn)分片個數(shù)
? -- eg:

for item in conn.hscan_item('cn-zh'):print(item)

4悬钳、Set(集合)盐捷,無序不重復(fù)

4.1- sadd(name, values)
? -- name對應(yīng)的集合中添加數(shù)據(jù)

4.2- scard(name)
? -- 獲取name對應(yīng)集合中元素個數(shù)

4.3- sdiff(keys, *args)
? -- 在第一個name對應(yīng)的集合中,且不在其他name對應(yīng)的集合的元素集合

4.4- sdiffstore(dest, keys, *args)
? -- 獲取第一個name對應(yīng)的集合中默勾,且不在其他name對應(yīng)的集合碉渡,再將其新加入到dest對應(yīng)的集合中

4.5- sinter(keys, *args)
? -- 獲取多一個name對應(yīng)的集合的并集

4.6- sinterstore(dest, keys, *args)
? -- 獲取多一個name對應(yīng)集合的并集,再將其加入到dest對應(yīng)的集合中

4.7- sismember(name, value)
? -- 檢查value是否是name對應(yīng)集合的成員

4.8- smembers(name)
? -- 獲取name對應(yīng)集合的所有成員

4.9- smove(src, dst, value)
? -- 將某個成員從一個集合移動到另一個集合

4.10- spop(name)
? -- 從集合的右側(cè)移除一個成員母剥,并將其返回

4.11- srandmember(name, numbers)
? -- 從name對應(yīng)集合中隨機獲取numbers個元素

4.12- srem(keys, *args)
? -- 在name對應(yīng)集合中刪除某些值

4.13- sunion(keys, *args)
? -- 獲取多一個name對應(yīng)集合的并集

4.14- sunionstore(dest, keys, *args)
? -- 獲取多一個name對應(yīng)集合的并集滞诺,并將結(jié)果保存到dest對應(yīng)集合中

4.15- sscan(name, cursor=0, match=None, count=None)
? -- 用于增量迭代獲取,避免內(nèi)存消耗太大

4.16- sscan_iter(name, match=None, count=None)
? -- 創(chuàng)建生成器环疼,用于增量迭代分批獲取习霹,避免內(nèi)存消耗太大

5、zset(sorted set:有序集合)炫隶,不允許重復(fù)

有序集合淋叶,在集合的基礎(chǔ)上,為每元素排序等限;元素的排序需要根據(jù)另外一個值來進(jìn)行比較爸吮,所以芬膝,對于有序集合,每一個元素有兩個值形娇,即:值和分?jǐn)?shù)锰霜,分?jǐn)?shù)專門用來做排序。

5.1- zadd(name, *args, **kwargs)
? -- 在name對應(yīng)的有序集合中添加元素
? -- eg:zadd('add', 'n1', 1, 'n2', 2) 或 zadd('add', n1=1, n2=2)

5.2- zcard(name)
? -- 獲取name對應(yīng)的有序集合元素的數(shù)量

5.3- zcount(name, min, max)
? -- 獲取name對應(yīng)的有序集合中分?jǐn)?shù) 在 [min,max] 之間的個數(shù)

5.4- zincrby(name, value, amount)
? -- 自增name對應(yīng)的有序集合的 name 對應(yīng)的分?jǐn)?shù)

5.5- zrange(name, start, end, desc=False, withscores=False,
score_cast_func=float)

? -- 按照索引范圍獲取name對應(yīng)的有序集合的元素
? -- start桐早,有序集合索引起始位置(非分?jǐn)?shù))
? -- end癣缅,有序集合索引結(jié)束位置(非分?jǐn)?shù))
? -- desc,排序規(guī)則哄酝,默認(rèn)按照分?jǐn)?shù)從小到大排序
? -- withscores友存,是否獲取元素的分?jǐn)?shù),默認(rèn)只獲取元素的值
? -- score_cast_func陶衅,對分?jǐn)?shù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換的函數(shù)
? -- 從大到小排序:zrevrange(name, start, end, withscores=False, score_cast_func=float)
? -- 按照分?jǐn)?shù)范圍獲取name對應(yīng)的有序集合的元素:zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
? -- 從大到新帕ⅰ:zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)

5.6- zrank(name, value)
? -- 獲取某個值在 name對應(yīng)的有序集合中的排行(從 0 開始)
? -- zrevrank(name, value),從大到小排序

5.7- zrangebylex(name, min, max, start=None, num=None)
? -- 當(dāng)有序集合的所有成員都具有相同的分值時搀军,有序集合的元素會根據(jù)成員的 值 (lexicographical ordering)來進(jìn)行排序膨俐,而這個命令則可以返回給定的有序集合鍵 key 中, 元素的值介于 min 和 max 之間的成員罩句。對集合中的每個成員進(jìn)行逐個字節(jié)的對比(byte-by-byte compare)焚刺, 并按照從低到高的順序, 返回排序后的集合成員门烂。 如果兩個字符串有一部分內(nèi)容是相同的話乳愉, 那么命令會認(rèn)為較長的字符串比較短的字符串要大
? -- min,左區(qū)間(值)屯远。 + 表示正無限蔓姚; - 表示負(fù)無限; ( 表示開區(qū)間氓润; [ 則表示閉區(qū)間
? -- min赂乐,右區(qū)間(值)
? -- start,對結(jié)果進(jìn)行分片處理咖气,索引位置
? -- num挨措,對結(jié)果進(jìn)行分片處理,索引后面的num個元素
? -- eg:
# ZADD myzset 0 aa 0 ba 0 ca 0 da 0 ea 0 fa 0 ga
# r.zrangebylex('myzset', "-", "[ca") 結(jié)果為:['aa', 'ba', 'ca']
? -- 從大到小排序
# zrevrangebylex(name, max, min, start=None, num=None)

5.8- zrem(name, values)
? -- 刪除name對應(yīng)的有序集合中值是values的成員
? -- eg:zrem('zz', ['s1', 's2'])

5.9- zremrangebyrank(name, min, max)
? -- 根據(jù)排行范圍刪除

5.10- zremrangebyscore(name, min, max)
? -- 根據(jù)分?jǐn)?shù)范圍刪除

5.11- zremrangebylex(name, min, max)
? -- 根據(jù)值返回刪除

5.12- zscore(name, value)
? -- 獲取name對應(yīng)有序集合中 value 對應(yīng)的分?jǐn)?shù)

5.13- zinterstore(dest, keys, aggregate=None)
? -- 獲取兩個有序集合的交集崩溪,如果遇到相同值不同分?jǐn)?shù)浅役,則按照aggregate進(jìn)行操作
? -- aggregate的值為: SUM MIN MAX

5.14- zunionstore(dest, keys, aggregate=None)
? -- 獲取兩個有序集合的并集,如果遇到相同值不同分?jǐn)?shù)伶唯,則按照aggregate進(jìn)行操作
? -- aggregate的值為: SUM MIN MAX

5.15- zscan(name, cursor=0, match=None, count=None, score_cast_func=float)
? -- 同字符串操作

5.16- zscan_iter(name, match=None, count=None,score_cast_func=float)
? -- 同字符串相似觉既,相較于字符串新增score_cast_func,用來對分?jǐn)?shù)進(jìn)行操作

6、其他操作

6.1- delete(*names)
? -- 根據(jù)刪除redis中的任意數(shù)據(jù)類型

6.2- exists(name)
? -- 檢測redis的name是否存在

6.3- keys(pattern='')*
? -- 根據(jù)模型獲取redis的name
?KEYS * 匹配數(shù)據(jù)庫中所有 key 瞪讼。
?KEYS h?llo 匹配 hello 钧椰, hallo 和 hxllo 等。
?KEYS h
llo 匹配 hllo 和 heeeeello 等符欠。
?KEYS h[ae]llo 匹配 hello 和 hallo 嫡霞,但不匹配 hillo*

6.4- expire(name ,time)
? -- 為某個redis的某個name設(shè)置超時時間

6.5- rename(src, dst)
? -- 對redis的name重命名為

6.6- move(name, db)
? -- 將redis的某個值移動到指定的db下

6.7- randomkey()
? -- 隨機獲取一個redis的name(不刪除)

6.8- type(name)
? -- 獲取name對應(yīng)值的類型

6.9- scan(cursor=0, match=None, count=None)
? -- 同字符串操作

6.10- scan_iter(match=None, count=None)
? -- 同字符串操作,用于增量迭代獲取key

參考引用博客:http://www.cnblogs.com/wupeiqi/articles/5132791.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末希柿,一起剝皮案震驚了整個濱河市诊沪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌曾撤,老刑警劉巖端姚,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挤悉,居然都是意外死亡渐裸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門装悲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來橄仆,“玉大人,你說我怎么就攤上這事衅斩。” “怎么了怠褐?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵畏梆,是天一觀的道長。 經(jīng)常有香客問我奈懒,道長奠涌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任磷杏,我火速辦了婚禮溜畅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘极祸。我一直安慰自己慈格,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布遥金。 她就那樣靜靜地躺著浴捆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稿械。 梳的紋絲不亂的頭發(fā)上选泻,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音,去河邊找鬼页眯。 笑死梯捕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窝撵。 我是一名探鬼主播傀顾,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼忿族!你這毒婦竟也來了锣笨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤道批,失蹤者是張志新(化名)和其女友劉穎错英,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隆豹,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡椭岩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了璃赡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片判哥。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碉考,靈堂內(nèi)的尸體忽然破棺而出塌计,到底是詐尸還是另有隱情,我是刑警寧澤侯谁,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布锌仅,位于F島的核電站,受9級特大地震影響墙贱,放射性物質(zhì)發(fā)生泄漏热芹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一惨撇、第九天 我趴在偏房一處隱蔽的房頂上張望伊脓。 院中可真熱鬧,春花似錦魁衙、人聲如沸报腔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榄笙。三九已至,卻和暖如春祷蝌,著一層夾襖步出監(jiān)牢的瞬間茅撞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留米丘,地道東北人剑令。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像拄查,于是被迫代替她去往敵國和親吁津。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

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