php操作redis(string)

链接redis

$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('123456');

string 类型常用场景

计数器

string类型的incr和decr命令的作用是将key中储存的数字值加一/减一,这两个操作具有原子性
常用于 点赞数量,关注数量,评论数,收藏数 …

$redis->incr('test'); //自增,没有键 会自动创建
$redis->decr('test');//自减

分布式锁

string类型的setnx的作用是“当key不存在时,设值并返回1,当key已经存在时,不设值并返回0”,“判断key是否存在”和“设值”两个操作是原子性地执行的,因此可以用string类型作为分布式锁,返回1表示获得锁,返回0表示没有获得锁。例如,为了保证定时任务的高可用,往往会同时部署多个具备相同定时任务的服务,但是业务上只希望其中的某一台服务执行定时任务,当定时任务的时间点触发时,多个服务同时竞争一个分布式锁,获取到锁的执行定时任务,没获取到的放弃执行定时任务。定时任务执行完时通过del命令删除key即释放锁,如果担心del命令操作失败而导致锁一直未释放,可以通过expire命令给锁设置一个合理的自动过期时间,确保即使del命令失败,锁也能被释放。不过expire命令同样存在失败的可能性

#简单的设置一个分布式锁
$key = 'key';
$value = time() + 5;
$is_lock = $redis->setnx($key, $value);
if (!$is_lock) {
    #如果赋值失败,表示还在锁定中
    $lock_time = $redis->get($key);
    if ($lock_time < time()) {
        #如果当前的锁过期了,那么就重新加锁
        $redis->del($key);
        $is_lock = $redis->setnx($key, time() + 5);
    }
}

if ($is_lock) {
    echo "访问成功";
} else {
    echo "锁定中";
}

存储对象

#利用JSON强大的兼容性、可读性和易用性,将对象转换为JSON字符串,再存储在string类型中,是个不错的选择,如用户信息、商品信息等。

$data = [
    'age' => '25',
    'name' => 'zhangsan'
];

$redis->set('array', json_encode($data));
echo $redis->get('array');

php对String的操作

#创建
    #设置单个key  第三个参数表示过期时间
    $redis->set("key", "value", 5);
    #一次性设置多个key
    $redis->mset(['name' => '小明', 'age' => '13', 'sex' => '男']);
#获取
    #一次性获取多个key,返回索引数组
    var_dump($redis->mget(['name', 'age', 'sex']));
    #获取指定key值的索引开始位置和结束位置所对应的值,索引从0开始
    echo  $redis->getrange('key', 1, 3);
#追加
    #key已经存在,且值为字符串,会把 value 追加到原来值(value)的结尾。 如果 key 不存在,创建
    $redis->append('key', 'value');
    #数字类型的key自减操作,key类型不是数字则报错 ,返回结果
    $redis->decr('number');
    #数字类型的key自加操作,与DECR相反
    $redis->incr('number');
    #数字类型key指定减少数值
    $redis->decrby('number', 10);//每次减10
    #数字类型key指定增加数值,与DECRBY相反
    $redis->incrby('number', 10);
    #获取key值的长度
    $redis->strlen('key');
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

想秃头的小邹

您的鼓励将是支持我的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值