Redis詳細(xì)解說

歡迎大家關(guān)注我的其他<a >Github博客</a>和<a >Csdn</a>,互相交流!

1. Redis 簡(jiǎn)介

?Redis是一款開源的、高性能的鍵-值存儲(chǔ)(key-value store)。它常被稱作是一款數(shù)據(jù)結(jié)構(gòu)服務(wù)器(data structure server)。Redis的鍵值可以包括字符串(strings)類型,同時(shí)它還包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等數(shù)據(jù)類型。 對(duì)于這些數(shù)據(jù)類型,你可以執(zhí)行原子操作。例如:對(duì)字符串進(jìn)行附加操作(append);遞增哈希中的值;向列表中增加元素;計(jì)算集合的交集、并集與差集等。
?為了獲得優(yōu)異的性能,Redis采用了內(nèi)存中(in-memory)數(shù)據(jù)集(dataset)的方式。同時(shí),Redis支持?jǐn)?shù)據(jù)的持久化,你可以每隔一段時(shí)間將數(shù)據(jù)集轉(zhuǎn)存到磁盤上(snapshot),或者在日志尾部追加每一條操作命令(append only file,aof)。
?Redis同樣支持主從復(fù)制(master-slave replication),并且具有非常快速的非阻塞首次同步( non-blocking first synchronization)、網(wǎng)絡(luò)斷開自動(dòng)重連等功能。同時(shí)Redis還具有其它一些特性,其中包括簡(jiǎn)單的事物支持、發(fā)布訂閱 ( pub/sub)、管道(pipeline)和虛擬內(nèi)存(vm)等 。
?Redis具有豐富的客戶端,支持現(xiàn)階段流行的大多數(shù)編程語言。

2. Redis安裝

