Redis集群搭建的三種方式

一退唠、單節(jié)點(diǎn)實(shí)例

單節(jié)點(diǎn)實(shí)例還是比較簡(jiǎn)單的葬燎,平時(shí)做個(gè)測(cè)試眯分,寫(xiě)個(gè)小程序如果需要用到緩存的話拌汇,啟動(dòng)一個(gè)

Redis 還是很輕松的,做為一個(gè) key/value 數(shù)據(jù)庫(kù)也是可以勝任的

我的官方群點(diǎn)擊此處

二弊决、主從模式(master/slaver)

redis 主從模式配置

主從模式:

redis 的主從模式噪舀,使用異步復(fù)制,slave 節(jié)點(diǎn)異步從 master 節(jié)點(diǎn)復(fù)制數(shù)據(jù)飘诗,master

節(jié)點(diǎn)提供讀寫(xiě)服務(wù)与倡,slave 節(jié)點(diǎn)只提供讀服務(wù)(這個(gè)是默認(rèn)配置,可以通過(guò)修改配置文件

slave-read-only 控制)昆稿。master 節(jié)點(diǎn)可以有多個(gè)從節(jié)點(diǎn)纺座。配置一個(gè) slave 節(jié)點(diǎn)只需要在

redis.conf 文件中指定 slaveof master-ip master-port 即可。

從節(jié)點(diǎn)開(kāi)啟主從復(fù)制溉潭,有 3 種方式:

配置文件

在從服務(wù)器的配置文件中加入:slaveof<masterip><masterport>

啟動(dòng)命令

redis-server 啟動(dòng)命令后加入:slaveof<masterip><masterport>

客戶端命令

Redis 服務(wù)器啟動(dòng)后直接通過(guò)客戶端執(zhí)行命令:slaveof<masterip><masterport>净响,則該 Redis

實(shí)例成為從節(jié)點(diǎn)少欺。

上述 3 種方式是等效的,下面以客戶端命令的方式為例馋贤,看一下當(dāng)執(zhí)行了 slaveof 后赞别,Redis

主節(jié)點(diǎn)和從節(jié)點(diǎn)的變化。

本示例:一個(gè) master 節(jié)點(diǎn)有兩個(gè) slave 節(jié)點(diǎn)

配置:

1配乓,cd /usr/local/redis/redis-4.0.2

切換到當(dāng)前 redis 安裝路徑

2仿滔, mkdir config

新建一個(gè)文件夾,存放 redis 的配置文件

3犹芹,在 config 下崎页,新建三個(gè)配置文件,如下:

cd config
vi master-6739.conf
bind 0.0.0.0
port 6379
logfile "6379.log"
dbfilename "dump-6379.rdb"
daemonize yes
rdbcompression yes
vi slave-6380.confbind 0.0.0.0
port 6380
logfile "6380.log"
dbfilename "dump-6380.rdb"
daemonize yes
rdbcompression yes
slaveof 192.168.81.135 6379
vi slave-6381.conf
bind 0.0.0.0
port 6381
logfile "6381.log"
dbfilename "dump-6381.rdb"
daemonize yes
rdbcompression yes
slaveof 192.168.81.135 6379

master-6739.conf腰埂,為主節(jié)點(diǎn)配置文件飒焦,**slave-6380.conf,slave-6381.conf **為從節(jié)點(diǎn)配置文件

在從節(jié)點(diǎn)的配置文件中使用:slaveof 指定 master 節(jié)點(diǎn)

4盐固,啟動(dòng)三臺(tái) reids 服務(wù)

[root@localhost redis-4.0.2]# ./src/redis-server config/master-6379.conf  
[root@localhost redis-4.0.2]# ./src/redis-server config/slave-6380.conf  
[root@localhost redis-4.0.2]# ./src/redis-server config/slave-6381.conf

查看一下 redis 服務(wù)

測(cè)試主從模式:

