欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

phpredis汉语言手册——《redis中文手册》 php版

程序员文章站 2024-01-08 18:22:34
...
phpredis中文手册——《redis中文手册》 php版

redis中文手册:http://readthedocs.org/docs/redis/en/latest/?

本文是参考《redis中文手册》,将示例代码用php来实现,注意php-redis与redis_cli的区别(主要是返回值类型和参数用法)。

目录(使用CTRL+F快速查找命令):

KeyStringHashListSet
  • 键(Key)
    • DEL
    • KEYS
    • RANDOMKEY
    • TTL
    • EXISTS
    • MOVE
    • RENAME
    • RENAMENX
    • TYPE
    • EXPIRE
    • EXPIREAT
    • OBJECT
    • PERSIST
    • SORT
  • 字符串(String)
    • SET
    • SETNX
    • SETEX
    • SETRANGE
    • MSET
    • MSETNX
    • APPEND
    • GET
    • MGET
    • GETRANGE
    • GETSET
    • STRLEN
    • INCR
    • INCRBY
    • DECR
    • DECRBY
    • SETBIT
    • GETBIT
  • 哈希表(Hash)
    • HSET
    • HSETNX
    • HMSET
    • HGET
    • HMGET
    • HGETALL
    • HDEL
    • HLEN
    • HEXISTS
    • HINCRBY
    • HKEYS
    • HVALS
  • 表(List)
    • LPUSH
    • LPUSHX
    • RPUSH
    • RPUSHX
    • LPOP
    • RPOP
    • BLPOP
    • BRPOP
    • LLEN
    • LRANGE
    • LREM
    • LSET
    • LTRIM
    • LINDEX
    • LINSERT
    • RPOPLPUSH
    • BRPOPLPUSH
  • 集合(Set)
    • SADD
    • SREM
    • SMEMBERS
    • SISMEMBER
    • SCARD
    • SMOVE
    • SPOP
    • SRANDMEMBER
    • SINTER
    • SINTERSTORE
    • SUNION
    • SUNIONSTORE
    • SDIFF
    • SDIFFSTORE
?Sorted SetPub/SubTransactionConnectionServer
  • 有序集(Sorted Set)
    • ZADD
    • ZREM
    • ZCARD
    • ZCOUNT
    • ZSCORE
    • ZINCRBY
    • ZRANGE
    • ZREVRANGE
    • ZRANGEBYSCORE
    • ZREVRANGEBYSCORE
    • ZRANK
    • ZREVRANK
    • ZREMRANGEBYRANK
    • ZREMRANGEBYSCORE
    • ZINTERSTORE
    • ZUNIONSTORE
  • 发布/订阅(Pub/Sub)
    • PUBLISH
    • SUBSCRIBE
    • PSUBSCRIBE
    • UNSUBSCRIBE
    • PUNSUBSCRIBE
  • 事务(Transaction)
    • WATCH
    • UNWATCH
    • MULTI
    • EXEC
    • DISCARD
  • 连接(Connection)
    • AUTH
    • PING
    • SELECT
    • ECHO
    • QUIT
  • 服务器(Server)
    • BGREWRITEAOF
    • BGSAVE
    • SAVE
    • LASTSAVE
    • DBSIZE
    • SLAVEOF
    • FLUSHALL
    • FLUSHDB
    • SHUTDOWN
    • SLOWLOG
    • INFO
    • CONFIG GET
    • CONFIG SET
    • CONFIG RESETSTAT
    • DEBUG OBJECT
    • DEBUG SEGFAULT
    • MONITOR
    • SYNC

phpredis是redis的php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系

很有用;以下是redis官方提供的命令使用技巧:

下载地址如下:

https://github.com/owlient/phpredis(支持redis 2.0.4)

Redis::__construct构造函数
$redis = new Redis();

connect, open 链接redis服务
参数
host: string,服务地址
port: int,端口号
timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)
注: 在redis.conf中也有时间,默认为300

pconnect, popen 不会主动关闭的链接
参考上面

