资讯专栏INFORMATION COLUMN

Redis函数

SHERlocked93 / 2534人阅读

摘要:传参返回指定状态数据重置中的状态数据。事务命令块执行事务块内的命令,事务块内所有命令的返回值,安命令的执行顺序排列,当操作被打断时,返回返回每一个命令的返回值的索引数组操作删除指定键,返回删除个数异步非阻塞删除。

PHPRedis手册

https://github.com/phpredis/p...

连接操作
$redis = new Redis();
$redis->connect("127.0.0.1", 6379, 1); //TCP短连接,1秒超时,返回bool
$redis->connect("/tmp/redis.sock"); //套接字
$redis->connect("127.0.0.1", 6379, 1, NULL, 100);//重新连接之间间隔100毫秒

$redis->pconnect("127.0.0.1", 6379, 1); //长连接,进程结束前,请求关闭结束时连接不释放。线程版不能使用.返回bool

$redis->auth("mima"); //密码,返回bool
$redis->select(0); //选择redis数据库,0-15个库,返回bool
$redis->swapdb(0,1);//原子交换两个数据库,返回bool

$redis->setOption(Redis::OPT_PREFIX, "myAppName:");//在所有键上使用指定前缀
$redis->_prefix("my");//添加key的前缀,与上一步会合并myAppName:my

$redis->close(); //关闭连接,返回bool
$redis->ping(); //检查连接,返回字符串‘+PONG’
$redis->echo("1"); //发送字符串到redis。redis原值返回
$redis->isConnected(); //连接redis成功与否,返回bool
Server操作
$redis->bgSave(); //异步在后台保存数据到磁盘。返回bool
$redis->save();//同步保存数据到磁盘。返回bool
$redis->bgRewriteAOF(); //启动AOF的后台重写

$redis->config("GET","*max-*-entries*");//获取配置项值
$redis->config("SET","dir","/var/run/redis/dumps/");//设置配置值

$redis->dbSize(); //返回当前库中的key个数
$redis->flushAll();//清空所有库中的所有key。总返回true
$redis->flushDb();//清空当前库中的所有key。总返回true

$redis->info(); //返回redis的所有状态数据。
$redis->info("CPU"); //传参返回指定状态数据
$redis->resetStat(); //重置info中的状态数据。
$redis->lastSave();//返回最后一次保存数据到磁盘的时间戳

$redis->time();//返回当前服务器时间
$redis->slowLog(”get“,10);//获取10条慢日志
$redis->slowLog("reset");//重置慢日志
事务操作
$redis->multi(Redis::MULTI);//开启事务,事务块内支线的多条命令按照先后顺序放进一个队列中,最后由EXEC命令原子执行。
$redis->multi(Redis::PIPELINE);//开启管道,事务块内支线的多条命令按照先后顺序放进一个队列中,最后由EXEC命令原子执行。
.....事务命令块....
$redis->exec();//执行事务块内的命令,事务块内所有命令的返回值,安命令的执行顺序排列,当操作被打断时,返回false


$redis->multi()
    ->set("key1", "val1")
    ->get("key1")
    ->set("key2", "val2")
    ->get("key2")
    ->exec();//返回每一个命令的返回值的索引数组
Key操作
$redis->delete("key1","key2");//删除指定键,返回删除key个数 
$redis->delete(array("key1","key2"));
$redis->unlink("key1","key2");//redis>=4.0.0 异步非阻塞删除。
$redis->unlink(array("key1","key2"));

$redis->exists("key");//验证指定key是否存在,返回bool,redis>4.0.0存在返回1,不存在返回0

$redis->incr("key1");//自增1,返回自增后的整数
$redis->incrBy("key1",10);//增加指定数。
$redis->decr("key");//自减1,返回自减后的整数
$redis->decrBy("key",10);//减少指定数

$redis->mGet(array("key","key2"));//查询多个key的值,不存在的key值为false,返回数组
$redis->getSet("key",2);//设置key一个新值,返回key的设置之前的值
$redis->randomKey();//随机返回一个key名
$redis->move("key",1);//将key移动到1库中,返回bool
$redis->rename("oldkey","newkey");//重命名key
$redis->renameNx("oldkey","newkey");//重命名key,key存在撤销

$redis->expire("key",3);//设置key过期时间,单位秒,返回bool
$redis->setTimeout("key",3);//同上
$redis->expireAt("key",time()+3);//设置key的到期时期时间戳,时间戳为秒
$redis->ttl("key");//返回key的剩余存活秒数,没有设置过期时间返回-1,key不存在返回-2
$redis->persist("key");//删除key的过期时间,返回bool