a,先分別連上三臺(tái) Redis 服務(wù)丈挟,獲取 key 為 name 的值刁卜,通過(guò)-p 指定連接那個(gè)端口的 redis 服務(wù)

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6379 
127.0.0.1:6379> get name 
(nil) 
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6380 
127.0.0.1:6380> get name 
(nil) 
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6381 
127.0.0.1:6381> get name 
(nil) 
#獲取的值都為空

b,給 master 節(jié)點(diǎn) set 一個(gè) key

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6379
127.0.0.1:6379> set name cmy
OK
127.0.0.1:6379> get name
"cmy"

c曙咽,slave 節(jié)點(diǎn)直接讀取 key 為 name 的值

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6380
127.0.0.1:6380> get name
"cmy"
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6381
127.0.0.1:6381> get name
"cmy"

d蛔趴,slave 節(jié)點(diǎn)只提供讀服務(wù),不能進(jìn)行寫(xiě)入操作

127.0.0.1:6381> set age 23
(error) READONLY You can't write against a read only slave.

注意

使用主從模式時(shí)應(yīng)注意 matser 節(jié)點(diǎn)的持久化操作例朱,matser 節(jié)點(diǎn)在未使用持久化的情況詳情

下如果宕機(jī)孝情,并自動(dòng)重新拉起服務(wù),從服務(wù)器會(huì)出現(xiàn)丟失數(shù)據(jù)的情況洒嗤。

首先箫荡,禁止 matser 服務(wù)持久化

127.0.0.1:6379> CONFIG SET save "" 

OK

在 master 節(jié)點(diǎn) set 一個(gè)值

127.0.0.1:6379> set age 23 

OK

slave 節(jié)點(diǎn)可以 get 到 age 的值

127.0.0.1:6380> get age 
"23" 

關(guān)掉 master 節(jié)點(diǎn)服務(wù)

127.0.0.1:6379> shutdown 
not connected>  

slave 節(jié)點(diǎn)此時(shí)仍可以 get 到 age 的值

127.0.0.1:6380> get age 
"23" 

重啟 master 服務(wù),此時(shí)獲取不到 age 的值

[root@localhost redis-4.0.2]# ./src/redis-server config/master-6379.conf  
[root@localhost redis-4.0.2]# ./src/redis-cli -p 6379 
127.0.0.1:6379> get age 
(nil) 

slave 節(jié)點(diǎn)此時(shí)在獲取 age 的值為空渔隶,數(shù)據(jù)丟失

[root@localhost redis-4.0.2]# ./src/redis-cli -p 6380 
127.0.0.1:6380> get age 
(nil) 

數(shù)據(jù)丟失的原因:因?yàn)?master 服務(wù)掛了之后羔挡,重啟服務(wù)后,slave 節(jié)點(diǎn)會(huì)與 master 節(jié)點(diǎn)進(jìn)行

一次完整的重同步操作间唉,所以由于 master 節(jié)點(diǎn)沒(méi)有持久化绞灼,就導(dǎo)致 slave 節(jié)點(diǎn)上的數(shù)據(jù)也會(huì)

丟失掉。所以在配置了 Redis 的主從模式的時(shí)候呈野,應(yīng)該打開(kāi)主服務(wù)器的持久化功能低矮。

到這,redis 的主從模式就已經(jīng)完成了

談?wù)勎艺J(rèn)為主從模式的必要性:

主從模式的一個(gè)作用是備份數(shù)據(jù)被冒,這樣當(dāng)一個(gè)節(jié)點(diǎn)損壞(指不可恢復(fù)的硬件損壞)時(shí)军掂,數(shù)據(jù)

因?yàn)橛袀浞萋滞桑梢苑奖慊謴?fù)。

另一個(gè)作用是負(fù)載均衡良姆,所有客戶端都訪問(wèn)一個(gè)節(jié)點(diǎn)肯定會(huì)影響 Redis 工作效率肠虽,有了主從

