您好,登錄后才能下訂單哦!
一、Redis介紹
redis是一個key-value存儲系統,官方站點http://redis.io
和memcached類似,但支持數據持久化
支持更多value類型,除了和string外,還支持hash、lists(鏈表)、sets(集合)和sorted sets(有序集合)集中數據類型
redis使用了兩種文件格式:全量數據(RDB)和增量請求(aof)。全量數據格式是把內存中的數據寫入磁盤,便于下次讀取文件進行加載。增量請求文件則是把內存中的數據序列化為操作請求,用于讀取文件進行replay得到數據
redis的存儲分為內存存儲、磁盤存儲和log文件三部分
二、Redis安裝
cd /usr/local/src wget https://codeload.github.com/antirez/redis/tar.gz/2.8.21 mv 2.8.21 redis-2.8.21.tar.gz tar xf redis-2.8.21.tar.gz cd redis-2.8.21 make && make PREFIX=/usr/local/redis install mkdir /usr/local/redis/etc
錯誤:
在包含自 adlist.c:34 的文件中:
zmalloc.h:50:31: 錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄
zmalloc.h:55:2: 錯誤:#error "Newer version of jemalloc required"
make[1]: *** [adlist.o] 錯誤 1
make[1]: Leaving directory `/usr/local/src/redis-2.6.6/src'
make: *** [all] 錯誤 2
解決:
make MALLOC=libc
三、Redis配置
vim /usr/local/redis/etc/redis.conf============配置文件 daemonize yes pidfile /usr/local/redis/var/redis.pid port 6379 timeout 300 loglevel debug logfile /usr/local/redis/var/redis.log databases 16 save 900 1 save 300 10 save 60 10000 rdbcompression yes dbfilename dump.rdb dir /usr/local/redis/var/ appendonly no appendfsync always
下面是redis.conf的主 要配置參數的意義:
daemonize:是否以后臺daemon方式運行
pidfile:pid文件位置
port:監聽的端口號
timeout:請求超時時間
loglevel:log信息級別
logfile:log文件位置
databases:開啟數據庫的數量
save * *:保存快照的頻率,第一個*表示多長時間,第三個*表示執行多少次寫操作。在一定時間內執行一定數量的寫操作時,自動保存快照。可設置多個條件。
rdbcompression:是否使用壓縮
dbfilename:數據快照文件名(只是文件名,不包括目錄)
dir:數據快照的保存目錄(這個是目錄)
appendonly:是否開啟appendonlylog,開啟的話每次寫操作會記一條log,這會提高數據抗風險能力,但影響效率。
appendfsync:appendonlylog如何同步到磁盤(三個選項,分別是每次寫都強制調用fsync、每秒啟用一次fsync、不調用fsync等待系統自己同步)
=====================編寫一個redis啟動腳本
vi /etc/init.d/redis //加入如下內容: #!/bin/sh # # redis init file for starting up the redis daemon # # chkconfig: - 20 80 # description: Starts and stops the redis daemon. # Source function library. . /etc/rc.d/init.d/functions name="redis-server" basedir="/usr/local/redis" exec="$basedir/bin/$name" pidfile="$basedir/var/redis.pid" REDIS_CONFIG="$basedir/etc/redis.conf" [ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis lockfile=/var/lock/subsys/redis start() { [ -f $REDIS_CONFIG ] || exit 6 [ -x $exec ] || exit 5 echo -n $"Starting $name: " daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG" retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $name: " killproc -p $pidfile $name retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { stop start } reload() { false } rh_status() { status -p $pidfile $name } 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) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 restart ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}" exit 2 esac exit $?
因為腳本啟動時以redis用戶啟動的,所以需要增加redis用戶
useradd -s /sbin/nologin redis mkdir /usr/local/redis/var chmod 777 /usr/local/redis/var chmod 755 /etc/init.d/redis chkconfig --add redis chkconfig redis on service redis start
四、Redis數據類型
string是最簡單的類型,你可以理解成Memcached一樣的類型,一個key對應一個value,騎上支持的操作與Memcached的操作類似,它的功能更豐富。設置可以存二進制的對象。
/usr/local/redis/bin/redis-cli
127.0.0.1:6379> mset key1 szk key2 love key3 yc OK 127.0.0.1:6379> mget key1 key2 key3 1) "szk" 2) "love" 3) "yc"
list是一個鏈表結構,主要功能是push、pop、獲取一個范圍的所有值等等。操作中key理解為鏈接的名字。使用List結構,我們可以輕松的實現最新消息排行等功能。使用List結構,我們可以輕松地實現最新消息排行等功能。List的另一個應用就是消息隊列,可以利用list的push操作,將任務存在list中,然后工作線程再用pop操作將任務取出進行執行。
127.0.0.1:6379> lpush list1 123 (integer) 1 127.0.0.1:6379> lpush list1 aaa (integer) 2 127.0.0.1:6379> lpush list1 "123 456" (integer) 3 127.0.0.1:6379> rpop list1 "123" 127.0.0.1:6379> rpop list1 "aaa" 127.0.0.1:6379> rpop list1
set是集合,和我們數學中的集合概念類似,對集合的操作有添加刪除元素,有對多個集合求交并差等操作。操作中key理解為集合的名字。比如在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。因為Redis非常人性化的為幾個提供了求交集、并集、差集等操作,那么就可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合 操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到一個新的集合中。QQ有一個社交功能叫做"好友標簽",這時就可以使用redis的集合來實現,把每一個用戶的標簽都存儲在一個集合之中。
127.0.0.1:6379> sadd set1 zbc (integer) 1 127.0.0.1:6379> sadd set1 szk (integer) 1 127.0.0.1:6379> smembers set1 1) "zbc"
sorted set是有序集合,它比set多了一個權重參數score,使得集合中的元素能夠按score進行有序排列,比如一個存儲全班同學成績的Sorted Sets,其集合value可以是同學的學號,而score就可以是其考試得分,這樣在數據插入集合的時候,就已經進行了天然的排序。
127.0.0.1:6379> zadd mset2 2 "cde 123" (integer) 1 127.0.0.1:6379> zadd mset2 4 "a123a" (integer) 1 127.0.0.1:6379> zadd mset2 24 "123-aaa" (integer) 1 127.0.0.1:6379> zrange mset2 0 -1 1) "cde 123" 2) "a123a" 3) "123-aaa"
hash:在memcached中,經常將一些結構化的信息打包成hashmap,在客戶端序列化后存儲為一個字符串的值(一般是JSON格式),比如用戶的昵稱、年齡、性別、積分等。
五、Redis持久化
Redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only FIle)
RDB,簡而言之,就是在不同的時間點,將redis存儲的數據生成快照并存儲到磁盤等介質上。
AOF,則是換了一個角度來實現持久化,那就是redis執行過的所有寫指令記錄下來,在下次redis重新啟動時,只要把這些寫指令從前到后重復執行一遍,就可以實現數據恢復了。
其實RDB和AOF兩種方式也可以同時使用,在這種情況下,如果redis重啟的話,則會優先采用AOF方式來進行數據恢復,這是因為AOF方式的數據恢復完整度更高。
如果你沒有數據持久化的需求,也完全可以關閉RDB和AOF方式,這樣的話,redis將變成一個純內存數據庫,就像memcached一樣。
六、Redis通用配置
daemonize no #默認情況下,redis并不是以daemon形式來運行的。通過daemonize配置項可以控制redis的運行形式。
pidfile /path/to/redis.pid #當以daemon形式運行時,redis會生成一個pid文件,默認會生成在/var/run/redis.pid
bind 192.168.1.200 #指定綁定的IP,可以有多個
port 6379 #指定監聽端口
unixsocket /tmp/redis.sock #也可以監聽socket
unixsocketperm 755 #當監聽socket時可以指定權限為755
timeout 0 #當一個redis-client一直沒有請求發向server端,那么server端有權主動關閉這個連接,可以通過timeout來設置“空間超時時限”,0表示永不關閉
tcp-keepalive 0 #TCP連接保活策略,可以通過tcp-keepalive配置項來進行設置,單位為秒,假如設置為60秒,則server端會每60秒向連接空閑的客戶端發起一次ACk請求,以檢查客戶端是否已經掛掉,對于無響應的客戶端則會關閉其連接。如果設置為0,則不會進行保活檢測
loglevel notice #日志級別,有四種debug,verbose,notice,warning
logfile "" #定義日志路徑
syslog-ident redis #如果希望日志打印到sysllog中,通過syslog-enabled來控制
syslog-facility local0 #指定syslog的設備,可以是USER或者local0-local7
databases 16 #設置數據庫的總數量,select n 選擇數據庫,0 - 15
七、Redis快照配置(rdb持久化)
save 900 1 #表示每15分鐘且至少有1個key改變,就觸發一次持久化
save 300 10 #表示每5分鐘至少有10個key改變,就觸發一次持久化
save 60 1000 #表示每60秒至少有10000個key改變,就觸發一次持久
save "" #這樣可以禁用rdb持久化
stop-write-on-bgsave-error yes #rdb持久化寫入磁盤避免不了會出現失敗的情況,默認一旦出現失敗,redis會馬上停止寫操作。如果你覺得無所謂,那就可以使用選項關閉這個功能
rdbcompression yes #是否要壓縮
rdbchecksum yes #是否進行數據校驗
dir ./ #定義快照文件儲存路徑
八、Redis安全相關配置
vim /usr/local/redis/etc/redis.conf #設置redis-server的密碼
#增加下面配置
requirepass szk
/usr/local/redis/bin/redis-cli -a szk #-a指定密碼登錄
rename-command CONFIG szk.config #將CONFIG命令更名為szk.config,這樣可以避免誤操作,但 如果使用了AOF持久化,建議不要啟用該功能
rename-command CONFIG "" #也可以后面定義為空,這樣就禁掉了該CONFIG命令
九、Redis限制相關配置
maxclients 10000 #限制最大客戶端連接數
maxmemory <bytes> #設定最大內存使用數,單位是byte
maxmemory-policy volatile-lru #指定內存移除規則
maxmemory-samples 3 #LRU算大和最小TTL算法都并非是精確的算法,而是估算值。所以你可以設置樣本的大小。假如redis默認會檢查三個key,并選擇其中LRU的那個,那么你可以改變這個key樣本的數量。
十、Redis AOF持久化相關配置
appendonly no #如果是yes,則開啟aof持久化
appendfilename "appendonly.aof" #指定aof文件名字,保存在dir參數指定的命令
appendfsync everysec #指定fsync()調用模式,有三種no(不調用fsync),always(每次寫都會調用fsync),exerysec(每秒鐘調用一次fsync)。第一種最快,第二種數據最安全,但性能會差一些,默認為第三種方案,性能和安全兼顧。
no-appendfsync-on-rewrite no #使用no可避免當寫入量非常大時的磁盤IO阻塞
auto-aof-rewrite-percentage 10 #規定什么情況下觸發aof重寫。該值為一個比例,10表示當aof文件增幅達到10%時則會觸發重寫機制
auto-aof-rewrite-min-size 64mb #重寫會有一個條件,就是不能低于64MB
十一、Redis慢日志相關配置
針對慢日志,你可以設置兩個參數,一個是執行時長,單位是微秒,另一個是慢日志的長度。當一個新的命令被寫入日志時,最老的一條會從命令日志隊列中被移除。
slowlog-log-slower-than 10000 #慢于10000ms則記錄日志
slowlog-max-len 128 #日志長度
十二、Redis主從配置
分別按照之前介紹的步驟安裝好redis并啟動
master 配置文件不用動
slave配置文件上加一行:slaveof 192.168.1.200 6379
masterauth szk #如果主上設置了密碼,要加這行
分別啟動master和slave
tail /usr/local/redis/var/redis.log 3966] 18 Feb 15:02:58.330 * MASTER <-> SLAVE sync: receiving 192 bytes from master [3966] 18 Feb 15:02:58.330 * MASTER <-> SLAVE sync: Flushing old data [3966] 18 Feb 15:02:58.330 * MASTER <-> SLAVE sync: Loading DB in memory [3966] 18 Feb 15:02:58.330 * MASTER <-> SLAVE sync: Finished with success [3966] 18 Feb 15:03:03.344 - DB 0: 7 keys (0 volatile) in 8 slots HT. [3966] 18 Feb 15:03:03.344 - 1 clients connected (0 slaves), 466840 bytes in use [3966] 18 Feb 15:03:08.396 - DB 0: 7 keys (0 volatile) in 8 slots HT. [3966] 18 Feb 15:03:08.397 - 1 clients connected (0 slaves), 466848 bytes in use
測試:
/usr/local/redis/bin/redis-cli -a szk 主
127.0.0.1:6379> set key1 szk
OK
127.0.0.1:6379> get key1
"szk"
/usr/local/redis/bin/redis-cli 從
127.0.0.1:6379> get key1
"szk"
OK
十三、Redis主從其他相關配置
slave-read-only yes #讓從只讀
repl-ping-slave-period 10 #設置slave向master發起ping的頻率,每10s發起一次
repl-timeout 60 #設置slave ping不同master多少s后就超時
repl-disable-tcp-nodelay no #是否開啟tcp_nodeay,開啟后將會使用更少的帶寬,但會有延遲,所以建議關閉
repl-backlog-size 1mb #同步隊列的長度,backuplog是master的一個緩沖區,主從斷開后,master會先把數據寫到緩沖區,slave再次連接會從緩沖區中同步數據
repl-backlog-ttl 3600 #主從斷開后,緩沖區的有效期,默認1小時
slave-priority 100 #多個slave是可以設置優先級的,數值越小優先級越高,應用于集群中,支持slave切換為mster,優先級最高的才會切換
min-slave-to-write 3 #和下面的一起使用,它的意思是master發現有超過3個slave的延遲高于10s,那么master就會暫時停止寫操作。這兩個數值任何一個為0,則關閉該功能,默認第一數值是0
min-slaves-max-log 10
十四、string常用操作
127.0.0.1:6379> set key1 szk #給key1賦值為szk OK 127.0.0.1:6379> get key1 #獲取這個值value "szk" 127.0.0.1:6379> set key1 yc #一個key對應一個value,多次賦值,會覆蓋前面的value OK 127.0.0.1:6379> get key1 "yc" 127.0.0.1:6379> setex key3 10 1 #用來給key設定過期時間,ttl key3查看時間 OK 127.0.0.1:6379> mset key1 1 key2 2 key3 3 #同時設置多個key OK 127.0.0.1:6379> mget key1 key2 key3 1) "1" 2) "2" 3) "3"
十五、Hash常用操作
127.0.0.1:6379> hset hash2 name szk (integer) 1 127.0.0.1:6379> hset hash2 age 23 (integer) 1 127.0.0.1:6379> hset hash2 job it (integer) 1 127.0.0.1:6379> hgetall hash2 1) "name" 2) "szk" 3) "age" 4) "23" 5) "job" 6) "it" 127.0.0.1:6379> hmset hash3 name yc age 24 job teacher #批量創建 OK 127.0.0.1:6379> hgetall hash3 1) "name" 2) "yc" 3) "age" 4) "24" 5) "job" 6) "teacher" 127.0.0.1:6379> hdel hash3 job #刪除某個值 (integer) 1 127.0.0.1:6379> hgetall hash3 1) "name" 2) "yc" 3) "age" 4) "24" 127.0.0.1:6379> hkeys hash3 #查看所有的key 1) "name" 2) "age" 127.0.0.1:6379> hvals hash3 #查看所有的values 1) "yc" 2) "24" 127.0.0.1:6379> hlen hash3 #查看hash有幾個filed (integer) 2
十六、list常用操作
127.0.0.1:6379> lpush list1 a #從左邊插入 (integer) 3 127.0.0.1:6379> lpush list1 b #從左邊插入 (integer) 4 127.0.0.1:6379> lpush list1 c #從左邊插入 (integer) 5 127.0.0.1:6379> lrange list1 0 -1 #從左邊往右羅列,最先插入在最后邊 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> lpop list1 #從最左邊取出 "c" 127.0.0.1:6379> lrange list1 0 -1 #從左邊往右羅列 1) "b" 2) "a" 127.0.0.1:6379> rpush list1 1 #從右邊插入 (integer) 5 127.0.0.1:6379> rpush list1 2 #從右邊插入 (integer) 6 127.0.0.1:6379> rpush list1 3 #從右邊插入 (integer) 7 127.0.0.1:6379> lrange list1 0 -1 #從右往左羅列,最后插入在最后邊 1) "b" 2) "a" 3) "1" 4) "2" 5) "3" 127.0.0.1:6379> linsert list1 before 3 5 #在3前面插入一個5 (integer) 8 127.0.0.1:6379> lrange list1 0 -1 1) "b" 2) "a" 3) "1" 4) "2" 5) "5" 6) "3" 127.0.0.1:6379> lset list1 7 6 #將0開始的第7個元素換成6 OK 127.0.0.1:6379> lrange list1 0 -1 1) "b" 2) "a" 3) "456" 4) "123" 5) "1" 6) "2" 7) "5" 8) "6" 127.0.0.1:6379> lindex list1 7 #查看從0開始的第7個元素 "6" 127.0.0.1:6379> llen list1 #查看列表中有幾個元素 (integer) 8
十七、set數據常用操作
127.0.0.1:6379> sadd set1 1 #向集合set1中放入元素 (integer) 1 127.0.0.1:6379> sadd set1 2 (integer) 1 127.0.0.1:6379> sadd set1 3 (integer) 1 127.0.0.1:6379> sadd set1 4 (integer) 1 127.0.0.1:6379> smembers set1 #查看集合中所有元素 1) "zbc" 2) "1" 3) "szk" 4) "2" 5) "3" 6) "4" 127.0.0.1:6379> spop set1 #隨機取出一個元素,刪除 "szk" 127.0.0.1:6379> sdiff set1 seta #比較差集,以set1為主來比較 1) "zbc" 2) "4" 127.0.0.1:6379> sdiffstore set3 seta set1 #比較差集,將結果存入set3中 (integer) 2 127.0.0.1:6379> SMEMBERS set3 #tab自動補全,但顯示為大寫 1) "2" 2) "szk"
十八、zset常用操作
127.0.0.1:6379> zadd zset1 1 abc #創建有序集合 (integer) 1 127.0.0.1:6379> zadd zset1 10 aabc #創建有序集合 (integer) 1 127.0.0.1:6379> zadd zset1 5 aaa #創建有序集合 (integer) 1 127.0.0.1:6379> zadd zset1 88 bbb #創建有序集合 (integer) 1 127.0.0.1:6379> zadd zset1 888 szk #創建有序集合 (integer) 1 127.0.0.1:6379> ZRANGE zset1 0 -1 #顯示所有元素,按順序顯示 1) "abc" 2) "aaa" 3) "aabc" 4) "bbb" 5) "szk" 127.0.0.1:6379> ZRANGE zset1 0 -1 withscores #可以帶上分值 1) "abc" 2) "1" 3) "aaa" 4) "5" 5) "aabc" 6) "10" 7) "bbb" 8) "88" 9) "szk" 10) "888" 127.0.0.1:6379> ZREM zset1 abc #刪除指定元素 (integer) 1 127.0.0.1:6379> ZRANGE zset1 0 -1 withscores 1) "aaa" 2) "5" 3) "aabc" 4) "10" 5) "bbb" 6) "88" 7) "szk" 8) "888" 127.0.0.1:6379> zrevrank zset1 szk #返回元素的索引值,索引值從0開始,按score正向排序 (integer) 0 127.0.0.1:6379> zrank zset1 szk #同上,不同的是,按score反序排序 (integer) 3 127.0.0.1:6379> ZCARD zset1 #查看集合元素的個數 (integer) 4 127.0.0.1:6379> zcount zset1 1 20 #查看分值區間內的元素個數 (integer) 2 127.0.0.1:6379> zrangebyscore zset1 1 100 withscores #返回分支范圍在1-100的元素 1) "aaa" 2) "5" 3) "aabc" 4) "10" 5) "bbb" 6) "88" 127.0.0.1:6379> zrangebyscore zset1 0 10 #刪除分支范圍在0-10的元素,按score排序 1) "aaa" 2) "aabc"
十九、鍵值和服務器命令
127.0.0.1:6379> keys * #列出所有鍵值 1) "key3" 2) "seta" 3) "hash2" 4) "list1" 5) "key2" 6) "zset1" 7) "mset2" 8) "set2" 9) "set1" 10) "key1" 11) "hash3" 12) "set3" 127.0.0.1:6379> keys key* 1) "key3" 2) "key2" 3) "key1" 127.0.0.1:6379> EXISTS list1 #查看是否有list1 (integer) 1 127.0.0.1:6379> del key1 #刪除key1 (integer) 1 127.0.0.1:6379> EXISTS key1 (integer) 0 127.0.0.1:6379> EXPIRE key3 10 #設置過期時間 (integer) 1 127.0.0.1:6379> get key3 "3" 127.0.0.1:6379> ttl key3 #查看key的過期時間,-1不存在過期 -2不存儲鍵值 (integer) -2 127.0.0.1:6379> EXists key3 (integer) 0 127.0.0.1:6379> select 0 #切換庫,默認16個庫 OK 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> set key1 111 #新建一個鍵值 OK 127.0.0.1:6379[1]> keys * 1) "key1" 127.0.0.1:6379[1]> move set1 2 #移動到庫2 (integer) 0 127.0.0.1:6379[1]> select 2 #切換庫2 OK 127.0.0.1:6379[2]> keys * 1) "key1" 127.0.0.1:6379[2]> EXPIRE key1 200 #設置過期時間 (integer) 1 127.0.0.1:6379[2]> ttl key1 (integer) 193 127.0.0.1:6379[2]> PERSIST key1 #取消過期時間 (integer) 1 127.0.0.1:6379[2]> ttl key1 (integer) -1 127.0.0.1:6379[2]> RANDOMKEY #隨機返回一個key "key1" 127.0.0.1:6379[2]> RENAME key1 szk #更改一個key的名字 OK 127.0.0.1:6379[2]> keys * 1) "szk" 127.0.0.1:6379[2]> type szk #查看一個鍵值的類型 string
二十、服務相關的操作
127.0.0.1:6379[2]> DBSIZE #查看一個庫的鍵值數 (integer) 1 127.0.0.1:6379[2]> select 0 OK 127.0.0.1:6379> DBSIZE (integer) 10 127.0.0.1:6379> info #查看redis服務信息 # Server redis_version:2.8.21 redis_git_sha1:00000000 略 127.0.0.1:6379> flushdb #清空當前數據庫中所有的鍵 OK 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379> flushall #清空所有數據庫中的所有的key OK 127.0.0.1:6379> SELECT 1 OK 127.0.0.1:6379[1]> keys * (empty list or set)
二十一、PHP中應用Redis
cd /usr/local/src wget http://pecl.php.net/get/redis-2.2.5.tgz tar xf redis-2.2.5.tgz cd redis-2.2.5 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-confi make ; make install mv /usr/local/php/lib/php/extensions/no-debug-zts-20100525/redis.so /usr/lib64/ vim /usr/local/php/php.iniextension_dir = /usr/lib64/extension = redis.so usr/local/php/bin/php -m | grep redisredis
## 加載成功,可以重啟 nginx 看看 phpinfo 頁
二十二、Redis實現session共享
php.ini中加入
session.save_handler = "redis"
session.save_path = "tcp://127.0.0.1:6379"
或者apache虛擬主機加入
php_value session.save_handler "redis"
php_value session.save_path "tcp://127.0.0.1:6379"
或者php-fpm.conf對應的pool中加入
php_value[session.save_handler] = redis
php_value[session.save_path] = " tcp://127.0.0.1:6379 "
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。