在使用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();
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包含三个元素: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)