常用php操作redis命令整理

常用php操作redis命令整理

Redis连接

在使用Redis的开始的时候,在phpinfo()中查看redis的类库是否已经加载,()确保加载后使用。

[root@iZ2ze3941xpzjp7tqodvj7Z ~]# redis-cli 
127.0.0.1:6379> auth test123
OK
127.0.0.1:6379> 
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
## 密码命令
$redis->auth('test123');
## 检测是否连接成功,成功输出1
$redis->ping();

String

GET/SET

将字符串值value关联到key。如果key已经持有其他值,SET就覆写旧值,无视类型,总是返回OK(TRUE),因为SET不可能失败。

127.0.0.1:6379> set name "stark" EX 2000
OK
127.0.0.1:6379> get name
"stark"
127.0.0.1:6379> TTL name
(integer) 1907
	
	//判断指定的key是否存在
	$redis->exists('name');//int(0)
	$redis->set('name','stark');
	#expire设置过期时间,单位是秒
	$redis->expire('name',2000);       
	echo $redis->get('name');  
	//(integer) 1907 ,不断输出,会不断缩减过期时间
	echo $redis->ttl('name');  
	
	#新版本加分布式锁
	#NX意思为SET IF NOT EXIST,即当key不存在时,我们进行set操作;
	#若key已经存在,则不做任何操作;
	#PX意思是给这个key加一个过期设置
	$redis->set($resource, $token, ['NX', 'PX' => 10 ]);

SETNX

将key的值设为value,当且仅当key不存在。若给定的key已经存在,则SETNX不做任何动作。设置成功,返回1。设置失败,返回0。

redis> EXISTS job                # job 不存在
(integer) 0

redis> SETNX job "programmer"    # job 设置成功
(integer) 1

redis> SETNX job "code-farmer"   # 尝试覆盖 job ,失败
(integer) 0

redis> GET job                   # 没有被覆盖
"programmer"


$redis->exists('key');  // key不存在 //bool(false);
$redis->setnx('key', "val");  // key设置成功 //bool(true)
$redis->setnx('key', "val1");  // key设置失败 //bool(false)
echo $redis->get('key');  // 没有被覆盖 //"val"

SETEX

将值value关联到key,并将key的生存时间设为seconds(以秒为单位)。如果key已经存在,SETEX命令将覆写旧值。设置成功时返回OK.

redis> SETEX cache_user_id 60 10086
OK
redis> GET cache_user_id  # 值
"10086"
redis> TTL cache_user_id  # 剩余生存时间
(integer) 49


# key 已经存在时,SETEX 覆盖旧值
redis> SET cd "timeless"
OK
redis> SETEX cd 3000 "goodbye my love"
OK
redis> GET cd
"goodbye my love"
redis> TTL cd
(integer) 2997
$redis->setex('key', 10, 'val'); //表示存储有效期为10秒
举例:
//①key不存在
$redis->setex('key', 60,val);//bool(true)
echo $redis->get('key');  //值 //"val"
sleep(4);
echo $redis->ttl('key');  //剩余生存时间 //int(56)

//②key已经存在,key被覆写
$redis->set('key', "val1"); //bool(true);
$redis->setex('key', 3000,"val2"); //bool(true);
echo $redis->get('key');    //"val2"

MGET/MSET

同时设置一个或多个key-value对。当发现同名的key存在时,MSET会用新值覆盖旧值,如果你不希望覆盖同名key,请使用MSETNX命令。总是返回OK(因为MSET不可能失败)

redis> MSET date "2012.3.30" time "11:00 a.m." weather "sunny"
OK

redis> MGET date time weather
1) "2012.3.30"
2) "11:00 a.m."
3) "sunny"

$array_mset=['key1'=>'val1', 'key2'=>'val2'];
$redis->MSET($array_mset); //bool(true)

返回所有(一个或多个)给定key的值。如果某个指定key不存在,那么返回特殊值nil。因此,该命令永不失败。一个包含所有给定key的值的列表。


$redis_mget_key_array=array('exists_key','not_exists_key');
var_dump($redis->MGET($redis_mget_key_array));  
//当MGET中有不存在key的情况   
//array(2) { [0]=> string(3) "val" [1]=> bool(false) }

INCR / INCRBY

redis> SET page_view 20
OK
redis> INCR page_view
# key 存在且是数字值
redis> SET rank 50
OK
redis> INCRBY rank 20
(integer) 70
redis> GET rank
"70"
# key 不存在时
redis> EXISTS counter
(integer) 0
redis> INCRBY counter 30
(integer) 30
redis> GET counter
"30"

$redis->SET('page_view', 20);
var_dump($redis->INCR('page_view')); //int(21) 
var_dump($redis->GET('page_view'));   
// 数字值在Redis中以字符串的形式保存 
//string(2) "21

//①key存在且是数字值
$redis->SET('num', 50);  //设置num为50
$redis->INCRBY('num', 20);  //给num加上20
var_dump($redis->GET('num')); //string(2) "70"

//②key不存在
$redis->INCRBY('not_exists_key',20);  //20
var_dump($redis->GET('not_exists_key')); //string(20)

//③key不是数字值
$redis->SET('book', "long long ago...");
var_dump($redis->INCRBY('book', 200)); // bool(false)

