PHPRedis入门笔记

来源:互联网 发布:sql 添加自增列 编辑:程序博客网 时间:2024/06/05 12:47

Redis

  • 非关系型数据库
  • 基于内存存在,所以相对于MySQL等运行速度更快
  • 与MySQL相比,无需定义数据字典
  • 是远程的,分Server端和Client端,通过Redis自定义的协议传输与交互,通常我们所说的Redis都是Server端
  • 应用场景
    1. 缓存
    2. 队列(pop,push)
    3. 数据存储(通过硬盘持久化机制)

安装

  • 安装环境

    1. Linux CentOS 6.8
    2. 需要预装软件(gcc、tcl)(yum install即可)
    3. 步骤
      1. 下载Redis源码 wget http://download.redis.io/releases/(具体需要哪个版本自行选择)
      2. 解压并cd到目录中
      3. make && make install (将会放到usr/local/bin下)
    4. cp 安装目录/redis.conf 到 你要放置的目录(备份一下原配置文件,可以在该目录下修改配置文件,启动redis时可以使用该配置文件,或者你直接使用安装目录下的配置文件也可以)
    5. redis.conf 中的设置
      daemonize = no 改为 daemonize = yes (no:前台启动 yes:后台启动)
      port = 7200 (修改端口为7200)
    6. 启动redis(以/目录/redis.conf这个配置文件启动)
      sudo /usr/local/bin/redis-server /目录/redis.conf

    7. 查看redis是否已启动
      ps aux | grep redis-server

    8. 客户端登录,本机登录默认以6379端口登录,因为有修改了端口,所以需要在登录时指定登录端口
      redis-cli -h 127.0.0.1 -p 7200
      info # 查看redis的信息

Redis数据类型

数据类型 存储的值 读写能力 String 可以是字符串、整数或浮点,统称为元素 对字符串操作、对整数类型加减 List 一个序列集合切每个节点都包含了一个元素 序列两端推入或弹出元素,修剪,查看或移除元素 Set 各不相同的元素 从集合中插入或者删除元素 Hash 有key-value的散列祖,其中key是字符串,value是元素 按照key进行增加删除 Sort Set 带分数的score-value有序集合,其中score为浮点,value为元素 集合插入,按照分数范围查找
  • String 格式:key->value(sting、int、float)

    • set string1 test1 # 设置一条数据,key为string1,value为test1
    • get string1 # 获取string1的值
    • set string2 4
    • get string2 # 得到4
    • incr string2 # 自增1操作
    • get string2 # 得到5
    • decrhy string2 2 # 自减2操作
    • get string2 # 得到3
  • List(有序列表)

    • 格式:key->value(12)(左)->value(13)->value(13)->value(14)(右)
    • 队列:左边推入,右边弹出
    • lpush list1 12 # 从左边推入一个元素 l(left):左边 push:推入
    • lpush list1 13
    • rpop list1 # 从右边弹出一个元素,得到12(先入先出)
    • lpush list12 | lpush list2 13 | lpush list 13 # 推入2个相同的元素
    • llent list2 查看list元素的个数(得到3)
  • Set(无序的方式存储多个不同的元素,每个元素的值都不一样)

    • sadd set1 12 # 添加一个set元素
    • sadd set1 13 sadd set1 13 # 添加2个相同的set元素
    • scard set1 # 查看set中有多少个元素(得到2个元素,说明value值不允许重复,必须唯一)
    • sismember set1 13 # 查看13是否存在于这个set中
    • srem set1 13 # 将13这个元素从set中移除
  • Hash(散列类型,将多个键值对存到一个redis键里)

    • 格式:key -> key1=>value1 / key2=>value2 / key3=>value3 / key4=>value4
    • hset hash1 key1 12 hset hash1 key2 13 hset hash1 key3 13 # 设置一个hash元素,只要求key不一样,value值可以一样
    • hget hash1 key1 # 获取hash元素中一个键的值(3个)
    • hlen hash1# 获取hash元素的个数
    • hmget hash1 key1 key2 key3 # 一次性获取多个元素的值
  • Sort Set

    • 格式:key->score(浮点数)=>value(string/int/float)=>rank(int)
    • value必须全局唯一,如果设置相同的value值,不会增加一个元素,会修改score的值。
    • zadd zset1 10.1 val1 # 向sort set中添加一个元素
    • zadd zset1 11.2 val2
    • zadd zset1 9.2 val3
    • zcard zset1 # 查看zset1中有几个元素
    • zrange zset1 0 2 withscores # 获取排名0-2的排名,带分数
    • zrank zset1 val2 # 查看val2 在 zset1 中的排名
    • zadd zset1 12.2 val3 # 将val3的score改为12.2
    • zadd zset1 12.2 val2
    • zrange zset1 0 2 withscores # 获取排名0-2的排名,带分数。val2和val3de分数一样,但是val2中的val等于val3中的val,2小于3,所以val2的排名高于val3