$redis->keys("key*"); //返回符合匹配模式的key数组或字符串。*为匹配符
$redis->type("key");//返回key的数据类型

$redis->migrate("127.0.0.1",6379,array("key1","key2"),0,3600,true,true);//迁移多个键值到备份redis的0库中,迁移最大时间3600秒,迁移复制替换。redis<3.0.6,只支持单个key迁移

$redis->sort("key",array("sort"=>"desc","limit"=>array(0,1)));//对列表,集合,有序集合的元素进行排序,返回数组
String操作
$redis->get("key");//获取key值,key不存在返回false
$redis->set("key","value");//设置key值,返回bool
$redis->setEx("key",3600,"value");//设置key值和过期时间单位秒
$redis->setNx("key","value");//分布式锁。。redis中不存在key设置key值,存在不操作,返回bool

$redis->append("key","value");//将值追加到指定key的字符串后面,返回新值长度
$redis->getRange("key",0,5);//返回key的值的指定范围的子字符串
$redis->setRange("key",5,"value");//修改替换key的指定位置之后的字符,返回长度
$redis->strLen("key");//获取key的值字符串长度

$redis->setBit("key",10,1);//设置位图指定位的状态值,0或1,返回设置之前的状态0或1
$redis->getBit("key",10);//获取位图指定位的状态值,0或1
$redis->bitCout("key");//统计位图中状态为1的个数

$redis->mSet(array("key1"=>1,"key2"=>2));//批量设置多个key的值,返回bool
Lists 操作
$redis->lIndex("key",0);//返回指定index序号的列表中的元素值,-1倒序第一个,0顺序第一个,位置不存在值返回false
$redis->lRange("key",0,-1);//返回指定开始和结束索引位置范围内的元素数组
$redis->lTrim("key",0,1);//修剪列表,只保留指定索引范围内的元素,返回bool
$redis->lInsert("key",Redis::BEFORE,"a","b");//将值b插入值a前面,Redis::AFTER是后面,指定值不存在返回-1
$redis->lSet("key",0,"value");//设置指定索引位置的值,返回bool,超出范围返回false

