Laravel Redis 指南

JellyBool

JellyBool

在 Laravel 中使用 Redis 极其的方便,你只需要将 preids/predis 通过composer 安装到 Laravel 的项目中即可:

composer require predis/predis

这样在使用默认的设置下,如果你的 redis 服务有正常启动,那么这样你就可以直接在 Laravel 项目中使用 Redis 了。

一开始,我们假设想设置下面的数据:

Redis::set('product:1:sales', 1000)
Redis::set('product:1:count', 10)

所以,我们想获取其中某个值的时候,可以直接这样:

Redis::get('product:1:sales')

Redis 增加和减少

很简单,就是这样:

Redis::incr('product:1:count')

Redis::incrby('product:1:sales', 100)

默认情况下 incr 的增量为 1,如果增量不是 1 的话,可以通过第二个参数指定。同理,减少也是一样的:

Redis::decr('product:1:count')

Redis::decrby('product:1:sales', 100)

用法一模一样,只不过方法的名字变成 decrby 了。

但是需要注意的是,如果是对浮点(float)数进行增加或者减少,用 incrbyfloat:

Redis::incrbyfloat('product:1:sales', 15.5)

Redis::incrbyfloat('product:1:sales', - 30.2)

遗憾的是,并没有 decrbyfloat 这个方法来做减法,而是使用 incrbyfloat 的第二个参数传入负值的情况下实现减少。

查找的同时更新

$value = Redis::getset('product:1:sales', 0)

如上,我们获取到 product:1:sales 的值(应该是 1000),并且在获取之后将该值设置为 0。

指定过期时间

Redis::set('user:1:notified', 1, 'EX', 3600);

这样的情况下,user:1:notified 就会在 3600 秒之后过期。这个应用场景我觉得是针对短信验证码这样的需求最合适了。

如果你想指定哎某个时间点过期,你可以这样使用 expireat 方法:

Redis::expireat('user:1:notified', '1495469730')

注意第二个参数传入的是时间戳,未来的某个时间点。

是否存在某个 Key

想象这样一个场景,我们做了一个卖票的应用,一个人只能买一张票,如果票售出的话,我们就关闭该用户的购买渠道:

Redis::set('ticket:sold', $user->id, 'NX')

这样的情况下,ticket:sold 只会在他原本不存在的情况下去设置这个值。如果你想判断一个 Key 是否存在,可以这样:

Redis::exists('ticket:sold')

一次读取多个值

很简单啦!

Redis::mget('product:1:sales', 'product:2:sales', 'non_existing_key')

这样会遇到一个问题就是:如果 key 不存在的话, Redis 怎么处理?

答:不存在的 key 返回 null

删除 Key

直接使用 del 方法:

Redis::del('previous:sales', 'previous:return');

修改 Key 名字

Redis::rename('current:sales', 'previous:sales');

但是这个重新命名的话,又会存在一个问题就是:万一新名字已经存在了呢(例子中的 previous:sales),这个时候可以直接:

Redis::renamenx('current:sales', 'previous:sales');

也就是从 rename 方法变为 renamex 方法。

总结

在 Laravel 中使用 Redis 的时候,其实很多方法都是可以直接猜出来的,他们的命名跟 redis 的命令其实很像,比如我们这里的 incr,incrby,decr, decrby rename del 等。可以直接用!

本文由 JellyBool 创作, 转载和引用遵循 署名-非商业性使用 2.5 中国大陆 进行许可。

共有 2 条评论

q646448149
修改的评论也不能少于六个字哦!
JellyBool 回复 q646448149
修改的评论也不能少于六个字哦!
jayin
修改的评论也不能少于六个字哦!
JellyBool 回复 jayin
修改的评论也不能少于六个字哦!