以后,查詢操作就可以通過(guò)查詢從節(jié)點(diǎn)來(lái)完成玛追。

對(duì)主從模式必須的理解(結(jié)論已經(jīng)驗(yàn)證過(guò)税课,可以自行驗(yàn)證):

一個(gè) Master 可以有多個(gè) Slaves

默認(rèn)配置下,master 節(jié)點(diǎn)可以進(jìn)行讀和寫(xiě)痊剖,slave 節(jié)點(diǎn)只能進(jìn)行讀操作韩玩,寫(xiě)操作被禁止

不要修改配置讓 slave 節(jié)點(diǎn)支持寫(xiě)操作,沒(méi)有意義陆馁,原因一找颓,寫(xiě)入的數(shù)據(jù)不會(huì)被同步到其他

節(jié)點(diǎn);原因二叮贩,當(dāng) master 節(jié)點(diǎn)修改同一條數(shù)據(jù)后击狮,slave 節(jié)點(diǎn)的數(shù)據(jù)會(huì)被覆蓋掉

slave 節(jié)點(diǎn)掛了不影響其他 slave 節(jié)點(diǎn)的讀和 master 節(jié)點(diǎn)的讀和寫(xiě),重新啟動(dòng)后會(huì)將數(shù)據(jù)從

master 節(jié)點(diǎn)同步過(guò)來(lái)

master 節(jié)點(diǎn)掛了以后益老,不影響 slave 節(jié)點(diǎn)的讀彪蓬,Redis 將不再提供寫(xiě)服務(wù),master 節(jié)點(diǎn)啟動(dòng)

后 Redis 將重新對(duì)外提供寫(xiě)服務(wù)捺萌。

master 節(jié)點(diǎn)掛了以后档冬,不會(huì) slave 節(jié)點(diǎn)重新選一個(gè) master

對(duì)有密碼的情況說(shuō)明一下,當(dāng) master 節(jié)點(diǎn)設(shè)置密碼時(shí):

客戶端訪問(wèn) master 需要密碼

啟動(dòng) slave 需要密碼桃纯,在配置中進(jìn)行配置即可

客戶端訪問(wèn) slave 不需要密碼

主從節(jié)點(diǎn)的缺點(diǎn)

主從模式的缺點(diǎn)其實(shí)從上面的描述中可以得出:

master 節(jié)點(diǎn)掛了以后酷誓,redis 就不能對(duì)外提供寫(xiě)服務(wù)了,因?yàn)槭O碌?slave 不能成為 master

這個(gè)缺點(diǎn)影響是很大的态坦,尤其是對(duì)生產(chǎn)環(huán)境來(lái)說(shuō)盐数,是一刻都不能停止服務(wù)的,所以一般的生

產(chǎn)壞境是不會(huì)單單只有主從模式的伞梯。所以有了下面的 sentinel 模式娘扩。三、sentinel 模式

Redis 哨兵模式壮锻,用現(xiàn)在流行的話可以說(shuō)就是一個(gè)“哨兵機(jī)器人”琐旁,給“哨兵機(jī)器人”進(jìn)行相

應(yīng)的配置之后,這個(gè)"機(jī)器人"可以 7*24 小時(shí)工作猜绣,它能能夠自動(dòng)幫助你做一些事情灰殴,如監(jiān)

控,提醒,自動(dòng)處理故障等牺陶。

Redis-sentinel 簡(jiǎn)介

Redis-sentinel 是 Redis 的作者 antirez伟阔,因?yàn)?Redis 集群的被各大公司使用,每個(gè)公司要寫(xiě)自 己的集群管理工具掰伸,于是 antirez 花了幾個(gè)星期寫(xiě)出了 Redis-sentinel皱炉。

