php redis 扩展类常用操作(1)

php redis 扩展类常用操作

一、连接 redis 服务


try {
    $redis = new Redis();
    $redis->connect('127.0.0.1', 6379);
    $redis->auth('mumayi105'); // redis 服务如何加锁时需要传递
    // 查看服务是否运行; 成功时返回1, 失败时连接报错“由于目标计算机积极拒绝,无法连接。”
    echo "Server is running: " . $redis->ping(); // ping 方法用于检测 redis 服务是否启动
}catch (Exception $e){
    echo $e->getMessage();
}

二、Redis 键相关操作

1. 删除指定key
$redis->set('key1', 'value1');
$redis->set('key2', 'value2');
//成功时返回键个数,失败时返回0
$res = $redis->del('key1', 'key2');

2. 序列化给定key,并返回序列化的值
$redis->set('foo', 'bar');
// 以特定于 Redis的格式序列化 key中的值并将其返回
$val = $redis->dump('foo');
// 将dump序列化的值反序列化,存储在key中; 成功时返回 true,失败时返回false
$redis->restore('key', 0, $val);

注: restore 方法重复向同一键名存储反序列化的值时会报错

Fatal error:  Uncaught RedisException: BUSYKEY Target key name already exists. in D:\phpstudy_pro\WWW\ak9896_github\demo\demo_example\redis\test.php:37
Stack trace:
#0 D:\phpstudy_pro\WWW\ak9896_github\demo\demo_example\redis\test.php(37): Redis->restore('key', 0, '\x00\x04bar1\t\x00F[\xF0\x13d\x97\xFA...')
#1 {main}
  thrown in ... on line n
  
3. 检查给定key 是否存在
$redis->exists('foo'); // 成功时返回1,失败时返回0

4. 设置 key 过期时间
 // 设置 foo 过期时间为10s 
$redis->expire('foo', 10);

// 同样是为key设置过期时间,不同在于 expireAt 方法接收的参数是 UNIX 时间戳
$redis->expireAt('key', 1638201600); 

// 设置 key 的过期时间以毫秒计
$redis->pExpire('key', 10000);

5. 查找所有符合给定模式的 key
$redis->set('runoob1', 'redis');
$redis->set('runoob2', 'mysql');
$redis->set('runoob3', 'mongodb');

$keys = $redis->keys('runoob*');  // 返回数组 ["runoob1", "runoob2", "runoob3"]

6. 将当前数据库的 key 移动到给定的数据库 db 当中
// 选择当前存储库为 db0
$redis->select(0);
$redis->set('key', 'value');
// 将 key 移动到 db1
$redis->move('key',1);
echo "在存储库 db0 中 key是否存在: " . $redis->exists('key');
// 切换到存储库 db1
$redis->select(1);
echo "\r\n";
echo "检查 db1 中 key是否存在:" . $redis->exists('key');
7. 移除 key 过期时间, key 将持久保持
$redis->setex('key', 10000, 'value');
$redis->persist('key'); // 成功返回true, 失败返回 false
8. 返回 key 的过期时间
$redis->setex('key', 180, 'value');
echo "过期时间:" . $redis->pttl('key'); //   以毫秒为单位返回 key 的剩余的过期时间。
echo "
剩余过期时间:" . $redis->ttl('key'); // 以秒为单位,返回给定 key 的剩余生存时间
9. 从当前数据库中随机返回一个key
echo $redis->randomKey();  // 成功时返回 key 键名,失败时返回 false

10. 修改 key 的名称
redis->set('key', 'value');
$redis->rename('key','newkey');  // 成功时返回 true

$redis->renameNx('newkey', 'bar'); // 仅当 bar键名不存在时,将 newkey 改名为 newkey 

11. 返回 key 所储存值的类型
echo $redis->type('bar'); 
// 返回值为int类型,代表类型如下
// 1 - string
// 2 - set
// 3 - list
// 4 - zset
// 5 - hash
// 0 - 其他类型
12. 迭代
  • scan - 用于迭代数据库中的键名;
for($i=0; $i<100; $i++){
    $redis->set('key' . $i, 'value'. $i);
}
$iterator = null;
while (false !== ($keys = $redis->scan($iterator, 'key*'))){
    foreach($keys as $key){
        echo $key . PHP_EOL;
    }
}
  • sscan - 用于迭代集合键中的元素

    $redis->sAdd('set', 'A');
    $redis->sAdd('set', 'B');
    $redis->sAdd('set', 'C');
    $redis->sAdd('set', 'D');
    $iterator = null;
    while ($members = $redis->sScan('set', $iterator)){
        foreach ($members as $member){
            echo $member . PHP_EOL;
        }
    }
    // 输出
    /*
    D
    B
    C
    A
    */
    
  • hscan - 用于迭代哈希键中的键值对

    $arr = [
        'google' => 'goole.com',
        'runoob' => 'runoob.com',
        'weibo'  => 'weibo.com',
        4 => 'taobao.com'
    ];
    $res = $redis->hMSet('sites', $arr);
    
    $iterator = null;
    while ($elements = $redis->hScan('sites', $iterator)){
        foreach($elements as $key=>$value){
            echo $key . '=>' . $value . PHP_EOL;
        }
    }
    // 输出 
    /*
    google=>goole.com
    runoob=>runoob.com
    weibo=>weibo.com
    4=>taobao.com
    */
    
  • zscan - 用于迭代有序集合中的元素
$redis->zAdd('site', 1,'google', 2,'runoob',3,'taobao', 4,'weibo');
$iterator = null;
while ($members = $redis->zScan('site', $iterator)){
    foreach ($members as $member=>$score){
        echo $member . '=>' . $score . PHP_EOL;
    }
}
// 输出 
/*
google=>1
runoob=>2
taobao=>3
weibo=>4
*/

你可能感兴趣的:(php redis 扩展类常用操作(1))