下載最新穩(wěn)定版 redis-2.2.11 (http://redis.io/download

tar zxvf redis-2.2.11 解壓縮

這里寫圖片描述

cd src 進(jìn)入src目錄
?m ake 編譯Redis
?make test 可以測(cè)試一下(本步可省略)
?make install 安裝,默認(rèn)安裝目錄是 /usr/local/bin,生成如下圖中的5個(gè)二進(jìn)制文件,可以將其拷到新建目錄下,例如: /usr/local/redis/bin

cp 源碼/src/redis.conf /usr/local/redis/etc 配置文件復(fù)制
?cd /usr/local/redis
?./bin/redis-server ./etc/redis.conf 啟動(dòng)Redis服務(wù)
?此時(shí)redis已經(jīng)運(yùn)行,但要獲得好的性能,還需要對(duì)配置文件進(jìn)行合理的配置

3. Redis配置

  1. Redis默認(rèn)不是以守護(hù)進(jìn)程的方式運(yùn)行,可以通過該配置項(xiàng)修改,使用yes啟用守護(hù)進(jìn)程
    ? daemonize no
    ?2. 當(dāng)Redis以守護(hù)進(jìn)程方式運(yùn)行時(shí),Redis默認(rèn)會(huì)把pid寫入/var/run/redis.pid文件,可以通過pidfile指定
    ? pidfile /var/run/redis.pid
    ?3. 指定Redis監(jiān)聽端口,默認(rèn)端口為6379,作者在自己的一篇博文中解釋了為什么選用6379作為默認(rèn)端口,因?yàn)?379在手機(jī)按鍵上MERZ對(duì)應(yīng)的號(hào)碼,而MERZ取自意大利歌女Alessia Merz的名字
    ? port 6379
    ?4. 綁定的主機(jī)地址
    ? bind 127.0.0.1
    ?5.當(dāng) 客戶端閑置多長時(shí)間后關(guān)閉連接,如果指定為0,表示關(guān)閉該功能
    ? timeout 300
    ?6. 指定日志記錄級(jí)別,Redis總共支持四個(gè)級(jí)別:debug、verbose、notice、warning,默認(rèn)為verbose
    loglevel verbose
    ?7. 日志記錄方式,默認(rèn)為標(biāo)準(zhǔn)輸出,如果配置Redis為守護(hù)進(jìn)程方式運(yùn)行,而這里又配置為日志記錄方式為標(biāo)準(zhǔn)輸出,則日志將會(huì)發(fā)送給/dev/null
    ? logfile stdout
    ?8. 設(shè)置數(shù)據(jù)庫的數(shù)量,默認(rèn)數(shù)據(jù)庫為0,可以使用SELECT <dbid>命令在連接上指定數(shù)據(jù)庫id
    ? databases 16
    ?9. 指定在多長時(shí)間內(nèi),有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件,可以多個(gè)條件配合
    ? save <seconds> <changes>
    ? Redis默認(rèn)配置文件中提供了三個(gè)條件:
    ? save 900 1
    ? save 300 10
    ? save 60 10000
    ? 分別表示900秒(15分鐘)內(nèi)有1個(gè)更改,300秒(5分鐘)內(nèi)有10個(gè)更改以及60秒內(nèi)有10000個(gè)更改。
    ?10. 指定存儲(chǔ)至本地?cái)?shù)據(jù)庫時(shí)是否壓縮數(shù)據(jù),默認(rèn)為yes,Redis采用LZF壓縮,如果為了節(jié)省CPU時(shí)間,可以關(guān)閉該選項(xiàng),但會(huì)導(dǎo)致數(shù)據(jù)庫文件變的巨大
    ? rdbcompression yes
    ?11. 指定本地?cái)?shù)據(jù)庫文件名,默認(rèn)值為dump.rdb
    ? dbfilename dump.rdb
    ?12. 指定本地?cái)?shù)據(jù)庫存放目錄
    ? dir ./
    ?13. 設(shè)置當(dāng)本機(jī)為slav服務(wù)時(shí),設(shè)置master服務(wù)的IP地址及端口,在Redis啟動(dòng)時(shí),它會(huì)自動(dòng)從master進(jìn)行數(shù)據(jù)同步
    ? slaveof <masterip> <masterport>
    ?14. 當(dāng)master服務(wù)設(shè)置了密碼保護(hù)時(shí),slav服務(wù)連接master的密碼
    ? masterauth <master-password>
    ?15. 設(shè)置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時(shí)需要通過AUTH <password>命令提供密碼,默認(rèn)關(guān)閉
    ? requirepass foobared
    ?16. 設(shè)置同一時(shí)間最大客戶端連接數(shù),默認(rèn)無限制,Redis可以同時(shí)打開的客戶端連接數(shù)為Redis進(jìn)程可以打開的最大文件描述符數(shù),如果設(shè)置 maxclients 0,表示不作限制。當(dāng)客戶端連接數(shù)到達(dá)限制時(shí),Redis會(huì)關(guān)閉新的連接并向客戶端返回max number of clients reached錯(cuò)誤信息
    ? maxclients 128
    ?17. 指定Redis最大內(nèi)存限制,Redis在啟動(dòng)時(shí)會(huì)把數(shù)據(jù)加載到內(nèi)存中,達(dá)到最大內(nèi)存后,Redis會(huì)先嘗試清除已到期或即將到期的Key,當(dāng)此方法處理 后,仍然到達(dá)最大內(nèi)存設(shè)置,將無法再進(jìn)行寫入操作,但仍然可以進(jìn)行讀取操作。Redis新的vm機(jī)制,會(huì)把Key存放內(nèi)存,Value會(huì)存放在swap區(qū)
    ? maxmemory <bytes>
    ?18. 指定是否在每次更新操作后進(jìn)行日志記錄,Redis在默認(rèn)情況下是異步的把數(shù)據(jù)寫入磁盤,如果不開啟,可能會(huì)在斷電時(shí)導(dǎo)致一段時(shí)間內(nèi)的數(shù)據(jù)丟失。因?yàn)?redis本身同步數(shù)據(jù)文件是按上面save條件來同步的,所以有的數(shù)據(jù)會(huì)在一段時(shí)間內(nèi)只存在于內(nèi)存中。默認(rèn)為no
    ? appendonly no
    ?19. 指定更新日志文件名,默認(rèn)為appendonly.aof
    ? appendfilename appendonly.aof
    ?20. 指定更新日志條件,共有3個(gè)可選值:
    no:表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤(快)
    always:表示每次更新操作后手動(dòng)調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢,安全)
    everysec:表示每秒同步一次(折衷,默認(rèn)值)
    ? appendfsync everysec
    ?21. 指定是否啟用虛擬內(nèi)存機(jī)制,默認(rèn)值為no,簡(jiǎn)單的介紹一下,VM機(jī)制將數(shù)據(jù)分頁存放,由Redis將訪問量較少的頁即冷數(shù)據(jù)swap到磁盤上,訪問多的頁面由磁盤自動(dòng)換出到內(nèi)存中(在后面的文章我會(huì)仔細(xì)分析Redis的VM機(jī)制)
    ? vm-enabled no
    ?22. 虛擬內(nèi)存文件路徑,默認(rèn)值為/tmp/redis.swap,不可多個(gè)Redis實(shí)例共享
    ? vm-swap-file /tmp/redis.swap
    ?23. 將所有大于vm-max-memory的數(shù)據(jù)存入虛擬內(nèi)存,無論vm-max-memory設(shè)置多小,所有索引數(shù)據(jù)都是內(nèi)存存儲(chǔ)的(Redis的索引數(shù)據(jù) 就是keys),也就是說,當(dāng)vm-max-memory設(shè)置為0的時(shí)候,其實(shí)是所有value都存在于磁盤。默認(rèn)值為0
    ? vm-max-memory 0
    ?24. Redis swap文件分成了很多的page,一個(gè)對(duì)象可以保存在多個(gè)page上面,但一個(gè)page上不能被多個(gè)對(duì)象共享,vm-page-size是要根據(jù)存儲(chǔ)的 數(shù)據(jù)大小來設(shè)定的,作者建議如果存儲(chǔ)很多小對(duì)象,page大小最好設(shè)置為32或者64bytes;如果存儲(chǔ)很大大對(duì)象,則可以使用更大的page,如果不 確定,就使用默認(rèn)值
    ? vm-page-size 32
    ?25. 設(shè)置swap文件中的page數(shù)量,由于頁表(一種表示頁面空閑或使用的bitmap)是在放在內(nèi)存中的,,在磁盤上每8個(gè)pages將消耗1byte的內(nèi)存。
    ? vm-pages 134217728
    ?26. 設(shè)置訪問swap文件的線程數(shù),最好不要超過機(jī)器的核數(shù),如果設(shè)置為0,那么所有對(duì)swap文件的操作都是串行的,可能會(huì)造成比較長時(shí)間的延遲。默認(rèn)值為4
    ? vm-max-threads 4
    ?27. 設(shè)置在向客戶端應(yīng)答時(shí),是否把較小的包合并為一個(gè)包發(fā)送,默認(rèn)為開啟
    ? glueoutputbuf yes
    ?28. 指定在超過一定的數(shù)量或者最大的元素超過某一臨界值時(shí),采用一種特殊的哈希算法
    ? hash-max-zipmap-entries 64
    ? hash-max-zipmap-value 512
    ?29. 指定是否激活重置哈希,默認(rèn)為開啟
    ? activerehashing yes
    ?30. 指定包含其它的配置文件,可以在同一主機(jī)上多個(gè)Redis實(shí)例之間使用同一份配置文件,而同時(shí)各個(gè)實(shí)例又擁有自己的特定配置文件
    ? include /path/to/local.conf

