一、redis中的事务
redis中的事务跟关系型数据库中的事务是一个相似的概念,但是有不同之处。关系型数据库事务执行失败后面的sql语句不在执行,而redis中的一条命令执行失败,其余的命令照常执行。
redis中开启一个事务是使用multi,相当于begin\start transaction,exec提交事务,discard取消队列命令(非回滚操作)。
1.1 事务的命令
- DISCARD
- 取消事务,放弃执行事务块内的所有命令。
- EXEC
- 执行所有事务块内的命令。
- MULTI
- 标记一个事务块的开始。
- UNWATCH
- 取消 WATCH 命令对所有 key 的监视。
- WATCH key [key ...]
- 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
例子
开启事务功能时(multi)
multi
command1
command2
command3
command4
4条语句作为一个组,并没有真正执行,而是被放入同一队列中。
如果,这是执行discard,会直接丢弃队列中所有的命令,而不是做回滚。
exec
当执行exec时,对列中所有操作,要么全成功要么全失败
二、redis 中的锁
- 悲观锁
- 乐观锁
举例:我正在买票
Ticket -1 , money -100
而票只有1张, 如果在我multi之后,和exec之前, 票被别人买了,即ticket变成0了.
我该如何观察这种情景,并不再提交
悲观的想法:
世界充满危险,肯定有人和我抢, 给ticket上锁, 只有我能操作. [悲观锁]
乐观的想法:
没有那么人和我抢,因此,我只需要注意,有没有人更改ticket的值就可以了 [乐观锁]
redis乐观锁实现(模拟买票)
发布一张票
set ticket 1
窗口1:
watch ticket
multi
set ticket 0 1---->0
窗口2:
multi
set ticket 0
exec
窗口1:
exec
三、服务器管理命令
对服务器的操作
命令 | 功能 |
---|---|
info | 查看配置信息 |
Clinet list | 列出连接的客户端信息 |
Client kill ip:port | 强制关闭掉某个客户端连接 |
config get * | 获取服务器配置信息 |
CONFIG SET | 动态修改配置信息 |
Dbsize | 获取当前库的总个数 |
FLUSHALL | 清空所有数据 |
select 1 | 切换数据库 ,一共0--15个库,默认在0号库 |
FLUSHDB | 清空当前库 |
MONITOR | 监控实时指令,可用于做审计日志 |
save | 将当前数据保存,持久化到磁盘 |
SHUTDOWN | 关闭服务器 |
对key的操作
命令 | 功能 |
---|---|
keys * | 查看KEY支持通配符 |
DEL | 删除给定的一个或多个key |
EXISTS | 检查key是否存在 |
TYPE | 返回键所存储值的类型 |
EXPIRE\ PEXPIRE | 以秒\毫秒设定生存时间 |
TTL\ PTTL | 以秒\毫秒为单位返回生存时间 |
PERSIST | 取消生存实现设置 |