redis 实际测试,第一部分

redis 实际测试(由于功能太多,我就挑几个重要的吧)

这个哥哥的博客非常好https://www.cnblogs.com/chrdai/p/6825684.html
官网地址http://redisdoc.com/index.html

key操作

del操作
# 情况1: 删除单个key
$redis->set('myname','ikodota');
echo $redis->get('myname').'<br>'; # 返回:ikodota

$redis->del('myname');# 返回 TRUE(1)
var_dump($redis->get('myname')); # 返回 bool(false)

情况2: 删除一个不存在的key

if(!$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); #同时删除多个key
var_dump($redis->mget($array_mget)); #返回 array(3) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(false) }
keys 读取内容
警告 :KEYS的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的key,你最好还是用集合(Set)。

$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 )
randomkey 随机读取
# 情况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();  # 删除当前数据库所有key
var_dump($redis-> randomkey()); //bool(false)
ttl 过期时间

情况1:带TTL的key

$redis->flushdb();
$redis->set('name','ikodota'); # 设置一个key
$redis->expire('name',30);  # 设置生存时间为30秒 //return (integer) 1
echo $redis->get('name'); //return ikodota
echo $redis->ttl('name'); //(integer) 25

echo $redis->ttl('name');  # 30秒过去,name过期 //(integer) -1
var_dump($redis->get('name')); # 过期的key将被删除 //return bool(false);

情况2:不带TTL的key

$redis->set('site','wikipedia.org');//OK
var_dump($redis->ttl('site'));//int(-1)

情况3:不存在的key

$redis->EXISTS('not_exists_key');//int(0)
var_dump($redis->TTL('not_exists_key'));//int(-1)
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)

字符串操作

添加设置过期时间
$redis->setex('key', 3600, 'value')
SET 添加覆盖
# 情况1:对字符串类型的key进行SET
$redis->SET('apple', 'www.apple.com');#OK  //bool(true)
$redis->GET('apple');//"www.apple.com"

# 情况2:对非字符串类型的key进行SET
$redis->LPUSH('greet_list', "hello");  # 建立一个列表 #(integer) 1 //int(1)
$redis->TYPE('greet_list');#list //int(3)

$redis->SET('greet_list', "yooooooooooooooooo");   # 覆盖列表类型 #OK //bool(true)
$redis->TYPE('greet_list');#string //int(1)
setnx 当key不存在时候添加
$redis->EXISTS('job');  # job不存在 //bool(false);
$redis->SETNX('job', "programmer");  # job设置成功 //bool(true)
$redis->SETNX('job', "code-farmer");  # job设置失败 //bool(false)
echo $redis->GET('job');  # 没有被覆盖 //"programmer"
mset 一次性设置多个值
$redis->flushdb();
$array_mset=array('date'=>'2012.3.5','time'=>'9.09a.m.','weather'=>'sunny' );
$redis->MSET($array_mset); //bool(true)
var_dump($redis->KEYS('*'));   # 确保指定的三个key-value对被插入 //array(3) { [0]=> string(4) "time" [1]=> string(7) "weather" [2]=> string(4) "date" }
# MSET覆盖旧值的例子 但是经过测试覆盖不了
var_dump($redis->set('google', "google.cn"));   //bool(true)
var_dump($redis->mset(array('google',"google.hk"))); //bool(true)
echo $redis->get('google'); //google.cn  与redis手册的示例结果不符
msetnx 当key不存在时候添加,原子性,不成功就全部不成功
# 情况1:对不存在的key进行MSETNX
$array_mset=array('rmdbs'=>'MySQL','nosql'=>'MongoDB','key-value-store'=>'redis' );
$redis->MSETNX($array_mset);//bool(true)

# 情况2:对已存在的key进行MSETNX
$array_mset=array('rmdbs'=>'Sqlite','language'=>'python');
var_dump($redis->MSETNX($array_mset));  # rmdbs键已经存在,操作失败 //bool(false)
var_dump($redis->EXISTS('language'));  # 因为操作是原子性的,language没有被设置  bool(false)

echo $redis->GET('rmdbs');  # rmdbs没有被修改 //"MySQL"

$array_mset_keys=array( 'rmdbs', 'nosql', 'key-value-store');
print_r($redis->MGET($array_mset_keys)); //Array ( [0] => MySQL [1] => MongoDB [2] => redis )
get 获取值
var_dump($redis->GET('fake_key')); #(nil) //return bool(false)
$redis->SET('animate', "anohana"); //return bool(true)
var_dump($redis->GET('animate')); //return string(7) "anohana"
mget 一次获取多个值,不存在的值,返回false
$redis_mget_data_array=array('name'=>'ikodota','blog'=>'cnblogs.com/ikodota');
$redis->MSET($redis_mget_data_array);#用MSET一次储存多个值 

$redis_mget_key_array=array('name','blog');
var_dump($redis->MGET($redis_mget_key_array)); //array(2) { [0]=> string(7) "ikodota" [1]=> string(19) "cnblogs.com/ikodota" }

$redis->EXISTS('fake_key'); //bool(false)

$redis_mget_key_array=array('name','fake_key');
var_dump($redis->MGET($redis_mget_key_array));  # 当MGET中有不存在key的情况   //array(2) { [0]=> string(7) "ikodota" [1]=> bool(false) }
strlen 返回字符串长度
$redis->SET('mykey', "Hello world");
echo $redis->STRLEN('mykey'); //int(11)
echo $redis->STRLEN('nonexisting'); # 不存在的key长度视为0  //int(0)
incr 自增 incrby 自增多个
$redis->SET('page_view', 20);
var_dump($redis->INCR('page_view')); //int(21) 
var_dump($redis->GET('page_view'));    # 数字值在Redis中以字符串的形式保存 //string(2) "21

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

