redis实现session共享,哨兵
一、Redis介紹
1、redis是key-value的存儲系統,屬于非關系型數據庫
2、特點:支持數據持久化,可以讓數據在內存中保存到磁盤里(memcached:數據存在內存里,如果服務重啟,數據會丟失)
3、支持5種數據類型:string,hash,list,set,zset
4、兩種文件格式(即數據持久化)
(1)RDB(全量數據):多長時間/頻率,把內存中的數據刷到磁盤中,便于下次讀取文件時進行加載
(2)AOF(增量請求):類似mysql的二進制日志,不停地把對數據庫的更改語句記錄到日志中,下次重啟服務,會根據二進制日志把數據重寫一次,加載到內存里,實現數據持久化
5、存儲
(1)內存存儲 (2)磁盤存儲(RDB) ?(3)log文件(AOF)
?
二、Redis安裝
1、下載 redis-2.8.21.tar.gz?
2、解壓: ?tar zxvf redis-2.8.21.tar.gz
3、cd redis-2.8.21
4、編譯:make
5、安裝:?make PREFIX=/usr/local/redis install
6、創建配置文件所在的目錄:mkdir /usr/local/redis/etc
7、網上下載配置文件 redis.conf,放到 6 創建的目錄下
8、創建啟動腳本 /etc/init.d/redis?
9、添加redis用戶:useradd -s /sbin/nologin redis
10、創建var目錄,放置redis 的pid,rdb文件: ?mkdir /usr/local/redis/var
11、修改var目錄和配置文件權限
(1)chmod 777 /usr/local/redis/var
(2)chmod 755 /etc/init.d/redis
12、啟動redis: ?service redis start
13、ps aux | grep redis ? ? ?——》 監聽6379端口
?
三、php應用redis
前提:已經搭建了LAMP網站架構
php不能直接連redis,需要redis模塊的支持(redis是和開發語言結合使用的)
?
1、Redis擴展模塊安裝 (1)下載 phpredis.zip (2)解壓:unzip phpredis.zip (3)cd phpredis-develop/ (4)/usr/local/php/bin/phpize ? ——》生成 configure文件 (5)編譯redis.so的模塊 ./configure --with-php-config=/usr/local/php/bin/php-config (6)make && make install (7)檢查是否有redis.so文件 ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/ ——》 redis.so (8)編輯php.ini配置文件 最后1行加上 extension=redis.so (9)php檢查是否加載了redis.so模塊 /usr/local/php/bin/php -m |grep redis ——》redis 2、Redis 實現session共享 (1)apache測試目錄下創建info.php ——》 調用 phpinfo() 函數 (2)apache虛擬主機配置文件(extra目錄下)或者主配置文件httpd.conf 中定義 session存儲的處理方式和存儲路徑 (a)php_value session.save_handler "redis" (b)php_value session.save_path "tcp://127.0.0.1:6379" ps: 還有另外兩種方法 1、php的全局配置文件php.ini添加上面2行 2、如果是lnmp架構 php-fpm.conf對應的pool中加入? php_value[session.save_handler] = redis php_value[session.save_path] = "tcp://127.0.0.1:6379" (3)重啟apachectl /usr/local/apache2/bin/apachectl restart (4)瀏覽器訪問:192.168.131.110/info.php說明配置已經生效
?
3、Redis 存儲session 測試
(1)進入apache的htdoc下
(2)創建session.php
1 <?php 2 session_start(); 3 if (!isset($_SESSION['TEST'])) { 4 $_SESSION['TEST'] = time(); 5 } 6 $_SESSION['TEST3'] = time(); 7 print $_SESSION['TEST']; 8 print "<br><br>"; 9 print $_SESSION['TEST3']; 10 print "<br><br>"; 11 print session_id(); 12 ?>(3)測試 ?——》 記得去掉redis配置文件中的密碼設置,否則會返回500授權錯誤
(a)curl localhost/session.php
(b)redis-cli ?——》 在家目錄的.bashrc加入了redis啟動目錄
說明session已經存入到redis里了
?
?
四、redis的一些題外話
?redis一些重點
1、主從
2、持久化
3、哨兵實現主從切換
4、sentinel原理 (2.8.0之后有這個功能 sentinel.conf)
5、數據類型: hash,string 用得多
?
?
著重講下哨兵
1、支持redis協議
2、原理簡單描述
所有服務器都部署哨兵,哨兵去監控主從,要是redis或者哨兵死了,另外所有的機器會重新投票(就是下圖6379后面的數字,比如2),投死那臺掛掉的機器(2臺機器投票確認機器死了),再在另外所有的機器上自成一個體系,重新生成主
?
3、重點
(1)哨兵的配置文件也就是sentinel.conf是時時發生變化的
當主被投票死掉后,從起來于是產生一個新的主ip,新主會變成配置文件master的ip
(2)redis的配置文件也會改變
(3)當已死的主恢復后,就變成了從
(4)哨兵一定要是單數,否則選舉易出現問題,偶數可能會同票
?
4、幾個問題
(1)什么時候用redis?
所有的web第一次請求,先從db上取,取到的結果再返回給客戶端的同時也寫到redis去, 當再次用到這個結果時就從redis取,不需要再從db上取(很慢) (2)什么時候用redis高可用,也就是哨兵? 所有的研發程序需要連主(可寫),從(只讀)是寫不進去東西的 主redis有一個vip或者直連它的物理ip,研發程序直連redis寫東西時, redis主掛了,哨兵就起到作用 redis取不到數據,就從db上取——》程序做的,自動的降級 如果程序沒有做降級,redis主掛了,線上所有涉及到在redis寫的業務都用不了 ——》 所以就要用哨兵?
轉載于:https://www.cnblogs.com/windysai/p/6226995.html
總結
以上是生活随笔為你收集整理的redis实现session共享,哨兵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone Safari下iframe
- 下一篇: ionic build Android错