setOption 设置redis模式

getOption 查看redis设置的模式

ping?查看连接状态

?

KEY相关操作

phpredis汉语言手册——《redis中文手册》 php版DEL

移除给定的一个或多个key。

如果key不存在,则忽略该命令。

时间复杂度:
O(N),N为要移除的key的数量。
移除单个字符串类型的key,时间复杂度为O(1)。
移除单个列表、集合、有序集合或哈希表类型的key,时间复杂度为O(M),M为以上数据结构内的元素数量。返回值:被移除key的数量。

?

phpredis汉语言手册——《redis中文手册》 php版
//DEL # 情况1: 删除单个key$redis->set('myname','ikodota'); echo $redis->get('myname').'
'; # 返回:ikodota $redis->del('myname');# 返回 TRUE(1)var_dump($redis->get('myname')); # 返回 bool(false) # 情况2: 删除一个不存在的keyif(!$redis->exists('fake_key')) # 不存在var_dump($redis->del('fake_key')); # 返回 int(0) # 情况3: 同时删除多个key$array_mset=array('first_key'=>'first_val', 'second_key'=>'second_val', 'third_key'=>'third_val'); $redis->mset($array_mset); #用MSET一次储存多个值$array_mget=array('first_key','second_key','third_key'); var_dump($redis->mget($array_mget)); #一次返回多个值 //array(3) { [0]=> string(9) "first_val" [1]=> string(10) "second_val" [2]=> string(9) "third_val" } $redis->del($array_mget); #同时删除多个keyvar_dump($redis->mget($array_mget)); #返回 array(3) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(false) }
phpredis汉语言手册——《redis中文手册》 php版

?

phpredis汉语言手册——《redis中文手册》 php版KEYSKEYS pattern?查找符合给定模式的key
KEYS?*命中数据库中所有key
KEYS?h?llo命中hello,?hallo?and?hxllo等。
KEYS?h*llo命中hlloheeeeello等。
KEYS?h[ae]llo命中hellohallo,但不命中hillo

特殊符号用"\"隔开

时间复杂度:O(N),N为数据库中key的数量。返回值:符合给定模式的key列表。

警告 :KEYS的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的key,你最好还是用集合(Set)

?

phpredis汉语言手册——《redis中文手册》 php版
//KEYS #$redis->FLUSHALL();$array_mset_keys=array('one'=>'1',          'two'=>'2',          'three '=>'3',          'four'=>'4'); $redis->mset($array_mset_keys); #用MSET一次储存多个值var_dump($redis->keys('*o*')); //array(3) { [0]=> string(4) "four" [1]=> string(3) "two" [2]=> string(3) "one" }var_dump($redis->keys('t??')); //array(1) { [0]=> string(3) "two" }var_dump($redis->keys('t[w]*')); //array(1) { [0]=> string(3) "two" }print_r($redis->keys('*')); //Array ( [0] => four [1] => three [2] => two [3] => one )
phpredis汉语言手册——《redis中文手册》 php版

?

phpredis汉语言手册——《redis中文手册》 php版RANDOMKEY

从当前数据库中随机返回(不删除)一个key。

时间复杂度:O(1)返回值:
当数据库不为空时,返回一个key
当数据库为空时,返回nil。

?

phpredis汉语言手册——《redis中文手册》 php版
//RANDOMKEY$redis->FLUSHALL(); # 情况1:数据库不为空$array_mset_randomkey=array('fruit'=>'apple',                'drink'=>'beer',                'food'=>'cookis'); $redis->mset($array_mset_randomkey); echo $redis->randomkey(); print_r($redis->keys('*')); # 查看数据库内所有key,证明RANDOMKEY并不删除key//Array ( [0] => food [1] => drink [2] => fruit ) # 情况2:数据库为空$redis->flushdb(); # 删除当前数据库所有keyvar_dump($redis-> randomkey()); //bool(false)
phpredis汉语言手册——《redis中文手册》 php版

?

