链接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');