DECR和DECRBY原理是一样的,这里就不赘述了。

哈希类型

HSET

将哈希表key中的域field的值设为value;如果field是哈希表中的一个新建域,并且值设置成功,返回1;如果哈希表中域field已经存在且旧值已被新值覆盖,返回0。

$redis->hset('hash1','key1','val1');
var_dump($redis->hset('hash1','key1','val1_new')); //将key为'key1' value为'val1_new'覆盖。返回0
var_dump($redis->hset('hash1','key2','val2'));     //返回1

HGET

返回哈希表key中给定域field的值。当给定域不存在或是给定key不存在时,返回nil。


$res = $redis->hget('hash1','key1');           
//取出表'hash1'中的key 'key1'的值,返回'val1_new'
var_dump($redis->hget('hash1','key3'));     
//不存在返回false

HMGET

返回哈希表key中,一个或多个给定域的值。
如果给定的域不存在于哈希表,那么返回一个nil值。
因为不存在的key被当作一个空哈希表来处理,所以对一个不存在的key进行HMGET操作将返回一个只带有nil值的表。

$redis->hset('hash1','key1','val1');
$arr = ['key1', 'key6'];
var_dump($redis->hmget('hash1',$arr)); //array(2) { ["key1"]=> string(4) "val1" ["key6"]=> bool(false) }

HGETALL

返回哈希表key中,所有的域和值。
在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。
以列表形式返回哈希表的域和域的值。 若key不存在,返回空列表。


$redis->hset('hash1','key1','val1');
$redis->hset('hash1','key2','val2');
var_dump($redis->hGetAll('hash1')); //array(2) { ["key1"]=> string(4) "val1" ["key2"]=> string(4) "val2" }

HDEL

var_dump($redis->hdel('hash1','key2')); //int(1) 删除成功返回1

HLEN

var_dump($redis->hlen('hash1')); //int(1)

HEXISTS

查看哈希表key中,给定域field是否存在。
如果哈希表含有给定域,返回1;不含有给定域,或key不存在,返回0。

var_dump($redis->HEXISTS('hash1','key1')); //bool(true) 
var_dump($redis->HEXISTS('hash1','key6')); // bool(false)

HINCRBY

为哈希表key中的域field的值加上增量increment,也可以为负数,相当于对给定域进行减法操作。
如果key不存在,一个新的哈希表被创建并执行HINCRBY命令。
如果域field不存在,那么在执行命令前,域的值被初始化为0。


$redis->hset('hash1','key1','val1');
$redis->hset('hash1','key2','val2'); 
$redis->hincrby('hash1','key3',3);
$redis->hincrby('hash1','key4',-3);
var_dump($redis->hgetall('hash1')); //array(4) { ["key1"]=> string(4) "val1" ["key2"]=> string(4) "val2" ["key3"]=> string(1) "3" ["key4"]=> string(2) "-3" }

HKEYS

返回哈希表key中的所有域。当key不存在时,返回一个空表。


var_dump($redis->hkeys('hash1')); //array(4) { [0]=> string(4) "key1" [1]=> string(4) "key2" [2]=> string(4) "key3" [3]=> string(4) "key4" }
var_dump($redis->hkeys('hash6')); //array(0) { }

HVALS

返回哈希表key中的所有值。当key不存在时,返回一个空表。


var_dump($redis->hvals('hash1'));
 //array(4) { [0]=> string(4) "val1" [1]=> string(4) "val2" [2]=> string(1) "3" [3]=> string(2) "-3" }
var_dump($redis->hvals('hash5'));  // array(0) { }

List 类型

头元素和尾元素:头元素指的是列表左端/前端第一个元素,尾元素指的是列表右端/后端第一个元素。举个例子,列表list包含三个元素:x, y, z,其中x是头元素,而z则是尾元素。
空列表:指不包含任何元素的列表,Redis将不存在的key也视为空列表。

Redis里的list类型,常用处理异步处理,联合使用crontab的计划任务合作执行,采用结构式ziplist的紧凑形式,入队和出队同时用左侧或者是右侧。

LPUSH / LPOP

将一个或多个值value插入到列表key的表头。如果key不存在,一个空列表会被创建并执行LPUSH操作。

之前使用Redis队列处理的脚本找不到了,这个回头在整理???

集合

SADD

将一个或多个member元素加入到集合key当中。(从左侧插入,最后插入的元素在0位置),集合中已经存在TK 则返回false,不存在添加成功 返回true

var_dump($redis->sadd('set-key','A','B','C')); //int(3)

SMEMBERS


var_dump($redis->sMembers('set-key')); //array(3) { [0]=> string(1) "C" [1]=> string(1) "A" [2]=> string(1) "B" }

SREM


$redis->srem('set-key','C'); //移除set-key中的C元素

SCARD

返回集合key的基数(集合中元素的数量)。

var_dump($redis->scard('set-key'));  //int(3)

SPOP

随机返回容器中一个元素,并移除该元素

$redis->sadd('s-key','A','B','C','D','E');
var_dump($redis->spop('s-key'));  //string(1) "E"
var_dump($redis->spop('s-key2'));  //该key不存在 ,返回bool(false)

你可能感兴趣的:(中间件)