Redis 的 Sentinel 系統(tǒng)用于管理多個(gè) Redis 服務(wù)器(instance),Redis 的 Sentinel 為 Redis 提供了高可用性狮鸭。使用哨兵模式創(chuàng)建一個(gè)可以不用人為干預(yù)而應(yīng)對(duì)各種故障的 Redis 部署合搅。

該系統(tǒng)執(zhí)行以下三個(gè)任務(wù):

監(jiān)控(Monitoring):Sentinel 會(huì)不斷地檢查你的主服務(wù)器和從服務(wù)器是否允許正常。

提醒(Notification):當(dāng)被監(jiān)控的某個(gè) Redis 服務(wù)器出現(xiàn)問(wèn)題時(shí)歧蕉,Sentinel 可以通過(guò) API 向管 理員或者其他應(yīng)用程序發(fā)送通知灾部。

自動(dòng)故障遷移(Automatic failover): (1)當(dāng)一個(gè)主服務(wù)器不能正常工作時(shí),Sentinel 會(huì)開(kāi)

始一次自動(dòng)故障遷移操作惯退,他會(huì)將失效主服務(wù)器的其中一個(gè)從服務(wù)器升級(jí)為新的主服務(wù)器赌髓,

并讓失效主服務(wù)器的其他從服務(wù)器改為復(fù)制新的主服務(wù)器;(2)客戶端試圖連接失敗的主服

務(wù)器時(shí)催跪,集群也會(huì)向客服端返回新主服務(wù)器的地址锁蠕,是的集群可以使用新主服務(wù)器代替失效

服務(wù)器。

sentinel 的分布式特性

Redis Sentinel 是一個(gè)分布式系統(tǒng)懊蒸,

你可以在一個(gè)架構(gòu)中運(yùn)行多個(gè) Sentinel 進(jìn)程(progress)荣倾, 這些進(jìn)程使用流言協(xié)議(gossip protocols)來(lái)接收關(guān)于主服務(wù)器是否下線的信息, 并使用投 票協(xié)議(agreement protocols)來(lái)決定是否執(zhí)行自動(dòng)故障遷移榛鼎, 以及選擇哪個(gè)從服務(wù)器作為 新的主服務(wù)器逃呼。

單個(gè) sentinel 進(jìn)程來(lái)監(jiān)控 redis 集群是不可靠的鳖孤,當(dāng) sentinel 進(jìn)程宕掉后(sentinel 本身也有單 點(diǎn)問(wèn)題者娱,single-point-of-failure)整個(gè)集群系統(tǒng)將無(wú)法按照預(yù)期的方式運(yùn)行。所以有必要將

sentinel 集群苏揣,這樣有幾個(gè)好處:

  • 有一些 sentinel 進(jìn)程宕掉了黄鳍,依然可以進(jìn)行 redis 集群的主備切換;
  • 如果只有一個(gè) sentinel 進(jìn)程平匈,如果這個(gè)進(jìn)程運(yùn)行出錯(cuò)框沟,或者是網(wǎng)絡(luò)堵塞,那么將無(wú)法實(shí)現(xiàn) redis

集群的主備切換(單點(diǎn)問(wèn)題);

如果有多個(gè) sentinel增炭,redis 的客戶端可以隨意地連接任意一個(gè) sentinel 來(lái)獲得關(guān)于 redis 集群 中的信息

一個(gè)健壯的部署至少需要三個(gè)哨兵實(shí)例忍燥。

三個(gè)哨兵實(shí)例應(yīng)該放置在客戶使用獨(dú)立方式確認(rèn)故障的計(jì)算機(jī)或虛擬機(jī)中。例如不同的物理

機(jī)或不同可用區(qū)域的虛擬機(jī)隙姿∶仿ⅲ【本次講解是一個(gè)機(jī)器上進(jìn)行搭建,和多級(jí)是一個(gè)道理背景

最近項(xiàng)目需求输玷,接觸到了 Redis 的搭建队丝,簡(jiǎn)單記錄下搭建過(guò)程中遇到的坑

總體配置