$redis->lPop("key");//删除列表第一个元素,并返回值,空列表返回false
$redis->lPush("key","value");//在列表头部添加值,返回列表长度,不存在列表创建,key不是列表类型返回false。
$redis->rPush("key","value);//在列表尾部添加值,返回列表长度,不存在列表创建,key不是列表类型返回false。
$redis->rPop("key");//删除列表末尾的元素,并返回值,空列表返回false
$redis->rpoplpush("key1","key2");//将key1的尾部弹出一个值存入key2列表的头部,并返回这个值,

$redis->lLen("key");//返回列表的元素个数
$redis->lRem("key","a",2);//从头开始删除两个值为a的元素,0,删除全部a元素,负数倒序删除,返回删除个数

Sets 操作
$redis->sAdd("key", "1");//添加值到集合中,值已存在返回false,返回集合当前的元素数量
$redis->sCard("key");//发返集合的元素个数,集合不存在返回0

$redis->sDiff("key1","key2","key3");//返回集合之间的差集,数组
$redis->sDiffStore("stare","key1","key2");//返回集合之间的差集个数,差集元素存储在第一个集合stare中
$redis->sInter("key1","key2","key3");//返回多个集合之间的交集数组,无交集返回空数组
$redis->sInterStore("store","key1","key2");//返回多个集合的交集元素个数,交接结果保存在第一个参数集合中。
$redis->sUnion("key1","key2");//返回多个集合之间的并集数组
$redis->sUnionStore("store","key1","key2");//返回多个集合的并集元素个数,并集结果保存在第一个参数的集合中。

$redis->sContains("key","value");//判断值是否在集合中,返回bool
$redis->sMembers("key");//返回无序的集合所有的元素数组。

$redis->sMove("from","to","value");//从一个集合中移动一个元素到另一个集合,返回bool
$redis->sPop("key1",10);//从集合中随机删除一个元素并返回值。集合为空或不存在返回false;带个数参数,将返回指定个数的元素
$redis->sRandMember("key",10);//从集合中随机返回一个元素的值,如带个数参数,将返回指定个数的元素
$redis->sRemove("key","value1","value2");//删除集合中指定的元素,返回元素个数

Sorted Sets 操作
$redis->zAdd("key",1,"value");//添加元素到有序集合,添加成功返回1,否则0

$redis->zCard("key");//返回集合元素个数,$redis->zSize();
$redis->zCount("key",0,100);//返回指定范围内的集合元素个数

$redis->zIncrBy("key",1,"value");//给指定的元素增加指定数,返回新的值

$redis->zInter("key",array("key2","key3"));//将数组中的多个集合的交集存放在第一个参数的集合中,返回新交集集合的元素个数
$redis->zUnion("key",array("key2","key3"));//将数组中 多个集合的并集存放在第一个参数的集合中,返回新并集的集合元素个数

$redis->zRange("key",0,-1);//返回指定索引范围的元素数组,0表示第一个,-1表示倒数第一个$redis->zRevRange("key",0,-1)反序返回
$redis->zRangeByScore("key",0,10);//返回指定排序值范围内的元素数组。
$redis->zRangeByScore("key",0,10,array("withscores"=>TRUE));//返回值为健名,排序值为健值的数组。
$redis->zRevRangeByScore("key",0,10);//反序zRangeByScore

$redis->zRank("key","value");//返回指定元素的索引位置值
$redis->zScore("key","value");//返回指定元素的排序值

$redis->zDelete("key","value");//删除指定元素,成功返回1,失败返回0
$redis->zDeleteRangeByRank("key",0,1);//按索引的范围删除元素,返回删除个数
$redis->zDeleteRangeByScore("key",0,10);//按排序的范围删除元素,返回删除个数

Hash 操作
$redis->hSet("key","hashKey","value");//设置修改哈希表key中的hashkey对应的值,不存在添加返回1,存在修改返回0,错误返回false
$redis->hGet("key","hashKey");//获取值,不存在返回false
$reids->hSetNx("key","hashKey","value");//锁机制,不存在时设置,存在不设置,不存在设置返回true,存在设置返回false

$redis->hLen("key");//返回hash表元素个数
$redis->hStrLen("key","hashKey");//返回hash表中指定元素值的字符串长度,不存在字段返回0
$redis->hDel("key","hashKey1","hashKey2");//从hash表中删除元素,hash表不存在返回false,hashkey不存在返回0,存在返回删除个数

$redis->hKeys("key");//返回hash表中的key索引数组
$redis->hVals("key");//返回hash表中的value值索引数组
$redis->hGetAll("key");//返回hash表中的key和value组成的关联数组

$redis->hExists("key","hashkey");//验证hashkey是否存在hash表中,返回bool
$redis->hIncrBy("key","hashkey",10);//给hash表中指定的hashkey值增加指定数,返回新值
$redis->hMSet("key",array("a"=>1,"b"=>2));//给hash表中设置多个键值对,元素值为NULL的设置空字符串,非字符串强制转为字符串,返回bool
$redis->hMGet("key",array("a","b"));//获取多个指定的hashkey的值,返回关联数组


Pub/Sub 操作
$redis->publish("chan-1", "hello, world!");//发布消息到频道
$redis->subscribe(array("chan-1", "chan-2", "chan-3"), "f");//订阅频道,并执行回调函数,频道,消息体
function f($redis, $chan, $msg) {
    switch($chan) {
        case "chan-1":
            ...
            break;

        case "chan-2":
            ...
            break;

        case "chan-2":
            ...
            break;
    }
}
Geocoding地理位置 操作
要求 redis >= 3.2 

$redis->geoAdd(
    "key",
    37.773, -122.431, "San Francisco",
    -157.858, 21.315, "Honolulu"
);//添加城市经纬度数据到key,返回添加成功个数

$redis->geoHash("key", "San Francisco");//查询多个成员地理位置编码后的字符串,返回数组
$redis->geoPos("key", "Honolulu", "Maui");//查询多个成员的经纬度,返回二维数组
$redis->geoDist("key", "Honolulu", "Maui", "km");//查询成员之间的距离,默认单位米m,单位公里km,万里mi,步feet,
$redis->geoRadius("", -157.858, 21.306, 300, "mi");//返回指定地点经纬度半径300万里内的所有其他成员名的集合,返回数组。判断商圈范围
$redis->geoRadiusByMember("key", "Honolulu", 300, "mi"));//使用成员名半径300万里内的其他成员集合
其他解决方案:postgresql / gis
Script 操作
$redis->eval("return 1");//执行lua脚本,返回复合类型数据
$redis->getLastError();//返回执行lua脚本后的最后一条错误信息,如无,返回false
迭代大数据键
SCAN 命令用于迭代当前数据库中的数据库键。
SSCAN 命令用于迭代集合键中的元素。
HSCAN 命令用于迭代哈希键中的键值对。
ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。

都支持增量式迭代, 它们每次执行都只会返回少量元素, 所以这些命令可以用于生产环境, 而不会出现像 KEYS 命令、 SMEMBERS 命令带来的问题 —— 当 KEYS 命令被用于处理一个大的数据库时, 又或者 SMEMBERS 命令被用于处理一个大的集合键时, 它们可能会阻塞服务器达数秒之久