4. Redis支持的數(shù)據(jù)類型

Keys
–非二進(jìn)制安全的字符類型( not binary-safe strings )
?Values
–Strings (Binary-safe strings )
–Lists (Lists of binary-safe strings )
–Sets (Sets of binary-safe strings)
–Sorted sets (Sorted sets of binary-safe strings)
–Hash

Key說明
?redis本質(zhì)上一個(gè)key-value 數(shù)據(jù)庫,所以我們首先來看看他的key.首先key也是字符串類型,由于key不是binary safe的字符串,所以像“my key”和“mykey\n”這樣包含空格和換行的key是不允許的。
?我們?cè)谑褂玫臅r(shí)候可以自己定義一個(gè)Key的格式。例如 object-type:id:field
?Key不要太長。占內(nèi)存,查詢慢。
?Key不要太短。u:1000:pwd 不如 user:1000:password 可讀性好

Key相關(guān)命令
?exits key 測(cè)試指定key是否存在,返回1表示存在,0不存在
?del key1 key2 ....keyN 刪除給定key,返回刪除key的數(shù)目,0表示給定key都不存在
?type key 返回給定key的value類型。返回 none 表示不存在,key有string字符類型,list 鏈表類型 set 無序集合類型等...
keys pattern 返回匹配指定模式的所有key(支持*,?,[abc ]的方式)
?randomkey 返回從當(dāng)前數(shù)據(jù)庫中隨機(jī)選擇的一個(gè)key,如果當(dāng)前數(shù)據(jù)庫是空的,返回空串
?rename oldkey newkey 原子的重命名一個(gè)key,如果newkey存在,將會(huì)被覆蓋,返回1表示成功,0失敗。失敗可能是oldkey不存在或者和newkey相同
?renamenx oldkey newkey 同上,但是如果newkey存在返回失敗
?dbsize 返回當(dāng)前數(shù)據(jù)庫的key數(shù)量
?expire key seconds 為key指定過期時(shí)間,單位是秒。返回1成功,0表示key已經(jīng)設(shè)置過過期時(shí)間或者不存在
?ttl key 返回設(shè)置了過期時(shí)間的key的剩余過期秒數(shù), -1表示key不存在或者沒有設(shè)置過過期時(shí)間
?select db-index 通過索引選擇數(shù)據(jù)庫,默認(rèn)連接的數(shù)據(jù)庫所有是0,默認(rèn)數(shù)據(jù)庫數(shù)是16個(gè)。返回1表示成功,0失敗
?move key db-index 將key從當(dāng)前數(shù)據(jù)庫移動(dòng)到指定數(shù)據(jù)庫。返回1成功。0 如果key不存在,或者已經(jīng)在指定數(shù)據(jù)庫中
?flushdb 刪除當(dāng)前數(shù)據(jù)庫中所有key,此方法不會(huì)失敗。慎用
flushall 刪除所有數(shù)據(jù)庫中的所有key,此方法不會(huì)失敗。更加慎用