phpredis汉语言手册——《redis中文手册》 php版TTL
TTL key

返回给定key的剩余生存时间(time to live)(以秒为单位)。

时间复杂度:O(1)返回值:
key的剩余生存时间(以秒为单位)。
key不存在或没有设置生存时间时,返回-1?。

?

phpredis汉语言手册——《redis中文手册》 php版
//TTL # 情况1:带TTL的key$redis->flushdb(); //$redis->set('name','ikodota'); # 设置一个key$redis->expire('name',30); # 设置生存时间为30秒 //return (integer) 1echo $redis->get('name'); //return ikodotaecho $redis->ttl('name'); //(integer) 25//echo $redis->ttl('name');  # 30秒过去,name过期 //(integer) -1var_dump($redis->get('name')); # 过期的key将被删除 //return bool(false); # 情况2:不带TTL的key$redis->set('site','wikipedia.org');//OKvar_dump($redis->ttl('site'));//int(-1) # 情况3:不存在的key$redis->EXISTS('not_exists_key');//int(0)var_dump($redis->TTL('not_exists_key'));//int(-1)
phpredis汉语言手册——《redis中文手册》 php版

?

phpredis汉语言手册——《redis中文手册》 php版EXISTSEXISTS key

检查给定key是否存在。

时间复杂度:O(1)返回值:key存在,返回1,否则返回0
//EXISTSecho '
EXISTS
'; $redis->set('db',"redis"); //bool(true) var_dump($redis->exists('db')); # key存在 //bool(true) $redis->del('db'); # 删除key //int(1)var_dump($redis->exists('db')) # key不存在 //bool(false)

?

phpredis汉语言手册——《redis中文手册》 php版MOVE
MOVE key db

将当前数据库(默认为0)的key移动到给定的数据库db当中。

如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定key,或者key不存在于当前数据库,那么MOVE没有任何效果。

因此,也可以利用这一特性,将MOVE当作锁(locking)原语。

时间复杂度:O(1)返回值:移动成功返回1,失败则返回0
phpredis汉语言手册——《redis中文手册》 php版
//MOVEecho '

MOVE
'; # 情况1: key存在于当前数据库$redis->SELECT(0); # redis默认使用数据库0,为了清晰起见,这里再显式指定一次。//OK$redis->SET('song',"secret base - Zone"); //OKvar_dump ($redis->MOVE('song',1)); # 将song移动到数据库1 //bool(true) # 情况2:当key不存在的时候$redis->SELECT(1); var_dump ($redis->EXISTS('fake_key'));//bool(false);var_dump($redis->MOVE('fake_key', 0)); # 试图从数据库1移动一个不存在的key到数据库0,失败) //bool(false) $redis->SELECT(0); # 使用数据库0var_dump($redis->EXISTS('fake_key')); # 证实fake_key不存在 //bool(false) # 情况3:当源数据库和目标数据库有相同的key时 $redis->SELECT(0); # 使用数据库0$redis->SET('favorite_fruit',"banana"); $redis->SELECT(1); # 使用数据库1$redis->SET('favorite_fruit',"apple"); $redis->SELECT(0); # 使用数据库0,并试图将favorite_fruit移动到数据库1var_dump($redis->MOVE('favorite_fruit',1)); # 因为两个数据库有相同的key,MOVE失败 //return bool(false)echo $redis->GET('favorite_fruit'); # 数据库0的favorite_fruit没变 //return banana $redis->SELECT(1); echo $redis->GET('favorite_fruit'); # 数据库1的favorite_fruit也是 //return apple
phpredis汉语言手册——《redis中文手册》 php版

?

phpredis汉语言手册——《redis中文手册》 php版RENAME?

RENAME key newkey

将key改名为newkey。

当key和newkey相同或者key不存在时,返回一个错误。

当newkey已经存在时,RENAME命令将覆盖旧值。

时间复杂度:O(1)返回值:改名成功时提示OK,失败时候返回一个错误。
phpredis汉语言手册——《redis中文手册》 php版
//RENAMEecho '

