(二十)企業部分之redis

Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。 它支持多種類型的數據結構,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 Redis 內置了 複製(replication),LUA腳本(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同級別的 磁盤持久化(persistence), 並通過 Redis哨兵(Sentinel)和自動 分區(Cluster)提供高可用性(high availability)。


原理整理後補


1.

yum install -y mysql-server
/etc/init.d/mysqld start
netstat -antlpe    ##mysql端口3306已開


所需軟件包:redis-3.0.2.tar.gz

 

tar zxf redis-3.0.2.tar.gz
cd redis-3.0.2
yum install -y gcc
make
make install    ##不需要make test這一步驟,可以直接通過使用測試。make test 需要進到src/下,並裝tcl


ls /usr/local/bin/

wKiom1d6nynCeP7UAAAaaBlPXOM824.png


詳解:

redis-server: Redis服務主程序。

redis-cli: Redis 客戶端命令行工具,也可以用 telnet 來操作。

redis-benchmark: Redis 性能測試工具,用於測試讀寫性能。

redis-check-aof:檢查 redis aof 文件完整性,aof 文件持久化記錄服務器執行的所有寫操作命令,用於還原數據。

redis-check-dump:檢查 redis rdb 文件的完整性,rdb 就是快照存儲,即按照一定的策略週期性的將數據保存到磁盤,是默認的持久化方式。

redis-sentinel:集羣管理工具,主要負責主從切換。

 

cd utils/
./install_server.sh
/etc/init.d/redis_6379 restart
netstat -antlpe


redis-cli monitor    ##監控數據

wKioL1d6n16w1feDAAAM2UNKexE631.png

 

redis-cli    ##臨時,重啓數據消失

wKioL1d6n3XSzyYcAAAv61iZ40g739.png


要想永久的存入數據,可以在配置文件中寫入。

 

 

文件目錄:redis

 

cd /root/redis
yum install -y nginx-1.8.0-1.el6.ngx.x86_64.rpm  php-*
php -m    ##看到支持的軟件


vim /etc/php.ini

修改timezone

date.timezone = Asia/Shanghai

 

/etc/init.d/php-fpm start
netstat -antlpe

wKiom1d6n8TQzggDAACZ9DX2YQ8724.png

vim /etc/php-fpm.d/www.conf

修改所屬的用戶和組爲以下內容

 39 user = nginx

 41 group = nginx

 

/etc/init.d/php-fpm restart
vim /etc/nginx/conf.d/default.conf

在第10index後面添加index.php

取消掉30-36行的註釋,將fastcgi_param後的目錄改爲/usr/share/nginx/html

wKiom1d6oGCy9n3iAAATNko0GBA022.png

 

wKioL1d6oH-R71aJAABCb2IYNzI714.png

cd /usr/share/nginx/html/
vim index.php

內容如下:

<?php

phpinfo()

?>

 

/etc/init.d/nginx start

網頁訪問http://172.25.45.1

wKioL1d6oYWyPWSAAADflLb4VpI910.png

2.

cd /root/redis
yum install -y unzip
unzip phpredis-master.zip
cd phpredis-master
phpize 
./configure
make
make install

 

cd /usr/lib64/php/modules/
ls
cd /etc/php.d
cp mysql.ini redis.ini
vim redis.ini

將內容修改爲以下:

extension=redis.so

 

/etc/init.d/php-fpm reload
php -m | grep redis

wKioL1d6oaLjeyZuAAAMq5E1Ph8376.png

 

mysql 
mysql> show databases;    ##默認有一個test數據庫,如沒有則創建一個。
mysql> quit


 

cd /root/redis
mysql < test.sql
mysql 
mysql> use test;
mysql> select * from test;
mysql> grant all on *.* to redis@localhost identified by 'westos';
mysql> quit

wKiom1d6oc6AJd0SAABijlZwYYc181.png

 

mysql -uredis -pwestos
mysql> use test;
mysql> select * from test;
mysql> quit
cp /root/redis/test.php /usr/share/nginx/html/
cd /usr/share/nginx/html/
rm -rf index.php 
mv test.php index.php


網頁訪問http://172.25.45.1(刷新兩次)

wKiom1d6ogXCWk93AACIWRpwaVI223.png

 

redis-cli

127.0.0.1:6379> get 1

"test1"

127.0.0.1:6379> get 2

"test2"

127.0.0.1:6379> get 3

"test3"

127.0.0.1:6379> quit

wKioL1d6oh7D1z70AAAkGdEjZTE417.png

 

mysql 
mysql> use test;
mysql> update test set name='westos' where id=1;
mysql> quit

wKiom1d6ojHSJPyWAAAmwpgnVhg348.png


網頁訪問http://172.25.45.1(刷新)    ##值不變,不更新

 

redis-cli
127.0.0.1:6379> get 1
"test1"
127.0.0.1:6379> del 1
(integer) 1


網頁訪問http://172.25.45.1(刷新兩次)    ##更新 

wKioL1d6ok7BXU3yAAALR9EZZds598.png

 

redis-cli
127.0.0.1:6379> get 1    ##網頁刷新過後纔有
"westos"
127.0.0.1:6379> quit

wKiom1d6om2AX-I3AAAle-1n0Dw022.png

 

3.

cd /root/redis
yum install -y gearmand-1.1.8-2.el6.x86_64.rpm libgearman-1.1.8-2.el6.x86_64.rpm
/etc/init.d/gearmand start
netstat -antlpe

wKioL1d6oouzZEyeAADCQuiP59w796.png

tar zxf gearman-1.1.2.tgz
cd gearman-1.1.2
phpize
./configure
cd ..
yum install -y libgearman-devel-1.1.8-2.el6.x86_64.rpm  libevent-devel-1.4.13-4.el6.x86_64.rpm libevent-doc-1.4.13-4.el6.noarch.rpm  libevent-headers-1.4.13-4.el6.noarch.rpm
cd gearman-1.1.2
./configure
make
make install

cd /etc/php.d
cp redis.ini gearman.ini
vim gearman.ini

將內容修改爲以下:

extension=gearman.so

 

/etc/init.d/php-fpm reload
php -m |grep gearman

wKioL1d6or2wa4X4AAAN09FU288255.png

 

yum install -y mysql-devel
cd /root/redis
unzip lib_mysqludf_json-master.zip
cd lib_mysqludf_json-master
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c    ##將lib_mysqludf_json.c編譯爲lib_mysqludf_json.so輸出
ls

wKiom1d6ou_j1p5pAAAd94010Oc653.png

mysql 
mysql> show global variables like 'plugin_dir';
mysql> quit

wKioL1d6owXRdn4-AAAkb-Elc9I621.png

 

cp lib_mysqludf_json.so /usr/lib64/mysql/plugin
mysql 
mysql> create function json_object returns string soname 'lib_mysqludf_json.so';
mysql> select * from mysql.func;
mysql> quit

wKioL1d6ox7g_D4LAAA8py3bICk178.png

cd /root/redis
tar zxf gearman-mysql-udf-0.6.tar.gz

cd gearman-mysql-udf-0.6
yum install -y gcc-c++
./configure --libdir=/usr/lib64/mysql/plugin/
make
make install
cd /usr/lib64/mysql/plugin/
mysql 
mysql> create function gman_do_background returns string soname 'libgearman_mysql_udf.so';
mysql> create function gman_servers_set returns string soname 'libgearman_mysql_udf.so';
mysql> select * from mysql.func;
mysql> quit

wKioL1d6o1bBGF5yAABw1JV4SjY307.png

netstat -antlpe[object Object]
mysql 
mysql> select gman_servers_set('127.0.0.1:4730');
mysql> quit

 wKiom1d6o8HR9JWgAAAjJQanQA8593.png


cd /root/redis
vim test.sql

將觸發器的註釋取消,在建表和插入數據語句前加上註釋

wKioL1d6o9vRsEEzAACIkVGOpVc847.png

mysql < test.sql
mysql
mysql> show triggers from test;
mysql> quit

wKioL1d6o_Khsl1aAABdujwZ0lA930.png

cp worker.php /usr/local/bin/
cd /usr/local/bin/
nohup php worker.php  &##後臺運行worker
ps ax

wKiom1d6pAbBQIowAABHIHMZRsc533.png

 

mysql
mysql> use test;
mysql> update test set name='redhat' where id=1;
mysql> quit

 

網頁訪問http://172.25.19.1(刷新)##更新

wKiom1d6pC2TJlocAABmkcuQb_8690.png

 

redis-cli
127.0.0.1:6379> get 1
"redhat"
127.0.0.1:6379> quit

wKioL1d6pD7AbtR4AAAWeFuEyOk781.png

 

4.slaveof實現主從複製

server2/server3

所需軟件包:redis-3.0.2.tar.gz

tar zxf redis-3.0.2.tar.gz
cd redis-3.0.2
yum install -y gcc
make
make install

cd utils/
./install_server.sh
vim /etc/redis/6379.conf

添加以下內容:

slaveof 172.25.45.1 6379

wKioL1d6pJLScbxnAAAbPQbJASg406.png


/etc/init.d/redis_6379 restart

此時用redis-cli進行測試,查看server1中的數據是否同步到server2server3中,更改值是否可以同步。

wKiom1d6pKPQvBpgAAAd72eb3kw286.png

wKiom1d6pKPSJZZRAAAeyDQq6OI677.png

wKioL1d6pKTgD5K_AAAepUVcGP4715.png

 

5.sentinel實現集羣切換

server1

vim /root/redis-3.0.2/sentinel.conf

53行,將IP改爲172.25.45.1(本機IP

82行,將30000改爲10000

115行,將180000改爲60000

 

grep -v ^# sentinel.conf

wKioL1d6pNKA2J3OAAA8sCGgTCY442.png

 

grep -v ^# sentinel.conf > /etc/sentinel.conf
redis-sentinel /etc/sentinel.conf

wKiom1d6pOqgwJItAAC0ybVlmVg886.png

scp /etc/sentinel.conf [email protected]:/etc/

scp /etc/sentinel.conf [email protected]:/etc/

 

wKioL1d6pSaQO7NhAABu-yYGplA984.png

 

redis-cli -h 172.25.45.1 -p 26379 info

wKiom1d6pTbg8UtTAACuj3SsUFo956.png


server2

vim /etc/sentinel.conf

刪除sentinel failover-timeout mymaster 60000之後的部分,並在這後面添上以下內容:

sentinel parallel-syncs mymaster 1
scp /etc/sentinel.conf [email protected]:/etc/
redis-sentinel /etc/sentinel.conf

wKioL1d6pW7TaGZQAAC0VsOa1f4360.png


server1:redis-cli -h 172.25.45.1 -p 26379 info

wKiom1d6pZDgjUiPAACtIwLARaE807.png



server3

redis-sentinel /etc/sentinel.conf


wKiom1d6pbuQz4sZAADE3Iytrjg016.png


server1:redis-cli -h 172.25.45.1 -p 26379 info

wKioL1d6pg6BZGmWAACrjoTrZq4067.png


 

測試:

server1

/etc/init.d/redis_6379 stop

wKiom1d6phyR40pRAAHKL-ECo_Y308.png


/etc/init.d/redis_6379 start
redis-cli -h 172.25.45.1 -p 26379 info

wKioL1d6pqCSjrY8AACvG4ooODM722.png


wKiom1d6ptWCYUjpAAKWGIJfQGs810.png


wKioL1d6pvXiDeb7AAHxoE-OOwU139.png


wKiom1d6pzfzBLyUAAIJ9rl9Py8735.png



 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章