Value說明
String
?string是redis最基本的類型,而且string類型是二進(jìn)制安全的。
?redis的string可以包含任何數(shù)據(jù)。包括jpg圖片或者序列化的對(duì)象。
?最大上限是1G字節(jié)。
?如果只用string類型,redis就可以被看作加上持久化特性的memcached

String 相關(guān)命令
?set key value 設(shè)置key對(duì)應(yīng)的值為string類型的value,返回1表示成功,0失敗
?setnx key value 同上,如果key已經(jīng)存在,返回0 。nx 是not exist的意思
?get key 獲取key對(duì)應(yīng)的string值,如果key不存在返回nil
?getset key value 設(shè)置key的值,并返回key的舊值。如果key不存在返回nil
?mget key1 key2 ... keyN 一次獲取多個(gè)key的值,如果對(duì)應(yīng)key不存在,則對(duì)應(yīng)返回nil。下面是個(gè)實(shí)驗(yàn), nonexisting不存在,對(duì)應(yīng)返回nil
?mset key1 value1 ... keyN valueN 一次設(shè)置多個(gè)key的值,成功返回1表示所有的值都設(shè)置了,失敗返回0表示沒有任何值被設(shè)置
?msetnx key1 value1 ... keyN valueN 同上,但是不會(huì)覆蓋已經(jīng)存在的key
?incr key 對(duì)key的值做加加操作,并返回新的值。注意incr一個(gè)不是int的value會(huì)返回錯(cuò)誤,incr一個(gè)不存在的key,則設(shè)置key為1
?decr key 同上,但是做的是減減操作,decr一個(gè)不存在key,則設(shè)置key為-1
?incrby key integer 同incr,加指定值 ,key不存在時(shí)候會(huì)設(shè)置key,并認(rèn)為原來的value是 0
decrby key integer 同decr,減指定值。decrby完全是為了可讀性,我們完全可以通過incrby一個(gè)負(fù)值來實(shí)現(xiàn)同樣效果,反之一樣。
append key value 給指定key的字符串值追加value,返回新字符串值的長度。
?substr key start end 返回截取過的key的字符串值,注意并不修改key的值。下標(biāo)是從0開始的。

