php配置redis拓展流程与redis的使用
- 2019 年 12 月 2 日
- 筆記
问题
程序配置:

启动后访问的报错信息:

解决步骤
一、查看phpinfo
在网站根目录下面创建phpinfo.php并且写入以下代码:
<?php phpinfo();
输入:http://localhost:9999/phpinfo.php
结果:

版本要看是TS还是nts,是VC11还是VC12还是其他版本号。
- TS指Thread Safety,即线程安全,一般在IIS以ISAPI方式加载的时候选择这个版本。
- NTS即None-Thread Safe,一般以fast cgi方式运行的时候选择这个版本,具有更好的性能。
下载对应的包
- igbinary地址:https://windows.php.net/downloads/pecl/releases/igbinary/
注意选择与php extension build对应得上的版本:

- redis地址:https://windows.php.net/downloads/pecl/releases/redis/
选择对应版本:

将包中对应文件放入php安装目录的ext目录中


将上面两图中用红线圈住的部分放入ext目录中。
修改php.ini文件
添加如下内容:
; php_redisextension=php_igbinary.dllextension=php_redis.dll
效果如下:

重启服务,查看phpinfo

可见redis 已经安装成功
php连接redis
<?php$redis = new Redis(); $redis->connect('127.0.0.1', 6379);//serverip port$redis->auth('mypassword');//my redis password$redis ->set( "test" , "Hello World"); echo $redis ->get( "test");
函数封装
/** * 如果不传入$host和$port默认读取Laravel环境变量的参数 * redis Set/setex封装,可直接传入数组,可设置过期时间 written:yangxingyi */function RedisSet($key,$value,$expire=0,$host='',$port=''){ if(!$key||!$value) return false; $host = $host?$host:getenv('REDIS_HOST'); $port = $port?$port:getenv('REDIS_PORT'); $redis = new Redis(); $redis->connect($host, $port); $value = is_array($value)?json_encode($value):$value; return $expire>0?$redis->setex(getenv('REDIS_PREFIX').$key, $expire,$value):$redis->set(getenv('REDIS_PREFIX').$key,$value);}/** * redis get封装,如果传入的是数组,返回的也是数组,同理字符串 written:yangxingyi */function RedisGet($key,$host='',$port=''){ $redis = new Redis(); $host = $host?$host:getenv('REDIS_HOST'); $port = $port?$port:getenv('REDIS_PORT'); $redis->connect($host, $port); $result = $redis->get(getenv('REDIS_PREFIX').$key); return is_null(json_decode($result))?$result:json_decode($result,true);}
常用操作
setex 带生存时间的写入值$redis->setex('key', 3600, 'value'); setnx 判断是否重复的,写入值,如存在了不修改返回0,不存在就添加返回1$redis->setnx('key', 'value');返回已经删除key$redis->delete('key1'); 成功返回1失败返回0$redis->delete('key1','key2'); 删除两个键成功返回1失败返回0查询生存时间$redis->ttl('key1'); 持久化的返回-1,有生存时间的返回时间(单位秒)同时给多个key赋值,同时设置key0和key1$redis->mset(array('key0' => 'value0', 'key1' => 'value1'));key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值$redis->incr('key1');$redis->incrBy('key1', 10);减法跟加法一样$redis->decr("key1"); 减少1$redis->decrBy("key1",5) 减少5list相关操作,连表操作lPush$redis->lPush("list", "888");$id = $redis->lpush('list','HHHHHHH');echo $id;返回链表的元素个数$redi->lrange('list',0,-1); 返回全部数据,数组形式$redis->lrange('list',0.2); 返回连表0-2坐标的三个元素lPushx/rPushx$redis->lPushx(key, value);在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加$redis->lpop('list');输出链表最左边的ksy的值,输出后删除掉这个key$redis->rpop('list');输出链表最右边的ksy的值,输出后删除掉这个key$redis->lset('list',7,"update"); 修改坐标为7的值,成功返回1集合:sadd,sadd是无序的集合,每次插入集合的时候都可能会弄乱里面集合的排序