当前位置: 首页 > 后端技术 > PHP

Redis的PHP操作手册(转)

时间:2023-03-29 17:58:06 PHP

Redis的PHP操作手册(转)String类型操作string是redis最基本的类型,string类型是二进制安全的。这意味着redis的字符串可以包含任何数据。比如jpg图片或者序列化对象$redis->set('key','TK');$redis->set('number','1');$redis->setex('key',5,'传统知识');//设置key值,有效期为5秒$redis->psetex('key',5000,'TK');//设置key值,有效期为5000毫秒(相当于5秒)$redis->setnx('key','XK');//如果键值存在,则返回false;如果不存在,则返回true$redis->delete('key');删除key值,可以传入数组array('key1','key2')删除多个key$redis->getSet('key','XK');//设置键key的值为XK,返回该键值的原始值TK$ret=$redis->multi()//批量事务处理,不保证处理数据的原子性->set('key1','val1')->get('key1')->setnx('key','val2')->get('key2')->exec();$redis->watch('key');//监听keykey是否被其他客户端修改如果在调用watch()和exec()之间修改了KEY,exec失败functionf($redis,$chan,$msg){//channelsubscriptionswitch($chan){case'chan-1':echo$msg;休息;case'chan-2':echo$msg;休息;case'chan-2':echo$msg;休息;}}$redis->subscribe(array('chan-1','chan-2','chan-3'),'f');//小号订阅3个chans$redis->publish('chan-1','hello,world!');//发信息。$redis->exists('key');//验证key是否存在,返回true$redis->incr('number');//键值加1$redis->incrby('number',-10);//键值正负10$redis->incrByFloat('number',+/-1.5);//键值加减$redis->decr('number');//键值减去1$redis->decrBy('number',10);//键值减去10$mget=$redis->mget(array('number','key'));//批量获取键值并返回一个数组$redis->mset(array('key0'=>'value0','key1'=>'value1'));//批量设置键值$redis->msetnx(array('key0'=>'value0','key1'=>'value1'));//批量设置key值,类似setnx()方法批量操作$redis->append('key','-Smudge');//原始键值TK,将值追加到键值上,键值为TK-Smudge$redis->getRange('key',0,5);//键值截取从位置0开始到位置5结束$redis->getRange('key',-6,-1);//字符串截取从-6(倒数第6个位置)开始到-1(倒数第一个位置)结束$redis->setRange('key',0,'Smudge');//替换键值中的字符串,0表示从0位置开始替换多少个字符,其中汉字占2个位置$redis->strlen('key');//密钥长度$redis->getBit('key');$redis->setBit('key');list链表操作$redis->delete('list-key');//删除链表$redis->lPush('list-key','A');//插入链表的头部/左侧并返回链表的长度$redis->rPush('list-key','B');//在链表尾部/右侧插入,返回链表长度$redis->lPushx('list-key','C');//在链表的头部/左侧插入,如果链表不存在则返回0即插入成功,返回链表的当前长度$redis->rPushx('list-键','C');//插入链表的尾部/右侧,如果链表不存在则返回0,如果存在则插入成功,并返回当前链表长度$redis->lPop('list-钥匙');//返回LIST顶部(左侧)的VALUE,后进先出(栈)$redis->rPop('list-key');//返回到LIST的尾部(右侧VALUE),先进先出(队列)$redis->blPop();$redis->brPop();$redis->lSize('list-key');//如果是链表,返回链表的长度,空链表返回0如果不是链表或者不为空,则返回false,判断不是链表"===false"$redis->lGet('list-key',-1);//通过索引得到链表元素0左边得到一个-1得到最后一个$redis->lSet('list-key',0,'X');//将位置0的元素替换为X$redis->lRange('list-key',0,3);//链表截取从0开始到3个位置结束,结束位置为-1获取所有$redis->lTrim('list-k嘿',0,1);//拦截链表(不可逆)从索引0开始到索引1结束$redis->lRem('list-key','C',2);//从左边的链表中删除元素2C$redis->lInsert('list-key',Redis::BEFORE,'C','X');//在C元素前面插入X,Redis::After(意思是后面插入)如果链表不存在插入失败返回0,如果元素不存在返回-1$redis->rpoplpush('list-key','list-key2');//从源LIST的末尾弹出一个元素,并将该元素从目标LIST的顶部推入(左)推入目标LIST$redis->brpoplpush();//rpoplpush的阻塞版本,这个版本有第三个参数用于设置阻塞时间,即如果sourceLIST为空,则可以阻塞监听超时时间,如果有元素,则执行操作。设置集合类型设置无序集合不允许重复元素服务端可以实现多次集合操作$redis->sMembers('key');//获取容器key中的所有元素$redis->sAdd('key','TK');//(从左边插入,最后插入的元素在0位置),如果集合中已经有TK,则返回false,如果没有添加,则返回true$redis->sRem('key','TK');//移除容器中的TK$redis->sMove('key','key1','TK');//将easykey中的元素TK移动到容器key1中,操作成功返回TRUE$redis->sIsMember('key','TK');//检查VALUE是否是SET容器的成员$redis->sCard('key');//返回SET容器的成员个数$redis->sPop('key');//随机返回容器中的一个元素,并移除元素$redis->sRandMember('key');//随机返回容器中的一个元素,不移除元素$redis->sInter('key','key1');//返回两个集合的交集,如果没有交集则返回一个空数组。如果参数只有一个集合,则返回该集合对应的完整数组$redis->sInterStore('store','key','key1');//将collectionkey和collectionkey1的交集保存到containerstore中,成功返回1$redis->sUnion('key','key1');//collectionkey和collectionkey1的union注意即使有多个collection也只有一个$redis->sUnionStore('store','key','key1');//collectionkey和collectionkey1的union保存在collectionstore中,注意即使多个collection有相同的元素也只保留一个$redis->sDiff('key','key1','key2');//返回一个数组,其元素存在于key集合中但不存在于key1集合中key2Zset数据类型**(storedset)和set一样它是字符串的集合。不同之处在于每个元素都与一个双精度类型的分数相关联。redis的list类型其实是一个双向链表,其中每个子元素都是string类型。**$redis->zAdd('tkey',1,'A');//插入集合tkey,A元素关联一个分数,插入成功返回1且集合元素不能重复,如果元素已经存在,返回0$redis->zRange('tkey',0,-1);//获取集合元素,从位置0到-1$redis->zRange('tkey',0,-1,true);//获取集合元素,从位置0到位置-1,返回一个关联数组,得分array([A]=>0.01,[B]=>0.02,[D]=>0.03)其中小数来自zAdd方法的第二个参数$redis->zDelete('tkey','B');//移除集合tkey中的元素B,成功返回1,失败返回0$redis->zRevRange('tkey',0,-1);//获取集合的元素,从位置0到位置-1,按照分数降序处理数组$redis->zRevRange('tkey',0,-1,true);//获取集合元素,从位置0到位置-1,数组按分数降序处理返回分数关联数组$redis->zRangeByScore('tkey',0,0.2,array('withscores'=>真的));//获取几个tkeys中[0,0.2]区间元素的得分,得分从低到高排序,得分相同的元素会按照字典顺序排列,withscores控制返回一个关联数组$redis->zRangeByScore('tkey',0.1,0.36,array('withscores'=>TRUE,'limit'=>array(0,1)));//limit中的0和1代表符合条件的集合从位置0开始,向后扫描1,返回一个关联数组$redis->zCount('tkey',2,10);//获取tkey中得分在[2,10]区间的元素个数$redis->zRemRangeByScore('tkey',1,3);//移除tkey中得分在[1,3]区间(含边界)内的元素$redis->zRemRangeByRank('tkey',0,1);//默认元素score是递增的,移除tkey中0到-1位置的元素结束$redis->zSize('tkey');//返回key对应的有序集合中存储的元素个数$redis->zScore('tkey','A');//返回集合tkey中元素A的得分值$redis->zRank('tkey','A');//返回集合tkey中元素A在z集合中的索引值元素按照分数从低到高排列,即分数最低的索引为0$redis->zIncrBy('tkey',2.5,'A');//集合中元素A的score值加上2.5$redistkey->zUnion('union',array('tkey','tkey1'));//将集合tkey和集合tkey1的元素合并为集合并集,新集合中的元素不能重复返回新集合中元素的个数,如果元素A同时存在于tkey和tkey1中,则合并得分添加元素A$redis->zUnion('ko2',array('k1','k2'),array(5,2));//集合k1和集合k2合并成k02,array(5,1)中的元素个数对应子集合,然后5对应k1,k1的每个元素分数都要乘以5。同理,1对应k2,k2的每个元素得分乘以1,元素升序排列。默认添加相同的元素分数(SUM)$redis->zUnion('ko2',array('k1','k2'),array(10,2),'MAX');//每个子集乘以一个因子后,元素升序排列,相同元素的分数取最大值(MAX)或设置MIN取最小值$redis->zInter('ko1',数组('k1','k2'));//集合k1和集合k2在k01处相交,按照score值升序排序如果集合元素相同,则将新集合中元素的score值相加$redis->zInter('ko1',数组('k1','k2'),数组(5,1));//集合k1和集合k2相交于k01,array(5,1)中的元素个数对应子集,然后5对应k1,k1每个元素的分数乘以5。同理,1对应k2,k2中的每一个元素得分都乘以1,然后元素得分升序排列。默认添加相同的元素分数(SUM)$redis->zInter('ko1',array('k1','k2'),array(5,1),'MAX');//每个子集乘以一个因子后,元素score升序排列,相同的元素score取最大值(MAX)也可以设置MIN取最小值Hash数据类型redishash是一个字符串类型字段和值映射表。它的增删操作都是O(1)(平均)。Hash特别适合存储对象$redis->hSet('h','名字','TK');//将name字段值添加到h表中的TK$redis->hSetNx('h','name','TK');//将h表中name字段的值添加到TK中。如果字段name的值存在,则返回false,否则返回true$redis->hGet('h','name');//获取h表中的name字段值$redis->hLen('h');//获取h表的长度,即字段个数$redis->hDel('h','email');//删除h表中的email字段$redis->hKeys('h');//获取h表中的所有字段$redis->hVals('h');//获取h表中所有字段值$redis->hGetAll('h');//获取h表的所有字段,value返回一个关联数组(字段为键值)$redis->hExists('h','email');//判断email字段是否存在,表h不存在返回false$redis->hSet('h','age',28);$redis->hIncrBy('h','age',-2);//设置h表中age字段值加(-2)如果该值为非数值,则返回false,否则返回运行后的值$redis->hIncrByFloat('h','age',-0.33);//设置h表中age字段的值加上(-2.6)如果该值为非数值,则返回false,否则返回运算后的值value(保留15位小数)$redis->hMset('h',array('score'=>'80','salary'=>2000));//表h批量设置字段和值$redis->hMGet('h',array('score','salary'));//批量获取表h中字段的值