List
?redis的list類型其實(shí)就是一個(gè)每個(gè)子元素都是string類型的雙向鏈表。我們可以通過push,pop操作從鏈表的頭部或者尾部添加刪除元素。這使得list既可以用作棧,也可以用作隊(duì)列。
?list的pop操作還有阻塞版本的。當(dāng)我們[lr]pop一個(gè)list對(duì)象是,如果list是空,或者不存在,會(huì)立即返回nil。但是阻塞版本的b[lr]pop可以則可以阻塞,當(dāng)然可以加超時(shí)時(shí)間,超時(shí)后也會(huì)返回nil。為什么要阻塞版本的pop呢,主要是為了避免輪詢。舉個(gè)簡(jiǎn)單的例子如果我們用list來實(shí)現(xiàn)一個(gè)工作隊(duì)列。執(zhí)行任務(wù)的thread可以調(diào)用阻塞版本的pop去獲取任務(wù)這樣就可以避免輪詢?nèi)z查是否有任務(wù)存在。當(dāng)任務(wù)來時(shí)候工作線程可以立即返回,也可以避免輪詢帶來的延遲。

List相關(guān)命令
?lpush key string 在key對(duì)應(yīng)list的頭部添加字符串元素,返回1表示成功,0表示key存在且不是list類型
?rpush key string 同上,在尾部添加
?llen key 返回key對(duì)應(yīng)list的長度,key不存在返回0,如果key對(duì)應(yīng)類型不是list返回錯(cuò)誤
?lrange key start end 返回指定區(qū)間內(nèi)的元素,下標(biāo)從0開始,負(fù)值表示從后面計(jì)算,-1表示倒數(shù)第一個(gè)元素 ,key不存在返回空列表
?ltrim key start end 截取list,保留指定區(qū)間內(nèi)元素,成功返回1,key不存在返回錯(cuò)誤
?lset key index value 設(shè)置list中指定下標(biāo)的元素值,成功返回1,key或者下標(biāo)不存在返回錯(cuò)誤
?lrem key count value 從key對(duì)應(yīng)list中刪除count個(gè)和value相同的元素。count為0時(shí)候刪除全部
lpop key 從list的頭部刪除元素,并返回刪除元素。如果key對(duì)應(yīng)list不存在或者是空返回nil,如果key對(duì)應(yīng)值不是list返回錯(cuò)誤
?rpop 同上,但是從尾部刪除
?blpop key1...keyN timeout 從左到右掃描返回對(duì)第一個(gè)非空list進(jìn)行l(wèi)pop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在,list2,list3都是非空則對(duì)list2做lpop并返回從list2中刪除的元素。如果所有的list都是空或不存在,則會(huì)阻塞timeout秒,timeout為0表示一直阻塞。
當(dāng)阻塞時(shí),如果有client對(duì)key1...keyN中的任意key進(jìn)行push操作,則第一在這個(gè)key上被阻塞的client會(huì)立即返回。如果超時(shí)發(fā)生,則返回nil。
?brpop 同blpop,一個(gè)是從頭部刪除一個(gè)是從尾部刪除
?rpoplpush srckey destkey 從srckey對(duì)應(yīng)list的尾部移除元素并添加到destkey對(duì)應(yīng)list的頭部,最后返回被移除的元素值,整個(gè)操作是原子的.如果srckey是空
或者不存在返回nil

Set
?redis的set是string類型的無序集合。
?set元素最大可以包含(2的32次方-1)個(gè)元素。
?set的是通過hash table實(shí)現(xiàn)的,hash table會(huì)隨著添加或者刪除自動(dòng)的調(diào)整大小
關(guān)于set集合類型除了基本的添加刪除操作,其他有用的操作還包含集合的取并集(union),交集(intersection),差集(difference)。通過這些操作可以很容易的實(shí)現(xiàn)sns中的好友推薦和blog的tag功能。

