PHP中使用redis – 存储session

存储结构和存储格式

redis使用了两种文件格式:全量数据和增量请求。全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载;增量请求文件则是把内存中的数据序列化为操做请求,用于读取文件进行replay获得数据,序列化的操做包括SET、RPUSH、SADD、ZADD。php

redis的存储分为内存存储、磁盘存储和log文件三部分,配置文件中有三个参数对其进行配置。linux

save seconds updates,save配置,指出在多长时间内,有多少次更新操做,就将数据同步到数据文件。这个能够多个条件配合,好比默认配置文件中的设置,就设置了三个条件。git

appendonly yes/no ,appendonly配置,指出是否在每次更新操做后进行日志记录,若是不开启,可能会在断电时致使一段时间内的数据丢失。由于redis自己同步数据文件是按上面的save条件来同步的,因此有的数据会在一段时间内只存在于内存中。github

appendfsync no/always/everysec ,appendfsync配置,no表示等操做系统进行数据缓存同步到磁盘,always表示每次更新操做后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次。redis

Redis 安装—服务端

下载、安装

下载最新稳定版
cd /usr/local/src/
wget http://download.redis.io/redis-4.0.1.tar.gz
tar -zxvf redis-4.0.1.tar.gz
cd redis-4.0.1
make && make install
cp redis.conf /etc/redis.conf

修改配置文件

vim /etc/redis.conf  \\修改以下内容
daemonize yes
logfile "/var/log/redis.log" 
dir /data/redis_data/
appendonly yes
mkdir /data/redis_data

或者备份原redis.conf,新建配置文件写入如下内容
mv /etc/redis.conf /etc/redis.conf.bak
vim /etc/redis.conf
daemonize yes
pidfile "/var/log/redis.pid"
port 6379
timeout 300
loglevel debug
logfile "/var/log/redis.log" 
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data/redis_data
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

redis-server  /etc/redis.conf
less /var/log/redis.log   //查看日志若是有警告就按照它解决https://blog.51cto.com/chenshengsheng/2115482
killall redis-server
redis-server  /etc/redis.conf

咱们也能够编写一个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
chmod 755 /etc/init.d/redis
/etc/init.d/redis start

安装redis.so扩展模块-客户端

cd /usr/local/src
wget https://coding.net/u/aminglinux/p/yuanke_centos7/git/raw/master/21NOSQL/phpredis.zip
unzip phpredis.zip
cd phpredis-develop
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make &make install

vim /usr/local/php.ini//增长extension=redis.so
/usr/local/php/bin/php -m|grep redis//看是否有redis模块
重启php-fpm服务
vim /usr/local/php-fpm/etc/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配置文件对应的pool中增长:
php_value[session.save_handler] = redis
php_value[session.save_path] = " tcp://127.0.0.1:6379 "

测试

客户端:
wgt http://study.lishiming.net/.mem_se.txt
mv .mem_se.txt  session.php  把session放到网站根目录 
其中session.php内容能够参考https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/21NOSQL/session.php
# curl localhost/session.php 
[root@localhost phpredis-develop]# curl localhost/session.php
1526157029<br><br>1526157029<br><br>edi5pqn9jtu1ndulfe8the8pi0 
[root@localhost phpredis-develop]# curl localhost/session.php
1526157032<br><br>1526157032<br><br>pbg5h030i98qk18ovfjj5ggg51

服务端:
# redis-cli    //命令行链接redis-cli,也能够查看到该key以及对应的值
127.0.0.1:6379> keys *
1) "PHPREDIS_SESSION:edi5pqn9jtu1ndulfe8the8pi0"
2) "PHPREDIS_SESSION:pbg5h030i98qk18ovfjj5ggg51"

测试结果:客户端和服务的键值是相对应的
若是想用php链接redis cluster,须要使用predis扩展
安装方法相似phpredis,predis扩展地址https://github.com/nrk/predis
相关文章
相关标签/搜索