192.168.1.100:6379 -> master 
192.168.1.101:6379 -> slave 
192.168.1.102:6379 -> slave 
192.168.1.100:26379 -> sentinel 
192.168.1.101:26379 -> sentinel 
192.168.1.102:26379 -> sentinel 

搭建步驟

1.安裝 redis

# 解壓 
tar -xvf /usr/local/redis-3.2.11.tar.gz 
mkdir -p /usr/local/redis/bin 
cp  
/usr/local/redis/src/{redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-sentinel,redi 
s-server,redis-trib.rb} /usr/local/redis/bin 
mkdir -p /u01/redis/{6379/{log,data,pid,conf},26379/{log,data,pid,conf} 
# 添加環(huán)境變量 
echo "export PATH=/usr/local/redis/bin:$PATH" >> /etc/profile 
source /etc/profile 

2.redis-6379 配置

redis 節(jié) 點(diǎn) 配 置 基 本 如 下 靡馁, 把 如 下 配 置 分 別 cp 到 三 臺(tái) 虛 擬 機(jī) 的

/u01/redis/6379/conf/redis_6379.conf 
bind 0.0.0.0 
protected-mode no 
daemonize yes 
pidfile "/u01/redis/6379/pid/redis_6379.pid" 
port 6379 
tcp-backlog 511 
timeout 0tcp-keepalive 0 
loglevel notice 
logfile "/u01/redis/6379/log/redis_6379.log" 
databases 16 
stop-writes-on-bgsave-error yes 
rdbcompression yes 
rdbchecksum yes 
dbfilename "dump.rdb" 
dir "/u01/redis/6379/data" 
slave-serve-stale-data yes 
slave-read-only yes 
repl-diskless-sync no 
repl-diskless-sync-delay 5 
repl-disable-tcp-nodelay no 
slave-priority 100 
min-slaves-to-write 1 
min-slaves-max-lag 10 
appendonly no 
appendfilename "appendonly.aof" 
appendfsync everysec 
no-appendfsync-on-rewrite no 
auto-aof-rewrite-percentage 100 
auto-aof-rewrite-min-size 64mb 
aof-load-truncated yes 
lua-time-limit 5000 
slowlog-log-slower-than 10000 
slowlog-max-len 128 
latency-monitor-threshold 0 
notify-keyspace-events "" 
hash-max-ziplist-entries 512 
hash-max-ziplist-value 64 
list-max-ziplist-entries 512 

啟動(dòng)服務(wù)

# 在三臺(tái)虛擬機(jī)上分別執(zhí)行 
redis-server /u01/redis/6379/conf/redis_6379.conf 

建立主從關(guān)系

# 在 192.168.1.101 
redis-cli -p 6379 SLAVEOF 192.168.1.100 6379 
# 在 192.168.1.102 
redis-cli -p 6379 SLAVEOF 192.168.1.100 6379查看 Replication 
192.168.1.101:6379> info replication 
# Replication 
role:master 
connected_slaves:2 
min_slaves_good_slaves:2 
slave0:ip=192.168.1.102,port=6379,state=online,offset=9577826,lag=1 
slave1:ip=192.168.1.103,port=6379,state=online,offset=9577965,lag=0 
master_repl_offset:9577965 
repl_backlog_active:1 
repl_backlog_size:1048576 
repl_backlog_first_byte_offset:8529390 
repl_backlog_histlen:1048576 
192.168.1.102:6379> info replication 
# Replication 
role:slave 
master_host:192.168.1.101 
master_port:6379 
master_link_status:up 
master_last_io_seconds_ago:0 
master_sync_in_progress:0 
slave_repl_offset:9600220 
slave_priority:100 
slave_read_only:1 
connected_slaves:0 
min_slaves_good_slaves:0 
master_repl_offset:0 
repl_backlog_active:0 
repl_backlog_size:1048576 
repl_backlog_first_byte_offset:0 
repl_backlog_histlen:0 
192.168.1.103:6379> info replication 
# Replication 
role:slave 
master_host:192.168.1.101 
master_port:6379 
master_link_status:up 
master_last_io_seconds_ago:0 
master_sync_in_progress:0 
slave_repl_offset:9612675slave_priority:100 
slave_read_only:1 
connected_slaves:0 
min_slaves_good_slaves:0 
master_repl_offset:0 
repl_backlog_active:0 
repl_backlog_size:1048576 
repl_backlog_first_byte_offset:0 
repl_backlog_histlen:0 

3.sentinel-6379 配置

sentinel 節(jié) 點(diǎn) 配 置 基 本 如 下 , 把 如 下 配 置 分 別 cp 到 三 臺(tái) 虛 擬 機(jī) 的

/u01/redis/26379/conf/sentinel_26379.conf 

sentinel monitor mymaster 后監(jiān)控的是 redis 中的 master 節(jié)點(diǎn)机久,也就是 192.168.1.100臭墨,所以

這個(gè)文件在三臺(tái)機(jī)器上是相同的

port 26379 
bind 0.0.0.0 
daemonize yes 
protected-mode no 
dir "/u01/redis/26379/tmp" 
logfile "/u01/redis/26379/log/sentinel_26379.log" 
sentinel monitor mymaster 192.168.1.100 6379 1 

等待啟動(dòng)完畢后觀察/u01/redis/26379/conf/sentinel_26379.conf 文件變化

查看 sentinel 狀態(tài)用 info sentinel

redis-cli -h 192.168.1.100 -p 26379 info sentinel 
# Sentinel 
sentinel_masters:1 
sentinel_tilt:0 
sentinel_running_scripts:0 
sentinel_scripts_queue_length:0 
sentinel_simulate_failure_flags:0 
master0:name=zhuanche01,status=ok,address=192.168.1.100:6379,slaves=2,sentinels=3 

總結(jié)

我搭建的時(shí)候遇到了 192.168.1.101、192.168.1.102 上的 sentinel 啟動(dòng)后一段時(shí)間出錯(cuò)的問(wèn)題膘盖,

后來(lái)發(fā)現(xiàn)是沒(méi)有監(jiān)控 master

再就是出問(wèn)題了多看 log

四胧弛、cluster 模式cluster 的出現(xiàn)是為了解決單機(jī) Redis 容量有限的問(wèn)題,將 Redis 的數(shù)據(jù)根據(jù)一定的規(guī)則分配

到多臺(tái)機(jī)器衔憨。對(duì) cluster 的一些理解:

cluster 可以說(shuō)是 sentinel 和主從模式的結(jié)合體叶圃,通過(guò) cluster 可以實(shí)現(xiàn)主從和 master 重選功

能,所以如果配置兩個(gè)副本三個(gè)分片的話践图,就需要六個(gè) Redis 實(shí)例掺冠。

因?yàn)?Redis 的數(shù)據(jù)是根據(jù)一定規(guī)則分配到 cluster 的不同機(jī)器的,當(dāng)數(shù)據(jù)量過(guò)大時(shí)码党,可以新增