Set相關(guān)命令
?sadd key member 添加一個(gè)string元素到,key對(duì)應(yīng)的set集合中,成功返回1,如果元素以及在集合中返回0,key對(duì)應(yīng)的set不存在返回錯(cuò)誤
?srem key member 從key對(duì)應(yīng)set中移除給定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key對(duì)應(yīng)的不是set類型的值返回錯(cuò)誤
?spop key 刪除并返回key對(duì)應(yīng)set中隨機(jī)的一個(gè)元素,如果set是空或者key不存在返回nil
?srandmember key 同spop,隨機(jī)取set中的一個(gè)元素,但是不刪除元素
?smove srckey dstkey member 從srckey對(duì)應(yīng)set中移除member并添加到dstkey對(duì)應(yīng)set中,整個(gè)操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set類型返回錯(cuò)誤
?scard key 返回set的元素個(gè)數(shù),如果set是空或者key不存在返回0
?sismember key member 判斷member是否在set中,存在返回1,0表示不存在或者key不存在
?sinter key1 key2...keyN 返回所有給定key的交集
?sinterstore dstkey key1...keyN 同sinter,但是會(huì)同時(shí)將交集存到dstkey下
?sunion key1 key2...keyN 返回所有給定key的并集
?sunionstore dstkey key1...keyN 同sunion,并同時(shí)保存并集到dstkey下
?sdiff key1 key2...keyN 返回所有給定key的差集
?sdiffstore dstkey key1...keyN 同sdiff,并同時(shí)保存差集到dstkey下
?smembers key 返回key對(duì)應(yīng)set的所有元素,結(jié)果是無序的

Sorted set
?和set一樣sorted set也是string類型元素的集合,不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的score。sorted set的實(shí)現(xiàn)是skip list和hash table的混合體。當(dāng)元素被添加到集合中時(shí),一個(gè)元素到score的映射被添加到hash table中,另一個(gè)score到元素的映射被添加到skip list
并按照score排序,所以就可以有序的獲取集合中的元素。
Sorted set 相關(guān)命令
?zadd key score member 添加元素到集合,元素在集合中存在則更新對(duì)應(yīng)score
?zrem key member 刪除指定元素,1表示成功,如果元素不存在返回0
?zincrby key incr member 增加對(duì)應(yīng)member的score值,然后移動(dòng)元素并保持skip list有序。返回更新后的score值
?zrank key member 返回指定元素在集合中的排名(下標(biāo),非score),集合中元素是按score從小到大排序的
?zrevrank key member 同上,但是集合中元素是按score從大到小排序
?zrange key start end 類似lrange操作從集合中取指定區(qū)間的元素。返回的是有序結(jié)果
?zrevrange key start end 同上,返回結(jié)果是按score逆序的
?zrangebyscore key min max 返回集合中score在給定區(qū)間的元素
?zcount key min max 返回集合中score在給定區(qū)間的數(shù)量
?zcard key 返回集合中元素個(gè)數(shù)
?zscore key element 返回給定元素對(duì)應(yīng)的score
?zremrangebyrank key min max 刪除集合中排名在給定區(qū)間的元素
?zremrangebyscore key min max 刪除集合中score在給定區(qū)間的元素

Hash
?redis hash是一個(gè)string類型的field和value的映射表。
?hash特別適合用于存儲(chǔ)對(duì)象。相較于將對(duì)象的每個(gè)字段存成單個(gè)string類型。將一個(gè)對(duì)象存儲(chǔ)在hash類型中會(huì)占用更少的內(nèi)存,并且可以更方便的存取整個(gè)對(duì)象。
Hash相關(guān)命令
?hset key field value 設(shè)置hash field為指定值,如果key不存在,則先創(chuàng)建
?hget key field 獲取指定的hash field
?hmget key filed1....fieldN 獲取全部指定的hash filed
?hmset key filed1 value1 ... filedN valueN 同時(shí)設(shè)置hash的多個(gè)field
?hincrby key field integer 將指定的hash filed 加上給定值
?hexists key field 測(cè)試指定field是否存在
?hdel key field 刪除指定的hash field
?hlen key 返回指定hash的field數(shù)量
?hkeys key 返回hash的所有field
?hvals key 返回hash的所有value
hgetall 返回hash的所有filed和value

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,400評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,136評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,452評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,818評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,997評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,552評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,292評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,510評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,721評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評(píng)論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,235評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,480評(píng)論 2 379

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