设为首页 收藏本站
查看: 1114|回复: 0

[经验分享] linux下,PHP操作redis及redis、php-redis的安装

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-16 08:49:34 | 显示全部楼层 |阅读模式
redis相关文档、手册、blog:


php-redis下载:https://github.com/phpredis/phpredis;github里也有phpredis的说明和redis的语法介绍
redis中文手册:http://redisdoc.com
php操作redis说明博客:作者:春哥也编程,http://www.iyunv.com/zcy_soft/archive/2012/09/21/2697006.html

1、安装redis

1
2
3
4
5
    # wget http://download.redis.io/releases/redis-2.8.6.tar.gz
    # tar -zxvf redis-2.8.6.tar.gz
    # cd redis-2.8.6
    # make
    # cd src && make all



    如果安装出现以下错误:
        make[1]: Entering directory `/root/xc/redis-2.6.14/src'
            LINK redis-server
        zmalloc.o: In function `zmalloc_used_memory':
        /root/xc/redis-2.6.14/src/zmalloc.c:223: undefined reference to `__sync_add_and_fetch_4'
        collect2: ld 返回 1
        make[1]: *** [redis-server] 错误 1
        make[1]: Leaving directory `/root/xc/redis-2.6.14/src'
        make: *** [all] 错误 2

    则说明平台不兼容:则使用,如果没有出现那当然好了:
1
    # make CFLAGS="-march=i686"



    到此编译完成

    #建立一个redis的工作目录

1
    # mkdir -pv /usr/local/webserver/redis



    redis的相关配置
     # 进入到解压redis软件的src目录下,拷贝redis的命令至你的工作目录
1
2
    # cd src/
    # cp redis-cli redis-server redis-sentinel redis-benchmark redis-check-aof redis-check-dump /usr/local/webserver/redis/



    #回到上一级目录,拷贝redis的配置文件redis.conf

1
    # cd ../



1
    # cp redis.conf /usr/local/webserver/redis/



1
2
    # 启动redis服务
    # vim redis.conf



        daemonize yes     ##开启后台运行
   
    ##添加到redis系统服务并配置开机启动   

1
2
3
4
5
6
7
    # cd utils/
    # ./install_server.sh
    其他的默认,这个填上redis-server的路径:
    Please select the redis executable path [] /usr/local/webserver/redis/redis-server
    出现这个说明成功:Installation successful!
    # cd /etc/init.d/
    # mv redis_6379 redis




    这样就可以用这样的方式启动reids了,而不用进入到工作目录./redis-server redis.conf了
    只需,service redis start|restart|stop)就可启动redis了

   但还差一步,清空redis脚本的内容,把下面这个脚本写入,之后就可以用service redis start启动redis了

    # vim redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
    #!/bin/sh
    #chkconfig: 345 86 14
    #description: Startup and shutdown script for Redis
      
    PROGDIR=/usr/local/webserver/redis        ##这个是你redis工作目录的路径
    PROGNAME=redis-server
    DAEMON=$PROGDIR/$PROGNAME
    CONFIG=/usr/local/webserver/redis/redis.conf
    PIDFILE=/var/run/redis.pid
    DESC="redis daemon"
    SCRIPTNAME=/etc/rc.d/init.d/redisd
      
    start()
    {
             if test -x $DAEMON
             then
            echo -e "Starting $DESC: $PROGNAME"
                       if $DAEMON $CONFIG
                       then
                                echo -e "OK"
                       else
                                echo -e "failed"
                       fi
             else
                       echo -e "Couldn't find Redis Server ($DAEMON)"
             fi
    }
      
    stop()
    {
             if test -e $PIDFILE
             then
                       echo -e "Stopping $DESC: $PROGNAME"
                       if kill `cat $PIDFILE`
                       then
                                echo -e "OK"
                       else
                                echo -e "failed"
                       fi
             else
                       echo -e "No Redis Server ($DAEMON) running"
             fi
    }
      
    restart()
    {
        echo -e "Restarting $DESC: $PROGNAME"
        stop
             start
    }
      
    list()
    {
             ps aux | grep $PROGNAME
    }
      
    case $1 in
             start)
                       start
            ;;
             stop)
            stop
            ;;
             restart)
            restart
            ;;
             list)
            list
            ;;
      
             *)
            echo "Usage: $SCRIPTNAME {start|stop|restart|list}" >&2
            exit 1
            ;;
    esac
    exit 0



    启动redis:service redis start


