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

laravel的redis简单模块操作浅析

时间:2023-03-29 14:45:40 PHP

入门级操作是常见的set/get操作;set操作,如果键名存在,会覆盖原来的值;$redis=app('redis.connection');$redis->set('library','predis');//存储key为library,value为predis的记录;$redis->get('图书馆');//获取key为libraryset的记录值/获取多个key-value$mkv=array('usr:0001'=>'Firstuser','usr:0002'=>'Seconduser','usr:0003'=>'第三用户');$redis->mset($mkv);//存储多个key对应的value$retval=$redis->mget(array_keys($mkv));//获取多个key对应的值来存储有存储时间限制的记录$redis->setex('library',10,'predis');//存储key为library,value为predis的记录,有效时长为10秒。添加操作不会覆盖现有值$redis->setnx('foo',12);//返回true,添加成功$redis->setnx('foo',34);//返回false,添加失败,因为已经存在key名为foo的记录集变体,结果返回替换前的值$redis->getset('foo',56);//返回34;如果之前没有记录,则返回nulllincrby/incr/decrby/decr值的增减$redis->incr('foo');//返回57,foo的值为57$redis->incrby('foo',2);//返回59,foo的值为59,检测是否有值$redis->exists('foo');删除$redis->del('foo');//删除成功返回true,失败然后返回falsetype类型检测,string返回string,list返回list,settable返回set/zset,hashtable返回hash;$redis->type('foo');append连接到已有的字符串$redis->get('str');//返回测试$redis->append('str','_123');//返回累计字符串长度8,此时str为'test_123'setrange部分替换操作,返回String长度$redis->setrange('str',0,'abc');//返回3,当第二个参数为0时,相当于set操作$redis->setrange('str',2,'cd');//返回4,表示在第二个字符后替换,此时'str'为'abcd'substr部分获取操作$redis->substr('str',0,2);//返回'abc'';表示从第0个开始,获取第2个字符strlen得到字符串长度$redis->strlen('str');//返回4;此时,'str'为'abcd'设置位存储$redis->setbit('binary',31,1);//表示第31位存1,这里可能有大小端问题?不过没关系,getbit应该没有问题getbitbitget$redis->getbit('binary',31);//返回1keys模糊搜索功能,支持*和?(匹配一个字符)$redis->set('foo1',123);$redis->set('foo2',456);$redis->keys('foo*');//返回foo1和foo2的数组$redis->keys('f?o?');//相同的randomkey返回一个随机密钥$redis->randomkey();//可能会返回'foo1'或'foo2'以及任何其他现有的keyrename/renamenx方法来重命名密钥,不同之处在于renamenx不会允许更改为现有密钥$redis->rename('str','str2');//将原名为'str'的key改为'str2'expire设置key-value的时效性ttl获取剩余有效期persist重置为永久存储$redis->expire('foo',10);//设置有效期为10秒$redis->ttl('foo');//返回10秒的剩余有效期值$redis->persistit('foo');//取消过期行为dbsize返回redis当前数据库的记录总数$redis->dbsize();队列操作rpush/rpushx有序列表操作,从队列中插入元素;lpush/lpushx和rpush/rpushx的区别在于它被插入到队列的头部,同上,'x'表示仅对现有键进行操作$redis->rpush('fooList','bar1');//返回列表长度1$redis->lpush('fooList','bar0');//返回列表长度2$redis->rpushx('fooList','bar2');//return3,rpushx只往已有队列中添加,否则return0llen返回当前列表的长度$redis->llen('fooList');//returns3lrange返回队列中某个范围的元素$redis->lrange('fooList',0,1);//返回包含第0到第一个的数组,共2个元素$redis->lrange('fooList',0,-1);//先返回第0到倒数第二,相当于返回所有元素lindex返回指定顺序位置的列表元素$redis->lindex('fooList',1);//return'bar1'lset修改队列中指定位置的值$redis->lset('fooList',1,'123');//修改位置1元素的值,返回truelrem从队列左边删除指定个数的字符$redis->lrem('fooList',1,'_');//从队列左侧(使用右侧的-1)删除一个字符“_”(如果有)。lpop/rpop弹出(和删除)最左边或最右边的一个,就像一个堆栈结构Element$redis->lpop('fooList');//返回'bar0'$redis->rpop('fooList');//返回'bar2'ltrim队列修改,保留左边的一些元素,删除剩下的$redis->ltrim('fooList',0,1);//保留左边第0到第1个元素rpoplpush从一个队列中弹出元素并推入另一个队列);$redis->rpush('list2','ab2');$redis->rpush('list2','ab3');$redis->rpoplpush('list1','list2');//结果list1=>array('ab0'),list2=>array('ab1','ab2','ab3')$redis->rpoplpush('list2','list2');//同样适用于同一个队列,将最后一个元素移到头部->linsert('list2','之前','ab1','123');//表示在元素'ab1'之前插入'123'$redis->linsert('list2','after','ab1','456');//表示在元素'ab1'后插入'456'blpop/brpop阻塞等待队列不为空,然后弹出最左边或最右边的一个Element(这个函数可以说在php之外非常有用)$redis->blpop('list3',10);//如果list3为空,等到第一个元素不为空,10秒后超时集合集合操作sadd添加集合集合元素并返回true,返回假$redis->sadd('set1','ab');$redis->sadd('set1','cd');$redis->sadd('set1','ef');sremshift移除指定元素$redis->srem('set1','cd');//删除'cd'元素spop弹出第一个元素$redis->spop('set1');//return'ab'smove将当前set集合的指定元素转移到另一个set集合$redis->sadd('set2','123');$redis->smove('set1','set2','ab');//将'set1'从'ab'移动到'set2',返回true或false;此时'set1'集合不存在'ab',值scard返回当前set表的元素个数$redis->scard('set2');//return2sismember判断元素是否属于当前set集合$redis->sismember('set2','123');//returntrueorfalsesmembers返回当前set集合的所有元素$redis->smembers('set2');//returnarray('123','ab')sinter/sunion/sdiff返回两个表中元素的交集/并集/补集$redis->sadd('set1','ab');$redis->sinter('set2','set1');//returnarray('ab')sinterstore/sunionstore/sdiffstore将两张表的交集/并集/补集元素复制到第三张表$redis->set('foo',0);$redis->sinterstore('foo','set1');//相当于把'set1'的内容复制到'foo',把'foo'变成一个集合表$redis->sinterstore('foo',array('set1','set2'));//将'set1'和'set2'中的相同元素复制到'foo'表中,覆盖'foo'的原始内容允许srandmember返回表中的一个随机元素$redis->srandmember('set1');有序集表操作sadd添加元素并设置序号,成功返回true,重复返回false$redis->zadd('zset1',1,'ab');$redis->zadd('zset1',2,'cd');$redis->zadd('zset1',3,'ef');zincrby增加或减少指定元素的索引值,改变元素的排列顺序$redis->zincrby('zset1',10,'ab');//return11zrem移除指定元素$redis->zrem('zset1','ef');//returntrueorfalsezrange按位置顺序返回表中指定区间的元素$redis->zrange('zset1',0,1);//返回位置0和1之间的元素(两个)$redis->zrange('zset1',0,-1);//返回位置0到倒数第二个元素之间的元素(相当于所有元素)zrevrange同上,返回表中指定区间内的元素,倒序$redis->zrevrange('zset1',0,-1);//元素顺序与zrange相反zrangebyscore/zrevrangebyscore按顺序/降序返回表中指定索引区间的元素$redis->zadd('zset1',3,'ef');$redis->zadd('zset1',5,'gh');$redis->zrangebyscore('zset1',2,9);//返回元素array('ef','gh'withindexvalue2-9)$redis->zrangebyscore('zset1',2,9,'withscores');//返回索引值2-9之间包含索引值的元素array(array('ef',3),array('gh',5))$redis->zrangebyscore('zset1',2,9,array('withscores'=>true,'limit'=>a矩阵(1,2)));//返回索引值2-9之间的元素,'withscores'=>true表示包含索引值;'limit'=>array(1,2),表示偏移1,返回2项,结果为array(array('ef',3),array('gh',5))zunionstore/zinterstorestoretheunion/将多个表交集到另一个表中$redis->zunionstore('zset3',array('zset1','zset2','zset0'));//将'zset1','zset2','zset0'的并集存入'zset3'$redis->zunionstore('zset3',array('zset1','zset2'),array('weights'=>array(2,1)));//weights参数表示权重,表示zset1集合的分数*2经过union和store到zset3集合,zset2集合*1的分数存入zset3集合$redis->zunionstore('zset3',array('zset1','zset2'),array('aggregate'=>'max'));//'aggregate'=>'max'或'min'表示union后的相同元素取大值还是取小值zcount统计一个索引区间的元素个数$redis->zcount('zset1',3,5);//返回2$redis->zcount('zset1','(3',5));//'(3'表示索引值在3-5之间但不在3之间,同理也可以用'(5'表示上限为5但不包括5个zcard统计元素$redis->zcard('zset1');//返回4zscore查询元素索引$redis->zscore('zset1','ef');//返回3zremrangebyscore删除一个索引范围内的元素$redis->zremrangebyscore('zset1',0,2);//删除索引在0-2('ab','cd')之间的元素,返回删除元素个数2zrank/zrevrank返回表中元素的顺序/降序位置(不是索引)$redis->zrank('zset1','ef');//返回0因为它是第一个元素;zrevrank返回1(最后一个)zremrangebyrank删除表中指定位置范围内的元素$redis->zremrangebyrank('zset1',0,10);//删除0-10位置的元素,返回删除元素个数2哈希表操作hset/hget访问hash表的数据$redis->hset('hash1','key1','v1');//将key为'key1',value为'v1'的元素存入hash1表$redis->hset('hash1','key2','v2');$redis->hget('hash1','key1');//获取表'hash1'中键'key1'的值,返回'v1'hexists返回哈希表是否存在指定键$redis->hexists('hash1','key1');//true或falsehdel删除哈希表中指定key的元素$redis->hdel('hash1','key2');//true或falsehlen返回哈希表元素的数量$redis->hlen('hash1');//返回1hsetnx添加一个元素,但不能重复$redis->hsetnx('hash1','key1','v2');//假$redis->hsetnx('hash1','key2','v2');//truehmset/hmget访问哈希表的多个元素$redis->hmset('hash1',array('key3'=>'v3','key4'=>'v4'));$redis->hmget('hash1',array('key3','key4'));//返回对应的值array('v3','v4')hincrby累加指定的key$redis->hincrby('hash1','key5',3);//不如果存在,则存储并返回3;如果存在,则返回原值+3;$redis->hincrby('hash1','key5',10);//返回13hkeys并返回哈希表中的所有键$redis->hkeys('hash1');//returnarray('key1','key2','key3','key4','key5')hvals返回哈希表中的所有值$redis->hvals('hash1');//returnarray('v1','v2','v3','v4',13)hgetall返回整个哈希表元素$redis->hgetall('hash1');//returnarray('key1'=>'v1','key2'=>'v2','key3'=>'v3','key4'=>'v4','key5'=>13)排序操作sort排序$redis->rpush('tab',3);$redis->rpush('tab',2);$redis->rpush('tab',17);$redis->sort('tab');//returnarray(2,3,17)//使用参数,可以组合使用array('sort'=>'desc','limit'=>array(1,2))$redis->sort('tab',array('sort'=>'desc'));//降序排列,returnarray(17,3,2)$redis->sort('tab',array('limit'=>array(1,2)));//返回序列位置中1的2个元素(这里2指的是个数,不是位置),returnarray(3,17)$redis->sort('tab',array('limit'=>array('alpha'=>true)));//按第一个字符排序,返回array(17,2,3),因为17的第一个字符是'1'所以第一个位置$redis->sort('tab',array('limit'=>array('商店'=>'订购')));//表示永久排序,返回元素个数$redis->sort('tab',array('limit'=>array('get'=>'pre_*')));//通配符'*'用于过滤元素,表示只返回'pre_'开头的元素。Redismanagementoperationinfo显示服务状态信息$redis->info();select指定要操作的数据库$redis->select(4);//指定数据库的下标flushdb清除当前库$redis->flushdb();move将当前库的元素移动到其他数据库$redis->set('tomove','bar');$redis->移动('tomove',4);slaveof配置从服务器$redis->slaveof('127.0.0.1',80);//配置127.0.0.180端口服务器为从服务器$redis->slaveof();//清除从服务器同步保存服务器数据到磁盘$redis->save();异步保存服务器数据到磁盘$redis->bgsave();返回磁盘最后更新的时间$redis->lastsave();更多相关内容五分钟带你了解redis最新laravel5.8连接redis集群