php redis string
2019-07-22 本文已影响0人
周pan
设置值
// set key value
$k10 = "imei:string:set10";
$redis->set($k10, 10);// retrun true
// setex seconds value
$k11 = "imei:string:set11";
$redis->setex($k11, 10, 1000);// retrun true
// setnx 键必须不存在才能设置成功 => 用于添加
// setnx key value
$k12 = "imei:string:set12";
$redis->setnx($k12, 1000);// retrun 1
$redis->setnx($k12, 1000);// retrun 0
// expire key seconds
$redis->expire($k10, 10);// retrun 1
$redis->expire($k12, 10);// retrun 1
获取值
// 2 get
// get key
$k20 = "imei:string:20";
$redis->del($k20);
$redis->set($k20, 'v20'); // retrun true
var_dump($redis->get($k20)); // string(3) "v20"
批量设置获取值
// 3 mset mget
// mset key val [key1 val1 key2 val2]
// mget key [key1 key2 ]
$k30 = 'imei:string:30';
$k31 = 'imei:string:31';
$k32 = 'imei:string:32';
$k33 = 'imei:string:33';
$redis->del($k30);
$redis->del($k31);
$redis->del($k32);
$redis->del($k33);
$redis->mset($k30, 'v30', $k31, 'v31', $k32, 'v32', $k33, 'v33');
print_r($redis->mget($k30, $k31, $k32, $k33));// [ v30, v31 , v32 , v33 ]
单个键管理
1.重命名
// 1 rename
// rename key newkey
$k20 = "imei:string:20";
$k21 = "imei:string:21";
$k23 = "imei:string:23";
$k24 = "imei:string:24";
$redis->del($k20);
$redis->del($k21);
$redis->set($k20, 'v20');
$redis->set($k21, 'v21');
var_dump($redis->get($k20)); // string(3) "v20"
var_dump($redis->get($k21)); // string(3) "v21"
var_dump($redis->rename($k20, $k21)); // bool(true)
var_dump($redis->get($k20)); // NULL
var_dump($redis->get($k21)); // string(3) "v20"
// rename操作会删除原来的key => $k20 如果键对应的值较大,会有阻塞Redis可能性
// rename操作会覆盖newkey => $k21
echo '<hr>';
// renamenx : 防止被强行rename,确保只有newkey不存在的时候才被覆盖
$redis->set($k23, 'v23');
$redis->set($k24, 'v24');
var_dump($redis->get($k23)); // string(3) "v23"
var_dump($redis->get($k24)); // string(3) "v24"
var_dump($redis->renamenx($k23, $k24)); // string(1) "0"
var_dump($redis->get($k23)); // string(3) "v23"
var_dump($redis->get($k24)); // string(3) "v24"
2.随机返回一个键
// randomkey
var_dump($redis->randomkey()); // string(14) "imei:set:test2"
var_dump($redis->randomkey()); // string(14) "imei:string:32"
3 键过期
// expire : expire key seconds 键在seconds秒后过期
// ttl : ttl key 查询键的过期时间
// pttl : pttl key 查询键的过期时间(毫秒级)
// expireat : expireat key timestamp 键在秒级时间戳 timestamp 后过期
// pexpire :
// pexpireat :
// persist :
$k20 = "imei:string:20";
$k21 = "imei:string:21";
$k22 = "imei:string:22";
$k23 = "imei:string:23";
$k24 = "imei:string:24";
$redis->del($k20);
$redis->del($k21);
$redis->del($k22);
$redis->del($k23);
$redis->del($k24);
$redis->set($k20, 'v20');
$redis->set($k21, 'v21');
var_dump($redis->expire($k20, 100)); // string(1) "1"
var_dump($redis->ttl($k20)); // string(3) "100"
var_dump($redis->expireat($k21, time() + 100)); // string(1) "1"
var_dump($redis->ttl($k21)); // string(2) "99"
// ttl pttl 返回值说明
// 大于等于0的整数,键的过期时间
// -1,键没有设置过期时间
// -2,键不存在
echo '<hr>';
$redis->set($k22, 'v22');
$redis->set($k23, 'v23');
$redis->set($k24, 'v24');
// 注意:
// 1) expire key 的键不存在返回0
var_dump($redis->expire($k22, 100)); // string(1) "0"
// 2) 如果过期时间为负值,键会立即被删除,犹如使用del一样
$redis->expire($k23, -2);
var_dump($redis->get($k23));//null
// 3) persist 可以将键的过期时间清除
$redis->persist($k22);
var_dump($redis->ttl($k22)); // -1
// 4) 对于string类型的键,执行set会去掉过期时间
$redis->expire($k24, 100);
var_dump($redis->ttl($k24)); // 100
$redis->set($k24, 'v24 again');
var_dump($redis->ttl($k24)); // -1
// 5) redis 不支持二级数据结构(hash、list)内部元素的过期功能,例如不能给列表内的一个元素设置过期时间
// 6) setex 命令 作为 set+expire的组合,不但是原子执行,同事还减少一次网络通讯时间