機(jī)器進(jìn)行擴(kuò)容

這種模式適合數(shù)據(jù)量巨大的緩存要求德崭,當(dāng)數(shù)據(jù)量不是很大使用 sentinel 即可。

騰訊T3-T4標(biāo)準(zhǔn)精品PHP架構(gòu)師教程目錄大全揖盘,只要你看完保證薪資上升一個(gè)臺(tái)階(持續(xù)更新)?

以上內(nèi)容希望幫助到大家眉厨,很多PHPer在進(jìn)階的時(shí)候總會(huì)遇到一些問(wèn)題和瓶頸,業(yè)務(wù)代碼寫(xiě)多了沒(méi)有方向感兽狭,不知道該從那里入手去提升憾股,對(duì)此我整理了一些資料,包括但不限于:分布式架構(gòu)箕慧、高可擴(kuò)展服球、高性能、高并發(fā)颠焦、服務(wù)器性能調(diào)優(yōu)斩熊、TP6,laravel伐庭,YII2粉渠,Redis,Swoole圾另、Swoft霸株、Kafka、Mysql優(yōu)化集乔、shell腳本去件、Docker、微服務(wù)、Nginx等多個(gè)知識(shí)點(diǎn)高級(jí)進(jìn)階干貨需要的可以免費(fèi)分享給大家箫攀,官方群點(diǎn)擊此處肠牲。