2、安装httpd

1
    # yum -y install httpd



3、安装php

1
   # yum -y install php



4、安装php-devel

1
    # yum -y install php-devel



5、安装php-redis
    #安装前,安装phpsize,phpsize是php的程序,在你php的安装目录的bin目录下,执行即可
    # phpsize
    # ./configure [--enable-redis-igbinary]
   #  make && make install

---安装完成----
Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/lib64/php/modules/
---------------
   
    添加redis模块:vim php.ini
    extension=redis.so
   
    重启apache服务器
    service httpd restart
   
    测试:cd /var/www/html
    vim redis.php
        <?php

            $redis = new Redis();

            $redis->connect('127.0.0.1',6379);
            $redis->set('site','xcroom');

            echo 'name is:' . $redis->get('site'),'<br />';

            echo 'xcroom';

        ?>
    打开浏览器:
    ------------
    name is:xcroom
    xcroom
    ------------
    测试成功
   
    php操作redis的相关函数:

    1、实例化redis类
    $redis = new Redis();
   
    2、open,connect
    host: string. can be a host, or the path to a unix domain socket(主机)
    port: int, optional(端口)
    timeout: float, value in seconds (optional, default is 0 meaning unlimited)(连接超时断开的时间)
   
   
    实例:
    $redis->connect('127.0.0.1', 6379);
    $redis->connect('127.0.0.1'); // port 6379 by default
    $redis->connect('127.0.0.1', 6379, 2.5); // 2.5 sec timeout.
    $redis->connect('/tmp/redis.sock'); // unix domain socket.
    $redis->connect('127.0.0.1', 6379, 1, NULL, 100); // 1 sec timeout, 100ms delay between reconnection attempts.
   
    3、pconnect, popen,长连接
   
    4、auth
    $redis->auth('foobared');
   
    5、select,切换数据库
    $redis->select(0);  // switch to DB 0
   
    6、close
   
    7、setOption 设置redis模式 ,Set client option.
   
    8、getOption 查看redis设置的模式
   
    9、ping #Check the current connection status
   
   
    <?php
    $redis = new Redis();

    $redis->connect('127.0.0.1');

    $va = array('val1'=>'hello','val2'=>'xcroom');
    $redis->mset($va);

    $v = array('val1','val2');              

    var_dump($redis->mget($v));
   
   
    10、事务,multi进入事务状态,exec提交
    127.0.0.1:6379> multi
    OK
    127.0.0.1:6379> set pname jiangxi
    QUEUED
    127.0.0.1:6379> set pcity nancheng
    QUEUED
    127.0.0.1:6379> get pname
    QUEUED
    127.0.0.1:6379> get pcity
    QUEUED
    127.0.0.1:6379> exec
    1) OK
    2) OK
    3) "jiangxi"
    4) "nancheng"
   
    php操作事务:
    <?php
        $redis = new Redis();
        if($redis->connect('127.0.0.1')){
            echo 'connect successfully','<br />';
        }

        echo 'a';
        $ret = $redis->multi()
                    ->set('a','aaaa')
                    ->set('b','bbbb')
                    ->get('a')
                    ->get('b')
                    ->exec();
        var_dump($ret);
