在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Key相关操作 TYPE 类型检测,字符串返回string,列表返回 list,set表返回set/zset,hash表返回hash,key不存在返回0 <?php
echo $redis->type('not_exists_key'); //none /int(0)
$redis->set('str_key',"str_val"); //构建一个字符串
echo $redis->type('str_key'); //string / int(1)
$redis->sadd('s_key',"s_val1"); //构建一个集合
echo $redis->TYPE('s_key'); //set /int(2)
$redis->lpush('list_key',"list_val1"); //构建一个列表
echo $redis->type('list_key'); //list / int(3)
$redis->zadd('z_key',1,'z_val1'); //构建一个zset (sorted set) // int(1)
$redis->zadd('z_key',2,'z_val2');
$redis->zadd('z_key',3,'z_val3');
echo $redis->zrange('z_key',0,-1); // array(3) { [0]=> string(3) "z_val1" [1]=> string(3) "z_val2" [2]=> string(3) "z_val3" }
echo $redis->type('z_key'); //zset / int(4)
$redis->hset('website','baidu','www.baidu.com'); //一个新域
echo $redis->hget('website','baidu'); //string(8) "www.baidu.com"
echo $redis->type('website'); //hash /int(5)
DEL 移除给定的一个或多个key,如果key不存在,则忽略该命令。 <?php
//①删除单个key
$redis->set('key','val');
$redis->del('key'); //返回 TRUE(1)
var_dump($redis->get('key')); //返回 bool(false)
//②删除一个不存在的key
if(!$redis->exists('no_exists_key')) //不存在
var_dump($redis->del('no_exists_key')); //返回 int(0)
//③同时删除多个key
$array_mset=['key1'=>'val1','key2'=>'val2','key3'=>'val3'];
$redis->mset($array_mset); //用MSET一次储存多个值
$array_mget=array('key1','key2','key3');
var_dump($redis->mget($array_mget)); //一次返回多个值 //array(3) { [0]=> string(4) "val1" [1]=> string(4) "val2" [2]=> string(4) "val3" }
$redis->del($array_mget); //同时删除多个key
var_dump($redis->mget($array_mget)); //返回 array(3) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(false) }
RANDOMKEY 从当前数据库中随机返回(不删除)一个key。当数据库不为空时,返回一个key,当数据库为空时,返回nil。 <?php
//①数据库不为空
echo $redis->randomkey(); //返回随机key
//②数据库为空
var_dump($redis-> randomkey()); //bool(false)
EXPIRE 为给定key设置生存时间,当key过期时,它会被自动删除。 <?php
$redis->expire('key', 30); //设置有效期为30秒;第二参数不传递,则取消expire行为
EXPIREAT EXPIREAT的作用和EXPIRE一样,都用于为key设置生存时间。不同在于EXPIREAT命令接受的时间参数是UNIX时间戳。 <?php
$redis->set('key','val');
echo $redis->expireat('key',strtotime('2018-01-23 18:00')); //设定过期时间为2018-01-23 18:00
echo $redis->ttl('key'); //倒计时剩余秒数
TTL 返回给定key的剩余生存时间,单位秒。当 key 不存在时,返回 -2,当 key 存在但没有设置剩余生存时间时,返回 -1 。 <?php
//①设置过期时间的key
$redis->set('key','val');
$redis->expire('key',30); //设置生存时间为30秒 //return (integer) 1
echo $redis->get('key'); //return val
echo $redis->ttl('key'); //(integer) 25 ,不断输出,会不断缩减过期时间
echo $redis->ttl('key'); //30秒过去,name过期 //(integer) -2
var_dump($redis->get('key')); //过期的key将被删除 //return bool(false);
//②没有设置过期时间的key
$redis->set('key','val');
var_dump($redis->ttl('key')); //int(-1)
//③不存在的key
$redis->exists('not_exists_key');//int(0)
var_dump($redis->ttl('not_exists_key'));//int(-2)
EXISTS 检查给定key是否存在,若key存在,返回1,否则返回0。 <?php
var_dump($redis->exists('key')); //key存在 返回bool(true) ,否则false
RENAME 对key进行改名,当key和newkey相同或者key不存在时,返回一个错误;当newkey已经存在时,RENAME命令将覆盖旧值。 <?php
//①key存在且newkey不存在
$redis->set('key',"val");
var_dump($redis->rename('key','new_key')); //bool(true)
var_dump($redis->exists('key')); //key不复存在 //bool(false)
var_dump($redis->exists('new_key')); //new_key取而代之 //bool(true)
//②当key不存在时,返回错误 ,返回false;
var_dump($redis->rename('not_exists_key','new_key')); //bool(false)
//③new_key已存在时,RENAME会覆盖旧new_key
$redis->set('key',"val");
$redis->set('key2',"val2");
var_dump($redis->rename('key','key2')); //bool(true)
var_dump($redis->get('key')); //(nil) bool(false)
var_dump($redis->get('key2')); //string(6) "val"
RENAMENX 当且仅当new_key不存在时,将key改为new_key。出错的情况和RENAME一样(key不存在时报错)。修改成功时,返回1。如果newkey已经存在,返回0。 <?php
//① new_key不存在,成功
$redis->set('key',"val");
$redis->exists('new_key'); //int(0)
var_dump($redis->renamenx('key','new_key')); // bool(true)
//②new_key存在时,失败
$redis->set('key1',"val1");
$redis->set('key2',"val2");
var_dump($redis->renamenx('key1', 'key2'));// bool(false)
SORT 参数: 返回或保存给定列表、集合、有序集合key中经过排序的元素。 ①一般排序 <?php
$redis->lpush('test', 1);
$redis->lpush('test', 10);
$redis->lpush('test', 8);
print_r($redis->sort('test')); //结果:Array ( [0] => 1 [1] => 8 [2] => 10 )
②字母排序 <?php ③排序取部分数据 <?php
$redis->lpush('test', 1);
$redis->lpush('test', 10);
$redis->lpush('test', 8);
print_r($redis->sort('test')); //结果:Array ( [0] => 1 [1] => 8 [2] => 10 )
④使用外部key进行排序 假设现在有用户(user)数据如下: id name level
-------------------------------
1 admin 9999
2 huangz 10
59230 jack 3
222 hacker 9999
id数据保存在key名为user_id的列表中。 <?php
//先将要使用的数据加入到数据库中
//admin
$redis->LPUSH('user_id', 1);//(integer) 1
$redis->SET('user_name_1', 'admin');
$redis->SET('user_level_1',9999);
//huangz
$redis->LPUSH('user_id', 2);//(integer) 2
$redis->SET('user_name_2', 'huangz');
$redis->SET('user_level_2', 10);
// jack
$redis->LPUSH('user_id', 59230);//(integer) 3
$redis->SET('user_name_59230','jack');
$redis->SET('user_level_59230', 3);
//hacker
$redis->LPUSH('user_id', 222); //(integer) 4
$redis->SET('user_name_222', 'hacker');
$redis->SET('user_level_222', 9999);
如果希望按level从大到小排序user_id,可以使用以下命令 <?php 但是有时候只是返回相应的id没有什么用,你可能更希望排序后返回id对应的用户名,这样更友好一点,使用GET选项可以做到这一点 <?php 可以多次地、有序地使用GET操作来获取更多外部key。 <?php
// 先添加一些测试数据
$redis->SET('user_password_222', "hey,im in");
$redis->SET('user_password_1', "a_long_long_password");
$redis->SET('user_password_2', "nobodyknows");
$redis->SET('user_password_59230', "jack201022");
// 获取name和password
$redis_sort_option=array('BY'=>'user_level_*',
'SORT'=>'DESC',
'GET'=>array('user_name_*','user_password_*')
);
var_dump($redis->SORT('user_id',$redis_sort_option));//array(8) { [0]=> string(6) "hacker" [1]=> string(9) "hey,im in" [2]=> string(5) "admin" [3]=> string(20) "a_long_long_password" [4]=> string(6)
注意GET操作是有序的,GET user_name_* GET user_password_* 和 GET user_password_* GET user_name_*返回的结果位置不同 <?php
//获取name和password 注意GET操作是有序的
$redis_sort_option=array('BY'=>'user_level_*',
'SORT'=>'DESC',
'GET'=>array('user_password_*','user_name_*')
);
var_dump($redis->SORT('user_id',$redis_sort_option));// array(8) { [0]=> string(9) "hey,im in" [1]=> string(6) "hacker" [2]=> string(20) "a_long_long_password" [3]=> string(5) "admin" [4]=> string(11) "nobodyknows"
GET还有一个特殊的规则——"GET #",用于获取被排序对象(我们这里的例子是user_id)的当前元素。 <?php
$redis_sort_option=array('BY'=>'user_level_*',
'SORT'=>'DESC',
'GET'=>array('//','user_password_*','user_name_*')
);
var_dump($redis->SORT('user_id',$redis_sort_option));//array(12) { [0]=> string(3) "222" [1]=> string(9) "hey,im in" [2]=> string(6) "hacker" [3]=> string(1) "1" [4]=> string(20) "a_long_long_password"
只获取对象而不排序 <?php
// 确保fake_key不存在
$redis->EXISTS('fake_key');//(integer) 0
// 以fake_key作BY参数,不排序,只GET name 和 GET password
$redis_sort_option=array('BY'=>'fake_key',
'SORT'=>'DESC',
'GET'=>array('//','user_name_*','user_password_*')
);
var_dump($redis->SORT('user_id',$redis_sort_option));//array(12) { [0]=> string(3) "222" [1]=> string(6) "hacker" [2]=> string(9) "hey,im in" [3]=> string(5) "59230" [4]=> string(4) "jack" [5]=> string(10)
保存排序结果 默认情况下,SORT操作只是简单地返回排序结果,如果你希望保存排序结果,可以给STORE选项指定一个key作为参数,排序结果将以列表的形式被保存到这个key上。(若指定key已存在,则覆盖。) <?php
$redis->EXISTS('user_info_sorted_by_level'); // 确保指定key不存在 //(integer) 0
$redis_sort_option=array('BY'=>'user_level_*',
'GET'=>array('//','user_name_*','user_password_*'),
'STORE'=>'user_info_sorted_by_level'
);
var_dump($redis->SORT('user_id',$redis_sort_option)); //int(12)
var_dump($redis->LRANGE('user_info_sorted_by_level', 0 ,11)); // 查看排序结果 //array(12) { [0]=> string(5) "59230" [1]=> string(4) "jack" [2]=> string(10) "jack201022" [3]=> string(1) "2" [4]=> string(6) |
2022-08-17
2022-07-08
2022-08-30
2022-08-17
2022-11-06
请发表评论