RENAME
'; # 情况1:key存在且newkey不存在$redis->SET('message',"hello world"); var_dump($redis->RENAME('message','greeting')); //bool(true)var_dump($redis->EXISTS('message')); # message不复存在 //bool(false)var_dump($redis->EXISTS('greeting')); # greeting取而代之 //bool(true) # 情况2:当key不存在时,返回错误 ,php返回false;var_dump($redis->RENAME('fake_key','never_exists')); //bool(false) # 情况3:newkey已存在时,RENAME会覆盖旧newkey$redis->SET('pc',"lenovo"); $redis->SET('personal_computer',"dell"); var_dump($redis->RENAME('pc','personal_computer')); //bool(true)var_dump($redis->GET('pc')); //(nil) bool(false)var_dump($redis->GET('personal_computer')); # dell“没有”了 //string(6) "lenovo"
phpredis汉语言手册——《redis中文手册》 php版

?

phpredis汉语言手册——《redis中文手册》 php版RENAMENX?RENAMENX key newkey

当且仅当newkey不存在时,将key改为newkey。

出错的情况和RENAME一样(key不存在时报错)。

时间复杂度:O(1)返回值:
修改成功时,返回1
如果newkey已经存在,返回0
phpredis汉语言手册——《redis中文手册》 php版
//RENAMENXecho '

RENAMENX
'; # 情况1:newkey不存在,成功$redis->SET('player',"MPlyaer"); $redis->EXISTS('best_player'); //int(0)var_dump($redis->RENAMENX('player','best_player')); // bool(true) # 情况2:newkey存在时,失败$redis->SET('animal',"bear"); $redis->SET('favorite_animal', "butterfly"); var_dump($redis->RENAMENX('animal', 'favorite_animal'));// bool(false) var_dump($redis->get('animal')); //string(4) "bear"var_dump($redis->get('favorite_animal')); //string(9) "butterfly"
phpredis汉语言手册——《redis中文手册》 php版
phpredis汉语言手册——《redis中文手册》 php版TYPETYPE key

返回key所储存的值的类型。

时间复杂度:O(1)返回值:
none(key不存在) int(0)
string(字符串) int(1)
list(列表) int(3)
set(集合) int(2)
zset(有序集) int(4)
hash(哈希表) int(5)

?

phpredis汉语言手册——《redis中文手册》 php版
//TYPE$redis->flushALL(); echo '

TYPE
'; var_dump($redis->TYPE('fake_key')); //none /int(0) $redis->SET('weather',"sunny"); # 构建一个字符串var_dump($redis->TYPE('weather'));//string / int(1) $redis->SADD('pat',"dog"); # 构建一个集合var_dump($redis->TYPE('pat')); //set /int(2) $redis->LPUSH('book_list',"programming in scala"); # 构建一个列表var_dump($redis->TYPE('book_list'));//list / int(3) $redis->ZADD('pats',1,'cat'); # 构建一个zset (sorted set) // int(1)$redis->ZADD('pats',2,'dog'); $redis->ZADD('pats',3,'pig'); var_dump($redis->zRange('pats',0,-1)); // array(3) { [0]=> string(3) "cat" [1]=> string(3) "dog" [2]=> string(3) "pig" }var_dump($redis->TYPE('pats')); //zset / int(4) $redis->HSET('website','google','www.g.cn'); # 一个新域var_dump($redis->HGET('website','google')); //string(8) "www.g.cn"var_dump($redis->TYPE('website')); //hash /int(5)
phpredis汉语言手册——《redis中文手册》 php版

phpredis汉语言手册——《redis中文手册》 php版EXPIRE

EXPIRE key seconds

为给定key设置生存时间。

当key过期时,它会被自动删除。

在Redis中,带有生存时间的key被称作“易失的”(volatile)。

?