# 情况2:key不存在
$redis->EXISTS('counter'); //bool(false)
$redis->INCRBY('counter'); #int 30  //bool(false)
var_dump($redis->GET('counter')); #30 //经测试 与手册上结果不一样,不能直接从bool型转为int型。 return bool(false) 

# 情况3:key不是数字值
$redis->SET('book', "long long ago...");
var_dump($redis->INCRBY('book', 200)); #(error) ERR value is not an integer or out of range   // bool(false)
decr 自减 decrby 自减多个

和上面的一样

哈希表(Hash) 储存多个值,

hset 一次只能存一个
var_dump($redis->hSet('google', "google.cn18881",'77711'));
重复执行两次就 提示失效了
hsetnx 当不存在时候就执行,key 和 hash 同时不存在才不执行
// This first case: hash 值不存在 ,key 也不存在 , 设置成功
$redis -> hSetNx('myhash','favorite_fruit','cherry');
var_dump($redis -> hGet('myhash','favorite_fruit'));    // string 'cherry'

// This second case: hash 值不存在, key 存在 ,设置成功
if(! $redis -> exists('test_hash')) {
    var_dump($redis->hSetNx('test_hash', 'favorite_fruit', 'apple'));  // boolean true
    var_dump($redis->hGet('test_hash', 'favorite_fruit'));    // string 'apple'
}

// This third case: hash 值存在, key 不存在 ,设置成功
if($redis -> exists('myhash'))
{
    var_dump($redis -> hSetNx('myhash','job','programmer'));  // boolean true
    var_dump($redis -> hGet('myhash','job'));    // string 'programmer'
}

// This fourth case: hash 值存在, key 也存在 ,设置不成功
if($redis -> exists('myhash'))
{
    var_dump($redis -> hSetNx('myhash','favorite_fruit','pineapple'));  // boolean false
    var_dump($redis -> hGet('myhash','favorite_fruit'));    // string 'cherry'
}
//总之:只要 hash 不存在就可以设置成功,只有 hash 和 key 同时存在才会设置失败。
hmset 一次多存几个,如果有重复的就替换了
$array_hmset = array('pats' => 'dog','fruit' => 'cherry','job' => 'programmer');
$redis -> hMset('myhash',$array_hmset);
$array_hmget = array('pats','fruit','job');
var_dump($redis -> hMget('myhash',$array_hmget));
hget 获取值
// This first case: hash 表存在 , key 也存在,获取数据成功
$redis -> hSet('myhash','job','programmer');
var_dump($redis -> hGet('myhash','job'));       // programmer

// This second case: hash表存在, key 不存在
var_dump($redis -> hGet('myhash','pats'));      // boolean false

// This third case: hash 表不存在
var_dump($redis -> hGet('hash_not_exists','job'));      // boolean false

// 总之 :只有 hash 表和 key 同时存在的时候才可以返回数据

下面我就简写了,太多了

hmset 获取多个值
$array_hmset = array('pats' => 'dog','fruit' => 'cherry','job' => 'programmer');
$redis -> hMset('myhash',$array_hmset);
$array_hmget = array('pats','job');
var_dump($redis -> hMGet('myhash',$array_hmget));
hgetall 查看某个所有哈希值
$array_hmset = array('pats' => 'dog','fruit' => 'cherry','job' => 'programmer');
$redis -> hMset('myhash',$array_hmset);
var_dump($redis -> hGetAll('myhash'));
hdel 删除一个或多个哈希值,返回删除的数量
$redis -> hSet('myhash','job','programmer');
var_dump($redis -> hdel('myhash','job'));            // int 1 成功删除
var_dump($redis -> hdel('myhash','not_exists'));     // int 0 删除一个不存
hLen 哈希字段的数量
$array_hmset = array('pats' => 'dog','fruit' => 'cherry','job' => 'programmer');
$redis -> hMset('myhash',$array_hmset);
var_dump($redis -> hLen('myhash'));            // int 3
var_dump($redis -> hLen('hash_not_exists'));   // int 0 , 不存在的 hash 表返回 0
hExist 查询字段是否存在
$array_hmset = array('pats' => 'dog','fruit' => 'cherry','job' => 'programmer');
$redis -> hMset('myhash',$array_hmset);
var_dump($redis -> hExists('myhash','fruit'));      // true
var_dump($redis -> hExists('myhash','fake_key'));   // false , key 不存在
hincrby 字段自增可以是负值
$array_hmset = array('number' => 10,'fruit' => 'cherry');
$redis -> hMset('myhash',$array_hmset);
var_dump($redis -> hIncrBy('myhash','number',5));           // int 15,   正数相当于增
var_dump($redis -> hIncrBy('myhash','number',-5));          // int 5,    负数相当于减
var_dump($redis -> hIncrBy('myhash','number_not_exist',2)); // int 2,    不存在的 key 初始化为 0
var_dump($redis -> hIncrBy('myhash','fruit',5));            // boolean false , 字符串会出现错误
hkeys 获取哈希所有的key
$array_hmset = array('number' => 10,'fruit' => 'cherry','pats' => 'dog');
$redis -> hMset('myhash',$array_hmset);
var_dump($redis -> hKeys('myhash'));
var_dump($redis -> hKeys('hash_not_exists')); //array (size=0) empty
hvals 获取哈希所有的 值
$array_hmset = array('number' => 10,'fruit' => 'cherry','pats' => 'dog');
$redis -> hMset('myhash',$array_hmset);
var_dump($redis -> hVals('myhash'));
var_dump($redis -> hVals('hash_not_exists'));   //array (size=0) empty
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两个人的幸福online

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值