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