~   ?>
    结果:
        
    connect successfully
    array(4) {
      [0]=>
      bool(true)
      [1]=>
      bool(true)
      [2]=>
      string(4) "aaaa"
      [3]=>
      string(4) "bbbb"
    }

    11、watch, unwatch  监测一个key的值是否被其它的程序更改。
   
    <?php

        $redis = new Redis();

        $redis->connect('127.0.0.1',6379);

        $redis->watch('x');

        $arr = array('val','keys');
        $redis->watch($arr);

        $ret = $redis->multi()
                ->incr(x)
                ->exec();

        var_dump($ret);
    ?>

    12、publish * 发表内容到某一个通道。注意,该方法可能在未来里发生改变(发布)
        
            publish chanel2 "hello" 发布一个内容
   
        subscribe * 方法回调。注意,该方法可能在未来里发生改变 (订阅)
            
            subscribe chanel2
        
    13、incr, incrBy key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值
   
   
    例子:
        <?php

            $redis = new Redis();

            $redis->connect('127.0.0.1');

            $redis->set('a',18);

            $a = $redis->get('a');

            echo $a,'<br />';
            echo $redis->incrby($a,10); #每刷新一次值自增一
    13、sdiff、sdiffstore,求差集
        127.0.0.1:6379> sdiff key1 key2
            1) "a"
            2) "d"
            127.0.0.1:6379> sdiffstore key1 key2
            (integer) 2
            127.0.0.1:6379> smembers key1
            1) "b"
            2) "c"
            127.0.0.1:6379> smembers key2
            1) "b"
            2) "c"
    14、sinter、sinterstore,求交集
        127.0.0.1:6379> smembers key1
        1) "a"
        2) "b"
        3) "c"
        127.0.0.1:6379> smembers key2
        1) "b"
        2) "c"
        127.0.0.1:6379> sinter key1 key2
        1) "b"
        2) "c"
    15、sunion,sunionstore,求并集
        127.0.0.1:6379> smembers key1
        1) "a"
        2) "b"
        3) "c"
        127.0.0.1:6379> smembers key2
        1) "b"
        2) "c"
        127.0.0.1:6379> sinter key1 key2
        1) "a"
        2) "b"
        3) "c"
   
    16、sMembers, sGetMembers 返回名称为key的set的所有元素
   
    17、zAdd(key, score,member):向名称为key的zset中添加元素member,score用亍排序。如果该元素已经存在,
        则根据score更新该元素的顺序。
        zRange(key, start, end,withscores):返回名称为key的zset(元素已按score从小到大排序)中
         的index从start到end的所有元素
    <?php

        $redis = new Redis();

        $redis->connect('127.0.0.1');

        echo 'a';

        $redis->zadd('love',1,'a');
        $redis->zadd('love',4,'b');
        $redis->zadd('love',3,'c');

        var_dump($redis->zrange('love',0,-1));
   
   
    18、zcount:
    $redis->zCount(key, star, end);
    返回名称为key的zset中score >= star且score <= end的所有元素的个数,score为用于排序的数字
   
    echo $redis->zcount('love',1,4);
   
   
    19、zrank、zrevrank
   
    $redis->zadd('love',1,'a');
    $redis->zadd('love',4,'b');
    $redis->zadd('love',3,'c');
   
    echo $redis->zrank('love','c');
    echo $redis->zrevrank('love','b');
    返回名称为key的zset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“null”。zRevRank 是从大到小排序 zIncrBy $redis->
   
   
    redis 操作相关

    flushDB 清空当前数据库
   
    flushAll 清空所有数据库
   
   
    randomKey 随机返回key空间的一个key
   
    $key = $redis->randomKey();
   
    select 选择一个数据库

    move 转移一个key到另外一个数据库
   
    $redis->select(0); // switch to DB 0
   
    $redis->set('x', '42'); // write 42 to x
   
    $redis->move('x', 1); // move to DB 1
   
    $redis->select(1); // switch to DB 1
   
   
    rename, renameKey 给key重命名
   
    renameNx 不remane类似,但是,如果重新命名的名字已经存在,不会替换成功
   
   
    setTimeout, expire 设定一个key的活劢时间(s)
   
        $redis->setTimeout('x', 3);
   
    expireAt key存活到一个unix时间戳时间
   
        $redis->expireAt('x', time() + 3);
   
    dbSize 查看现在数据库有多少key
   
        $count = $redis->dbSize();
   
    auth 密码认证
   
        $redis->auth('foobared');

    bgrewriteaof 使用aof来进行数据库持久化
   
        $redis->bgrewriteaof();
   
    slaveof 选择从服务器
   
        $redis->slaveof('10.0.1.7', 6379);
   
    save 将数据同步保存到磁盘
   
    bgsave 将数据异步保存到磁盘
   
    lastSave 返回上次成功将数据保存到磁盘的Unix时戳
   
    info 返回redis的版本信息等详情
   
    type 返回key的类型值

    string: Redis::REDIS_STRING
   
    set: Redis::REDIS_SET
   
    list: Redis::REDIS_LIST
   
    zset: Redis::REDIS_ZSET
   
    hash: Redis::REDIS_HASH
   
    other: Redis::REDIS_NOT_FOUND
   
   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-77768-1-1.html 上篇帖子: redis重启后,相关文件加载顺序 下篇帖子: linux上redis安装 linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表