在低于2.1.3版本的Redis中,已存在的生存时间不可覆盖。
从2.1.3版本开始,key的生存时间可以被更新,也可以被PERSIST命令移除。(详情参见?http://redis.io/topics/expire)。

?

时间复杂度:O(1)返回值:
设置成功返回1
key不存在或者不能为key设置生存时间时(比如在低于2.1.3中你尝试更新key的生存时间),返回0
phpredis汉语言手册——《redis中文手册》 php版
//EXPIRE$redis->select(7); //$redis->flushdb(); echo '

EXPIRE
'; $redis->SET('cache_page',"www.cnblogs.com/ikodota"); $redis->EXPIRE('cache_page', 30); # 设置30秒后过期sleep(6); echo $redis->TTL('cache_page').'
'; # 查看给定key的剩余生存时间 //(integer) 24 $redis->EXPIRE('cache_page', 3000); # 更新生存时间,3000秒sleep(4); echo $redis->TTL('cache_page').'
'; //(integer) 2996
phpredis汉语言手册——《redis中文手册》 php版

?

?

phpredis汉语言手册——《redis中文手册》 php版EXPIREAT?EXPIREAT key timestamp

EXPIREAT的作用和EXPIRE一样,都用于为key设置生存时间。

不同在于EXPIREAT命令接受的时间参数是UNIX时间戳(unix timestamp)。

时间复杂度:O(1)返回值:
如果生存时间设置成功,返回1
key不存在或没办法设置生存时间,返回0

?

//EXPIREATecho '

EXPIREAT
'; $redis->SET('cache','www.google.com'); echo $redis->EXPIREAT('cache','1355292000'); # 这个key将在2012.12.12过期 echo ($redis->TTL('cache')); //return 124345085

?

phpredis汉语言手册——《redis中文手册》 php版OBJECT?OBJECT subcommand [arguments [arguments]]

OBJECT命令允许从内部察看给定key的Redis对象。

它通常用在除错(debugging)或者了解为了节省空间而对key使用特殊编码的情况。
当将Redis用作缓存程序时,你也可以通过OBJECT命令中的信息,决定key的驱逐策略(eviction policies)。

OBJECT命令有多个子命令:

  • OBJECT?REFCOUNT?返回给定key引用所储存的值的次数。此命令主要用于除错。
  • OBJECT?ENCODING?返回给定key锁储存的值所使用的内部表示(representation)。
  • OBJECT?IDLETIME?返回给定key自储存以来的空转时间(idle, 没有被读取也没有被写入),以秒为单位。
对象可以以多种方式编码:
  • 字符串可以被编码为raw(一般字符串)或int(用字符串表示64位数字是为了节约空间)。
  • 列表可以被编码为ziplistlinkedlistziplist是为节约大小较小的列表空间而作的特殊表示。
  • 集合可以被编码为intset或者hashtableintset是只储存数字的小集合的特殊表示。
  • 哈希表可以编码为zipmap或者hashtablezipmap是小哈希表的特殊表示。
  • 有序集合可以被编码为ziplist或者skiplist格式。ziplist用于表示小的有序集合,而skiplist则用于表示任何大小的有序集合。
假如你做了什么让Redis没办法再使用节省空间的编码时(比如将一个只有1个元素的集合扩展为一个有100万个元素的集合),特殊编码类型(specially encoded types)会自动转换成通用类型(general type)。时间复杂度:O(1)返回值:
REFCOUNTIDLETIME返回数字。
ENCODING返回相应的编码类型。
phpredis汉语言手册——《redis中文手册》 php版
//OBJECT$redis->select(8); echo '

OBJECT
'; $redis->SET('game',"WOW"); #微信
  • phpredis汉语言手册——《redis中文手册》 php版

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    相关文章

    相关视频


    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
  • phpredis汉语言手册——《redis中文手册》 php版
  • 专题推荐

    作者信息
    phpredis汉语言手册——《redis中文手册》 php版

    认证0级讲师

    推荐视频教程
  • phpredis汉语言手册——《redis中文手册》 php版javascript初级视频教程
  • phpredis汉语言手册——《redis中文手册》 php版jquery 基础视频教程
  • 视频教程分类