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/
詳解:
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 ##監控數據
redis-cli ##臨時,重啓數據消失
要想永久的存入數據,可以在配置文件中寫入。
文件目錄: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
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
在第10行index後面添加index.php
取消掉30-36行的註釋,將fastcgi_param後的目錄改爲/usr/share/nginx/html
cd /usr/share/nginx/html/
vim index.php
內容如下:
<?php
phpinfo()
?>
/etc/init.d/nginx start
網頁訪問http://172.25.45.1
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
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
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(刷新兩次)
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
mysql mysql> use test; mysql> update test set name='westos' where id=1; mysql> quit
網頁訪問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(刷新兩次) ##更新
redis-cli 127.0.0.1:6379> get 1 ##網頁刷新過後纔有 "westos" 127.0.0.1:6379> quit
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
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
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
mysql mysql> show global variables like 'plugin_dir'; mysql> quit
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
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
netstat -antlpe[object Object]
mysql mysql> select gman_servers_set('127.0.0.1:4730'); mysql> quit
cd /root/redis
vim test.sql
將觸發器的註釋取消,在建表和插入數據語句前加上註釋
mysql < test.sql
mysql mysql> show triggers from test; mysql> quit
cp worker.php /usr/local/bin/ cd /usr/local/bin/ nohup php worker.php &##後臺運行worker ps ax
mysql mysql> use test; mysql> update test set name='redhat' where id=1; mysql> quit
網頁訪問http://172.25.19.1(刷新)##更新
redis-cli 127.0.0.1:6379> get 1 "redhat" 127.0.0.1:6379> quit
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
/etc/init.d/redis_6379 restart
此時用redis-cli進行測試,查看server1中的數據是否同步到server2和server3中,更改值是否可以同步。
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
grep -v ^# sentinel.conf > /etc/sentinel.conf redis-sentinel /etc/sentinel.conf
scp /etc/sentinel.conf [email protected]:/etc/
scp /etc/sentinel.conf [email protected]:/etc/
redis-cli -h 172.25.45.1 -p 26379 info
【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
server1:redis-cli -h 172.25.45.1 -p 26379 info
【server3】
redis-sentinel /etc/sentinel.conf
server1:redis-cli -h 172.25.45.1 -p 26379 info
測試:
【server1】
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start redis-cli -h 172.25.45.1 -p 26379 info