redis php操作日志,php-redis笔记
php-redis筆記
介紹
REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統(tǒng)。
Redis是一個開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。
它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因為值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
Redis 簡介
Redis 是完全開源免費的,遵守BSD協(xié)議,是一個高性能的key-value數(shù)據(jù)庫。
Redis 與其他 key - value 緩存產(chǎn)品有以下三個特點:
* Redis支持數(shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時候可以再次加載進行使用。
* Redis不僅僅支持簡單的key-value類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲。
* Redis支持數(shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
Redis 優(yōu)勢
性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
豐富的數(shù)據(jù)類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數(shù)據(jù)類型操作。
原子 – Redis的所有操作都是原子性的,意思就是要么成功執(zhí)行要么失敗完全不執(zhí)行。單個操作是原子性的。多個操作也支持事務(wù),即原子性,通過MULTI和EXEC指令包起來。
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
Redis與其他key-value存儲有什么不同?
* Redis有著更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)并且提供對他們的原子性操作,這是一個不同于其他數(shù)據(jù)庫的進化路徑。Redis的數(shù)據(jù)類型都是基于基本數(shù)據(jù)結(jié)構(gòu)的同時對程序員透明,無需進行額外的抽象。
* Redis運行在內(nèi)存中但是可以持久化到磁盤,所以在對不同數(shù)據(jù)集進行高速讀寫時需要權(quán)衡內(nèi)存,因為數(shù)據(jù)量不能大于硬件內(nèi)存。在內(nèi)存數(shù)據(jù)庫方面的另一個優(yōu)點是,相比在磁盤上相同的復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中操作起來非常簡單,這樣Redis可以做很多內(nèi)部復(fù)雜性很強的事情。同時,在磁盤格式方面他們是緊湊的以追加的方式產(chǎn)生的,因為他們并不需要進行隨機訪問。
Table of contents
數(shù)據(jù)結(jié)構(gòu)
String: 字符串]
Hash: 散列
List: 列表
Set: 集合
Sorted Set: 有序集合
Redis安裝
1. 下載并解壓
首先從Redis官網(wǎng)下載Redis并解壓,樓主使用的版本是4.0.2。依次執(zhí)行如下命令:
cd /usr/local/
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
tar -zxvf redis-4.0.2.tar.gz
如果沒有安裝gcc依賴包,則安裝對應(yīng)依賴包
yum install -y gcc-c++ tcl
2. 編譯并安裝
下載并解壓完畢后,則對源碼包進行編譯安裝,樓主的Redis安裝路徑為/usr/local/redis,同學(xué)們可以自行修改語句:make install PREFIX=你想要安裝的路徑
cd /usr/local/redis-4.0.2/
make install PREFIX=/usr/local/redis
復(fù)制Redis相關(guān)命令到/usr/sbin目錄下,這樣就可以直接執(zhí)行這些命令,不用寫全路徑
cd /usr/local/redis/bin/
sudo cp redis-cli redis-server redis-sentinel /usr/sbin/
3. 建立Redis配置文件
安裝完成之后將 Redis 配置文件拷貝到系統(tǒng)配置目錄/etc/下,redis.conf 是 Redis 的配置文件,redis.conf 在 Redis 源碼目錄,port默認 6379。
cp /usr/local/redis-4.0.2/redis.conf /etc/
Redis配置文件主要參數(shù)解析參考
daemonize no #redis進程是否以守護進程的方式運行,yes為是,no為否(不以守護進程的方式運行會占用一個終端)
pidfile /var/run/redis.pid #指定redis進程的PID文件存放位置
port 6379 #redis進程的端口號
bind 127.0.0.1 #綁定的主機地址
timeout 300 #客戶端閑置多長時間后關(guān)閉連接,默認此參數(shù)為0即關(guān)閉此功能
loglevel verbose #redis日志級別,可用的級別有debug.verbose.notice.warning
logfile stdout #log文件輸出位置,如果進程以守護進程的方式運行,此處又將輸出文件設(shè)置為stdout的話,就會將日志信息輸出到/dev/null里面去了
databases 16 #設(shè)置數(shù)據(jù)庫的數(shù)量,默認為0可以使用select 命令在連接上指定數(shù)據(jù)庫id
save #指定在多少時間內(nèi)刷新次數(shù)達到多少的時候會將數(shù)據(jù)同步到數(shù)據(jù)文件;
rdbcompression yes #指定存儲至本地數(shù)據(jù)庫時是否壓縮文件,默認為yes即啟用存儲;
dbfilename dump.db #指定本地數(shù)據(jù)庫文件名
dir ./ #指定本地數(shù)據(jù)問就按存放位置;
slaveof #指定當(dāng)本機為slave服務(wù)時,設(shè)置master服務(wù)的IP地址及端口,在redis啟動的時候他會自動跟master進行數(shù)據(jù)同步
masterauth #當(dāng)master設(shè)置了密碼保護時,slave服務(wù)連接master的密碼;
requirepass footbared #設(shè)置redis連接密碼,如果配置了連接密碼,客戶端在連接redis是需要通過AUTH命令提供密碼,默認關(guān)閉
maxclients 128 #設(shè)置同一時間最大客戶連接數(shù),默認無限制;redis可以同時連接的客戶端數(shù)為redis程序可以打開的最大文件描述符,如果設(shè)置 maxclients 0,表示不作限制。當(dāng)客戶端連接數(shù)到達限制時,Redis會關(guān)閉新的連接并向客戶端返回max number of clients reached錯誤信息
maxmemory #指定Redis最大內(nèi)存限制,Redis在啟動時會把數(shù)據(jù)加載到內(nèi)存中,達到最大內(nèi)存后,Redis會先嘗試清除已到期或即將到期的Key,當(dāng)此方法處理 后,仍然到達最大內(nèi)存設(shè)置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內(nèi)存,Value會存放在swap區(qū)
appendonly no #指定是否在每次更新操作后進行日志記錄,Redis在默認情況下是異步的把數(shù)據(jù)寫入磁盤,如果不開啟,可能會在斷電時導(dǎo)致一段時間內(nèi)的數(shù)據(jù)丟失。因為 redis本身同步數(shù)據(jù)文件是按上面save條件來同步的,所以有的數(shù)據(jù)會在一段時間內(nèi)只存在于內(nèi)存中。默認為no
appendfilename appendonly.aof #指定跟新日志文件名默認為appendonly.aof
appendfsync everysec #指定更新日志的條件,有三個可選參數(shù)no:表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤(快),always:表示每次更新操作后手動調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢,安全), everysec:表示每秒同步一次(折衷,默認值);
3.1 設(shè)置后端啟動:
由于Redis默認是前端啟動,必須保持在當(dāng)前的窗口中,如果使用ctrl + c退出,那么Redis也就退出,不建議使用。
vi /etc/redis.conf
修改Redis配置文件把舊值daemonize no 改為 新值daemonize yes
3.2 設(shè)置訪問:
Redis默認只允許本機訪問,可是有時候我們也需要 Redis 被遠程訪問。
vi /etc/redis.conf
找到 bind 那行配置,默認是: # bind 127.0.0.1
去掉#注釋并改為: bind 0.0.0.0 此設(shè)置會變成允許所有遠程訪問。如果想指定限制訪問,可設(shè)置對應(yīng)的IP。
3.3 配置Redis日志記錄:
找到logfile那行配置,默認是:logfile "",改為logfile /var/log/redis_6379.log
3.4 設(shè)置 Redis 請求密碼:
vi /etc/redis.conf
找到默認是被注釋的這一行:# requirepass foobared
去掉注釋,把 foobared 改為你想要設(shè)置的密碼,比如我打算設(shè)置為:123456,所以我改為:requirepass "123456"
修改之后重啟下服務(wù)
有了密碼之后,進入客戶端,就得這樣訪問:redis-cli -h 127.0.0.1 -p 6379 -a 123456
####4. Redis常用操作
4.1 啟動
/usr/local/redis/bin/redis-server /etc/redis.conf
4.2 關(guān)閉
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
4.3 查看是否啟動
ps -ef | grep redis
4.4 進入客戶端
redis-cli
4.5 關(guān)閉客戶端
redis-cli shutdown
4.6 設(shè)置開機自動啟動配置
echo "/usr/local/redis/bin/redis-server /etc/redis.conf" >> /etc/rc.local
4.7 開放防火墻端口
添加規(guī)則:iptables -I INPUT -p tcp -m tcp --dport 6379 -j ACCEPT
保存規(guī)則:service iptables save
重啟 iptables:service iptables restart
5. 將Redis注冊為系統(tǒng)服務(wù)
在/etc/init.d目錄下添加Redis服務(wù)的啟動,暫停和重啟腳本:
vi /etc/init.d/redis
腳本內(nèi)容如下:
#!/bin/sh
#
# redis - this script starts and stops the redis-server daemon
#
# chkconfig: - 85 15
# description: Redis is a persistent key-value database
# processname: redis-server
# config: /usr/local/redis/bin/redis-server
# config: /etc/redis.conf
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
redis="/usr/local/redis/bin/redis-server"
prog=$(basename $redis)
REDIS_CONF_FILE="/etc/redis.conf"
[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
[ -x $redis ] || exit 5
[ -f $REDIS_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $redis $REDIS_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
echo -n $"Reloading $prog: "
killproc $redis -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart| reload|orce-reload}"
exit 2
esac
賦予腳本權(quán)限
chmod 755 /etc/init.d/redis
啟動、停止和重啟:
service redis start
service redis stop
service redis restart
Redis主從
1. redis-server說明
172.16.2.185:6379 主
172.16.2.181:6379 從
2. Redis主從架構(gòu)配置
編輯從機的 Redis 配置文件,找到 210 行(大概),默認這一行應(yīng)該是注釋的:
slaveof
我們需要去掉該注釋,并且填寫我們自己的主機的 IP 和 端口,比如:slaveof 172.16.2.185 6379,如果主機設(shè)置了密碼,還需要找到masterauth 這一行,去掉注釋,改為masterauth 主機密碼。
配置完成后重啟從機Redis 服務(wù)
重啟完之后,進入主機的 redis-cli 狀態(tài)下redis-cli -h 127.0.0.1 -p 6379 -a 123456,輸入:INFO replication
可以查詢到當(dāng)前主機的 Redis處于什么角色,有哪些從機已經(jīng)連上主機。
主機信息172.16.2.185
# Replication
role:master
connected_slaves:1
slave0:ip=172.16.2.181,port=6379,state=online,offset=28,lag=1
master_replid:625ae9f362643da5337835beaeabfdca426198c7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28
從機信息172.16.2.181
# Replication
role:slave
master_host:172.16.2.185
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:210
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:625ae9f362643da5337835beaeabfdca426198c7
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:210
此時已經(jīng)完成了主從配置,我們可以測試下:
我們進入主機的 redis-cli 狀態(tài),然后 set 某個值,比如:set myblog YouMeek.com
我們切換進入從機的 redis-cli 的狀態(tài)下,獲取剛剛設(shè)置的值看是否存在:get myblog,此時,我們可以發(fā)現(xiàn)是可以獲取到值的。
3. Redis主從架構(gòu)總結(jié)
需要注意的是:從庫不具備寫入數(shù)據(jù)能力,不然會報錯。 從庫只有只讀能力。
主從架構(gòu)的優(yōu)點:除了減少主庫連接的壓力,還有可以關(guān)掉主庫的持久化功能,把持久化的功能交給從庫進行處理。
第一個從庫配置的信息是連上主庫,后面的第二個從庫配置的連接信息是連上第一個從庫, 假如還有第三個從庫的話,我們可以把第三個從庫的配置信息連上第二個從庫上,以此類推。
PHP使用Redis
連接到 redis 服務(wù)
//連接本地的 Redis 服務(wù)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//查看服務(wù)是否運行
echo "Server is running: " . $redis->ping();
?>
執(zhí)行腳本,輸出結(jié)果為:
Connection to server sucessfully
Server is running: PONG
Redis PHP String(字符串) 實例
//連接本地的 Redis 服務(wù)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//設(shè)置 redis 字符串?dāng)?shù)據(jù)
$redis->set("tutorial-name", "Redis tutorial");
// 獲取存儲的數(shù)據(jù)并輸出
echo "Stored string in redis:: " . $redis->get("tutorial-name");
?>
執(zhí)行腳本,輸出結(jié)果為:
Connection to server sucessfully
Stored string in redis:: Redis tutorial
Redis PHP List(列表) 實例
//連接本地的 Redis 服務(wù)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
//存儲數(shù)據(jù)到列表中 將一個或多個值插入到列表頭部
$redis->lpush("tutorial-list", "Redis");
$redis->lpush("tutorial-list", "Mongodb");
$redis->lpush("tutorial-list", "Mysql");
// 獲取存儲的數(shù)據(jù)并輸出
//Redis Lrange 返回列表中指定區(qū)間內(nèi)的元素,區(qū)間以偏移量 START 和 END 指定。
//其中 0 表示列表的第一個元素, 1 表示列表的第二個元素,以此類推。
//你也可以使用負數(shù)下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數(shù)第二個元素,以此類推。
$arList = $redis->lrange("tutorial-list", 0 ,5);
echo "Stored string in redis";
print_r($arList);
?>
執(zhí)行腳本,輸出結(jié)果為:
Connection to server sucessfully
Stored string in redis
Mysql
Mongodb
Redis
Redis PHP Keys 實例
//連接本地的 Redis 服務(wù)
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server sucessfully";
// 獲取數(shù)據(jù)并輸出
$arList = $redis->keys("*");
echo "Stored keys in redis:: ";
print_r($arList);
?>
執(zhí)行腳本,輸出結(jié)果為:
Connection to server sucessfully
Stored string in redis::
tutorial-name
tutorial-list
總結(jié)
以上是生活随笔為你收集整理的redis php操作日志,php-redis笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通策医疗股票股价 做什么能否长期持有
- 下一篇: php编写开机启动脚本,设置 msyql