定位大key
为了避免对线上redis带来卡顿,这就要用到scan指令,对于扫描出来的每一个key,使用type指令获得key的类型,然后使用相应数据结构的size或者len方法来得到它的大小,对于每一种类型,保留大小的前N名作为扫描结果展示出来。
上面这样的过程redis官方已经在redis-cli指令中提供了这样的扫描功能,我们可以直接拿来即用。

redis-cli -h 127.0.0.1 -p 6370 –-bigkeys
如果你担心这个指令会大幅抬升redis的ops导致线上报警,还可以增加一个休眠参数。

redis-cli -h 127.0.0.1 -p 6370 –-bigkeys -i 0.1
上面这个指令每隔100条scan指令就会休眠0.1s,ops`就不会剧烈抬升,但是扫描的时间会变长。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36983.html

相关文章

  • Redis源码阅读]当你启动Redis的时候,Redis做了什么

    摘要:初始化完结构体后,函数会判断是否有指定配置文件,如果有,调用函数,从配置文件加载相关的配置,把配置文件对应的参数设置到结构体。开始监听事件函数会设置和回调函数,然后调用函数启动事件循环器,开始监听事件。 直奔主题,当启动Redis的时候,Redis执行了哪些操作? 假设Redis安装在了/usr/local/目录下,那么启动Redis是通过执行/usr/local/bin/redis-...

    makeFoxPlay 评论0 收藏0
  • Redis源码阅读]当你输入get/set命令的时候,Redis做了什么

    摘要:函数调用函数读取用户输入的命令,读取方式是通过空格分隔多个参数,读取到命令请求之后,就会调用函数启动命令执行,函数调用发送命令给服务器。函数调用函数使用的协议编码输入的命令,然后调用函数发送数据到服务端并读取服务端的返回数据。 上一篇文章介绍了redis-server的启动过程,服务端启动之后,就启动事件循环机制监听新事件的到来,此时不同的客户端就可以通过发送指令的方式请求server...

    jeyhan 评论0 收藏0
  • 跟着大彬读源码 - Redis 2 - 服务器如何响应客户端请求?(上)

    摘要:现在客户端和服务器都准备好了,那么客户端和服务器如何建立连接服务器又是如何响应客户端的请求呢连接服务器客户端和服务器进行通讯,首先应该就是建立连接。以上是客户端发送命令给服务器的过程,在下一节中,我们再来认识服务器是如何响应客户端请的。 上次我们通过问题启动服务器,程序都干了什么?,跟着源码,深入了解了 Redis 服务器的启动过程。 既然启动了 Redis 服务器,那我们就要连上 R...

    Anonymous1 评论0 收藏0
  • 跟着大彬读源码 - Redis 2 - 服务器如何响应客户端请求?(上)

    摘要:现在客户端和服务器都准备好了,那么客户端和服务器如何建立连接服务器又是如何响应客户端的请求呢连接服务器客户端和服务器进行通讯,首先应该就是建立连接。以上是客户端发送命令给服务器的过程,在下一节中,我们再来认识服务器是如何响应客户端请的。 上次我们通过问题启动服务器,程序都干了什么?,跟着源码,深入了解了 Redis 服务器的启动过程。 既然启动了 Redis 服务器,那我们就要连上 R...

    LeanCloud 评论0 收藏0
  • 河狸家:Redis 源码的深度剖析 | UPYUN 技术现场

    摘要:然后设置回调函数,注册的事件响应之后要干活,这是一个循环调用的过程。最后,处理定时器任务。请求协议其实请求的协议,在前面函数执行过程当中会,在过程当中我们会注册一个回调函数,然后这个函数就会被调用了。 文:河狸家 架构师 陈科 原文链接:http://t.cn/RyuxZQJ Redis 这个东西很简单,懂 C 语言的同学花一个下午,可以把它的来龙去脉都研究懂。但是,它麻雀虽小五脏...

    FuisonDesign 评论0 收藏0
  • Redis Lua脚本的执行原理

    摘要:比如每执行条指令执行一次某个钩子函数,正是使用了这个钩子函数。在钩子函数里会忙里偷闲去处理客户端的请求,并且只有在发现脚本执行超时之后才会去处理请求,这个超时时间默认是秒。 Redis提供了非常丰富的指令集,但是用户依然不满足,希望可以自定义扩充若干指令来完成一些特定领域的问题。Redis 为这样的用户场景提供了 lua脚本支持,用户可以向服务器发送 lua 脚本来执行自定义动作,获取...

    huaixiaoz 评论0 收藏0

发表评论

0条评论

SHERlocked93

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<