部分資料截圖:

image
image.png

image.png

還有限時(shí)精品福利:

★騰訊高級(jí)PHP工程師筆試題目

★億級(jí)PV高并發(fā)場(chǎng)景訂單的處理

★laravel開(kāi)發(fā)天貓商城組件服務(wù)

★戰(zhàn)旗TV視頻直播的架構(gòu)項(xiàng)目實(shí)戰(zhàn)

掃描下面二維碼領(lǐng)取

https://qm.qq.com/cgi-bin/qm/qr?k=tnc-MbbNXPn5psmmPtjh0VPlxH-g4Mtq&authKey=xT5SnnVXhzkkXIIgP0E2YmSexJDtvy0jiVMlSjIb8TbChYuG98yysUeas7jWUy/S&noverify=0 (二維碼自動(dòng)識(shí)別)

對(duì)PHP后端技術(shù),對(duì)PHP架構(gòu)技術(shù)感興趣的朋友靴跛,我的官方群點(diǎn)擊此處缀雳,一起學(xué)習(xí),相互討論梢睛。

群內(nèi)已經(jīng)有管理將知識(shí)體系整理好(源碼肥印,學(xué)習(xí)視頻等資料),歡迎加群免費(fèi)領(lǐng)取绝葡。

本課程深度對(duì)標(biāo)騰訊T3-T4標(biāo)準(zhǔn)深碱,貼身打造學(xué)習(xí)計(jì)劃為web開(kāi)發(fā)人員進(jìn)階中高級(jí)、架構(gòu)師提升技術(shù)藏畅,為自己增值漲薪敷硅!加入BAT特訓(xùn)營(yíng)還可以獲得內(nèi)推大廠名額以及GO語(yǔ)言學(xué)習(xí)權(quán)限!S溲帧绞蹦!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市榜旦,隨后出現(xiàn)的幾起案子幽七,更是在濱河造成了極大的恐慌,老刑警劉巖溅呢,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澡屡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡咐旧,警方通過(guò)查閱死者的電腦和手機(jī)驶鹉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)休偶,“玉大人梁厉,你說(shuō)我怎么就攤上這事辜羊√ざ担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵八秃,是天一觀的道長(zhǎng)碱妆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)昔驱,這世上最難降的妖魔是什么疹尾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上纳本,老公的妹妹穿的比我還像新娘窍蓝。我一直安慰自己,他們只是感情好繁成,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布吓笙。 她就那樣靜靜地躺著,像睡著了一般巾腕。 火紅的嫁衣襯著肌膚如雪面睛。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天尊搬,我揣著相機(jī)與錄音叁鉴,去河邊找鬼。 笑死佛寿,一個(gè)胖子當(dāng)著我的面吹牛幌墓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冀泻,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼克锣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了腔长?” 一聲冷哼從身側(cè)響起袭祟,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捞附,沒(méi)想到半個(gè)月后巾乳,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸟召,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年胆绊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欧募。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡压状,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跟继,到底是詐尸還是另有隱情种冬,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布舔糖,位于F島的核電站娱两,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏金吗。R本人自食惡果不足惜十兢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一趣竣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旱物,春花似錦遥缕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至烤蜕,卻和暖如春封孙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背讽营。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工虎忌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人橱鹏。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓膜蠢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親莉兰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挑围,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355