Redis簡介
? ? Redis是一個(gè)key-value存儲(chǔ)系統(tǒng)炮障。和Memcached類似,它支持豐富的數(shù)據(jù)類型然低,最為常用的數(shù)據(jù)類型主要有五種,分別是:string(字符串)、 hash(哈希)雳攘、list(鏈表)带兜、set(集合)和zset(有序集合)。Redis通常將數(shù)據(jù)存儲(chǔ)于內(nèi)存中吨灭,或被配置為使用虛擬內(nèi)存刚照。與memcached不同的是,redis會(huì)周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件沃于,以此來達(dá)到數(shù)據(jù)持久化的目的涩咖,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。當(dāng)前 Redis的應(yīng)用已經(jīng)非常廣泛繁莹,國內(nèi)像新浪檩互、淘寶,國外像 Flickr咨演、Github等均在使用Redis的緩存服務(wù)闸昨。
環(huán)境要求
? ? Windows 64位操作系統(tǒng)
? ??php-7.2.2-Win32-VC15-x64
? ? Redis-x64-4.0.2.2
? ? php_redis-4.0.2-7.2-ts-vc15-x64
? ? php_igbinary-2.0.7-7.2-ts-vc15-x64(php_redis擴(kuò)展依賴)
? ? 資源下載地址
? ??php7.2、Redis薄风、php-redis饵较、php-igbinary
? ? 注意事項(xiàng):windows環(huán)境下,https://github.com/MicrosoftArchive/redis/releases資源列表里面能找到的最新版本為3.2遭赂,但是卻沒有資源庫能夠提供對(duì)應(yīng)版本的php-redis擴(kuò)展循诉,真TM扯淡。
安裝Redis
? ? 將下載下來的redis壓縮包Redis-x64-4.0.2.2.zip解壓至某個(gè)目錄撇他,如圖:
? ? 根據(jù)自己所采用的啟動(dòng)方式茄猫,修改對(duì)應(yīng)的配置文件。另外困肩,出于安全方面的考慮划纽,通常需要為redis設(shè)置連接密碼,找到配置文件中含有requirepass foobared字樣的行锌畸,在其下面新增一行勇劣,如圖:
? ? 設(shè)置Redis連接密碼后,客戶端在連接Redis時(shí)需要通過AUTH <password>命令提供密碼潭枣。
數(shù)據(jù)持久化
? ? Redis提供了兩種持久化的方式比默,將內(nèi)存中的數(shù)據(jù),存儲(chǔ)在磁盤上卸耘。分別是rdb和aof(默認(rèn)關(guān)閉)退敦,默認(rèn)使用的是rdb方式,我們可以根據(jù)自己的需求蚣抗,決定采用哪一種方式侈百。
? ? RDB方式
? ? Redis通過創(chuàng)建快照的方式獲取某一時(shí)刻Redis中所有數(shù)據(jù)的副本瓮下,然后將其存放在指定的磁盤文件中。用戶可以針對(duì)該快照進(jìn)行各種操作钝域,比如:將快照文件復(fù)制到其他服務(wù)器從而完成Redis的主從復(fù)制讽坏,或者將快照留在原地,服務(wù)器重啟的時(shí)候重用數(shù)據(jù)例证。
? ? rdb配置
# 配置rdb文件名
dbfilename dump.rdb
# 配置rdb文件目錄
dir ./
# 策略配置
# 在規(guī)定的時(shí)間內(nèi)路呜,Redis發(fā)生寫操作的個(gè)數(shù)滿足條件,會(huì)觸發(fā)持久化命令织咧。
# 當(dāng)用戶設(shè)置了多個(gè)save的選項(xiàng)配置胀葱,只要其中任一條滿足,Redis都會(huì)觸發(fā)一次持久化操作笙蒙,比如:900秒之內(nèi)至少一次寫操作抵屿,或者300秒之內(nèi)至少發(fā)生10次寫操作,或者60秒之內(nèi)至少發(fā)生10000次寫操作都會(huì)觸發(fā)快照命令捅位。
save 900 1
save 300 10
save 60 10000
? ? AOF方式
? ? Redis的AOF持久化策略是將發(fā)送到Redis服務(wù)器端的每一條命令都記錄下來轧葛,并且保存到硬盤的AOF文件中,類似于打開日志文件艇搀,來一條命令就記錄一條尿扯。
? ? aof配置
# 是否開啟AOF模式,默認(rèn)為no焰雕,yes表示開啟
appendonly no
# 配置aof文件名
appendfilename "appendonly.aof"
# 配置aof文件目錄
dir ./
# AOF同步頻率,默認(rèn)為 everysec
# always 表示每次有數(shù)據(jù)發(fā)生修改時(shí)都會(huì)寫入AOF文件衷笋,這種方式會(huì)嚴(yán)重降低redis的性能。
# everysec 表示表示每秒鐘同步一次矩屁,該策略為AOF的缺省策略右莱。
# no 表示讓操作系統(tǒng)來決定應(yīng)該何時(shí)進(jìn)行同步,Linux系統(tǒng)往往可能30秒才會(huì)執(zhí)行一次
appendfsync everysec
# yes表示新寫操作不進(jìn)行同步档插,只是暫存在緩沖區(qū)里,避免造成磁盤IO操作沖突亚再,等重寫完成后再寫入郭膛,默認(rèn)為no?
no-appendfsync-on-rewrite no
# Redis恢復(fù)時(shí),是否忽略最后一條可能存在問題的指令(因?yàn)樽詈笠粭l指令可能存在問題氛悬,比如寫一半時(shí)突然斷電了)则剃,默認(rèn)為yes
aof-load-truncated yes
? ? 注意:如果RDB與AOF同時(shí)開啟,Redis 默認(rèn)會(huì)先加載AOF的配置文件如捅。
主從復(fù)制
? ? 在Redis中實(shí)現(xiàn)主從復(fù)制比較簡單棍现,只需要修改slave服務(wù)器配置文件中的slave相關(guān)參數(shù)即可。
# 設(shè)置master主服務(wù)器IP和端口
slaveof 127.0.0.1 10002
# slave是否只讀镜遣,從服務(wù)器負(fù)責(zé)讀操作己肮,主服務(wù)器負(fù)責(zé)寫操作,從而實(shí)現(xiàn)讀寫分離
slave-read-only yes
? ? 主從同步原理
? ? 1. Slave服務(wù)啟動(dòng),主動(dòng)連接Master谎僻,并發(fā)送SYNC命令娄柳,請(qǐng)求初始化同步
? ? 2. Master收到SYNC后,執(zhí)行BGSAVE命令生成RDB文件艘绍,并緩存該時(shí)間段內(nèi)的寫命令
? ? 3. Master完成RDB文件后赤拒,將其發(fā)送給所有Slave服務(wù)器,
? ? 4. Slave服務(wù)器接收到RDB文件后诱鞠,刪除內(nèi)存中舊的緩存數(shù)據(jù)挎挖,并裝載RDB文件
? ? 5. Master在發(fā)送完RDB后,即刻向所有Slave服務(wù)器發(fā)送緩存中的寫命令
? ? 6. 至此初始化完成航夺,后續(xù)進(jìn)行增量同步
啟動(dòng)Redis
? ? 此處有兩種啟動(dòng)方式蕉朵,通過命令行和通過系統(tǒng)服務(wù)的方式。
? ? 1.?命令行方式啟動(dòng):
? ? 切換到redis的根目錄敷存,比如根目錄為 D:\myplatform\Redis墓造,然后執(zhí)行命令 redis-server redis.windows.conf 即可啟動(dòng)redis服務(wù),如圖:
? ? 注意:此窗口請(qǐng)勿關(guān)閉锚烦,否則redis服務(wù)就會(huì)停止了觅闽。
? ? 2. 系統(tǒng)服務(wù)方式啟動(dòng):
? ? cmd窗口下,切換到redis根目錄涮俄,執(zhí)行如下命令:
? ? redis-server --service-install redis.windows-service.conf --loglevel verbose --service-name "Redis Service 4.0" --port 10001
? ?安裝成功后蛉拙,即可通過windows服務(wù)界面的方式啟動(dòng)redis了。
客戶端測試
? ? 新開一個(gè)cmd窗口彻亲,切換到redis根目錄孕锄,執(zhí)行命令 redis-cli,如果能看到redis的服務(wù)器地址和端口苞尝,就說明客戶端已成功連接畸肆。根據(jù)redis啟動(dòng)方式的不同,選擇相應(yīng)的命令宙址。
? ? 命令行方式:redis-cli
? ? 系統(tǒng)服務(wù)方式:redis-cli -h 127.0.0.1 -p 10001
安裝php-redis擴(kuò)展
? ? 將php_redis-4.0.2-7.2-ts-vc15-x64.zip壓縮包中的php_redis.dll文件轴脐,以及php_igbinary-2.0.7-7.2-ts-vc15-x64.zip壓縮包中的php_igbinary.dll文件,拷貝到php安裝目錄的ext目錄下抡砂,如圖:
? ? 然后大咱,修改php.ini配置文件,在里面加入如下擴(kuò)展:
? ??extension=php_igbinary.dll
? ??extension=php_redis.dll
? ? 注意:php_igbinary擴(kuò)展要放在php_redis擴(kuò)展的前面注益。
? ? 最后碴巾,重啟apache服務(wù)。
Redis相關(guān)完整軟件包
下載地址:Redis相關(guān)軟件包