PHP操作Redis

  • [root@localhost ~]# php -m 查看PHP当前安装的扩展,查看是否已安装redis扩展
  • [root@localhost ~]# which phpize 查看phpize命令的位置
  • [root@localhost ~]# which php-config 查看php-config 命令的位置
  • 下载php-redis扩展,安装并打开扩展 (点击查看更多PHP-Redis操作)
[root@localhost ~]# git clone https://github.com/phpredis/phpredis.git # 从GitHub上把PHP-Redis代码下载下来[root@localhost ~]# cd phpredis[root@localhost ~]# phpize[root@localhost ~]# ./configure --with-php-config=/usr/local/php/bin/php-config[root@localhost ~]# make && make install[root@localhost ~]# vim /usr/local/php/etc/php.ini # 开启 phpredis扩展[root@localhost ~]# php -m # 查看redis扩展是否已打开[root@localhost ~]# cd /data/wwwroot/redis # 进入www目录下的redis目录[root@localhost ~]# vim connect.php
  • string操作
<?php    $redis = new \Redis();    $redis->connect('127.0.0.1');// 默认6379端口,如果你修改了端口,则为 $redis->connect('127.0.0.1',7200);    //  string 操作    $redis->set('string1','value1');s    $val = $redis->get("string1");    echo $val;    echo PHP_EOL;    $redis->set('string1',4);    $val = $redis->get('string1');    echo $val;    echo PHP_EOL;    $redis->incr('string1',2);    $val = $redis->get('string1');    echo $val;
  • list操作
<?php    $redis = new \Redis();    $redis->connect('127.0.0.1');    // list 操作    $redis->lPush("list1", "A");   // 从左边推入A    $redis->lPush("list1", "B");   // 从左边推入B    $redis->lPush("list1", "C");   // 从左边推入C    $val = $redis->rPop("list1");  // 从右边弹出    echo $val;     // 遵循先入先出的原则,未弹出前,list的数值 为 C,B,A 使用rPop则弹出 A
  • set操作
<?php    $redis = new \Redis();    $redis->connect('127.0.0.1');    // set 操作    $redis->sAdd('set1', "A");    $redis->sAdd('set1', "B");    $redis->sAdd('set1', "C");    $redis->sAdd('set1', "C"); // 由于set中元素必须唯一,所以实际上只插入了3个元素    $val = $redis->sCard("set1");    var_dump($val);    // 3    $val = $redis->sMembers("set1");    var_dump($val);    /**     * array(3) {     *     [0] => string(1) "A"     *     [1] => string(1) "B"     *     [2] => string(1) "C"     * }     */
  • hash操作
<?php    $redis = new \Redis();    $redis->connect('127.0.0.1');    // hash 操作    // 设置driver1的name    $redis->hSet('driver1', 'name', 'jack');    // 设置driver1的age    $redis->hSet('driver1', 'age', 25);    // 设置driver1的sex    $redis->hSet('driver1', 'sex', 1);    // hGet - 获取driver1的name值    $val = $redis->hGet('driver1', 'name');    var_dump($val);    // hMGet - 获取driver1的多个key的值    $val = $redis->hMGet('driver1', array('name','age'));    var_dump($val);
  • sort set操作
<?php    $redis = new \Redis();    $redis->connect('127.0.0.1');    // sort set操作    // 往key值为zset1添加数据    $redis->zAdd('zset1', 90, 'userA');    // rank:2    $redis->zAdd('zset1', 99, 'userB');    // rank:1    $redis->zAdd('zset1', 70, 'userC');    // rank:4    $redis->zAdd('zset1', 80, 'userD');    // rank:3    // zRange(key, start, end);    $val = $redis->zRange('zset1', 0, -1); // 从低到高    var_dump($val);    $val = $redis->zRevRange('zset1', 0, -1); // 从高到低    var_dump($val);