redis笔记

194 阅读1分钟

数据类型

string
命令 set、get、mset、mget、setnx、incr、decr、incrby、decrby、getset
数据格式 sds 动态字符串
hash
命令 set、get、mset、mget、setnx、incr、decr、incrby、decrby、getset
数据格式 HashMap 字典
list
命令 set、get、mset、mget、setnx、incr、decr、incrby、decrby、getset
数据格式 链表
set
命令 sadd、sismember、smembers、scard、srem
数据格式 HashSet 集合
zset
命令 set、get、mset、mget、setnx、incr、decr、incrby、decrby、getset
数据格式 SortedSet+HashSet 跳跃列表

事务

不支持回滚
事务命令
命令 描述
multi 开启事务
exec 执行事务
watch 监控一个key
dicard 清除命令集合
事务错误处理

语法错误 事务里的语句全部不执行

> multi
> set a 3
> sets d 3 #不存在的命令
> set a 4
> exec
(error) EXECABORT Transaction discarded because of previous errors.

类型错误 事务里正确的语句都会被执行

> multi
> set a 2
> lpush a 3 4
> set a 3
1) OK
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
3) OK
# 第1和第3执行成功 第2个执行失败

分布式锁

概念
特性 描述
互斥性 在任意时刻,只有一个客户端能持有锁
同一性 加锁解锁都要是同一客户端
避免死锁 因意外没有释放锁,保证后续其他客户端也能获得锁
php实现分布式锁
http://ifeve.com/redis-lock/
composer require ronnylt/redlock-php

redis执行lua脚本

php实现
$script = '
    if redis.call("GET", KEYS[1]) == ARGV[1] then
        return redis.call("DEL", KEYS[1])
    else
        return 0
    end
';
return $instance->eval($script, [$resource, $token], 1);