Redis 高级特性(1)—— 事务 过期时间 排序

1. Redis 高级特性 —— 事务

事务概念

Redis 中的事务 (transaction)是一组命令的集合。事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执行。
事务的原理是先将属于一个事务的命令发送给 Redis,然后再让 Redis 依次执行这些命令。

事务命令

命令说明
watch key[key…]锁定key,直到执行了multi/exec命令
multi标记一个事务块开始
exec执行所有multi之后发的命令
discard丢弃所有multi之后发的命令

事务使用

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a 1
QUEUED
127.0.0.1:6379> set b 2
QUEUED
127.0.0.1:6379> set c 3
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK
127.0.0.1:6379> 

multi 标记一个事务的开始,表示之后发送的命令都属于同一个事务,而 exec 命令则告诉 Redis 将等待执行的事务队列中的所有命令(即刚才返回 QUEUED 的命令)按照发送顺序依次执行。exec 命令的返回值是事务命令的返回值组成的列表,返回值顺序和命令的顺序相同。

Redis 会保证一个事务中的命令要么都执行,要么都不执行。如果在执行 exec 命令之前客户端断线了那么 Redis 会自动清空事务队列,事务中的所有命令都不会执行;而如果客户端执行了 exec 命令后断线也没有关系,Redis 已经记录了所有要执行的命令。

错误处理

如果 Redis 事务中一个命令发生错误,那么其它的命令还会执行吗?我们主要看两种错误:

  • 语法错误

    只要事务中有一个命令的语法发生错误,那么整个事务中的命令都不会执行。

  • 运行错误

    运行错误是指在执行命令时出现的错误,这种错误在实际执行之前是无法发现的,当事务中出现这种运行错误时,其它命令仍然会继续执行的。

Redis 事务不支持关系型数据库事务提供的回滚功能。

watch 命令

watch 命令可以监控一个或者多个键,一旦其中有一个键被修改或删除,之后的事务就不会执行。监控一直持续到 exec 命令 (事务中的命令是在 exec 命令之后执行的,所以在 multi 命令之后可以修改 watch 监控的键值)

127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> watch a
OK
127.0.0.1:6379> set a 2
OK
127.0.0.1:6379> multi 
OK
127.0.0.1:6379> set a 3
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get a
"2"
127.0.0.1:6379> 

2. Redis 高级特性 —— 过期时间

Redis 使用 expire 命令设置一个键的过期时间,到时间后 Redis 会自动删除它。expire 命令的使用方法为

expire key seconds

其中 seconds 表示键的过期时间,单位为秒,expire 命令返回 1 表示设置成功,返回 0 表示键不存在或者设置失败。

127.0.0.1:6379> expire b 10
(integer) 1
127.0.0.1:6379> expire z 10
(integer) 0
127.0.0.1:6379> 

ttl 命令用于查询一个键还有多久会被删除,返回值是键的剩余时间,单位为秒;
当键不存在时返回 -2 ;当键没有过期时间即永久存在,那么返回值为 -1

127.0.0.1:6379> keys *
1) "num"
2) "set"
3) "student"
4) "a"
5) "d"
6) "list"
7) "c"
8) "set_a"
9) "set_b"
127.0.0.1:6379> expire num 10
(integer) 1
127.0.0.1:6379> ttl num
(integer) 6
127.0.0.1:6379> ttl num
(integer) 4
127.0.0.1:6379> ttl num
(integer) 2
127.0.0.1:6379> ttl num
(integer) -2
127.0.0.1:6379> keys *
1) "set"
2) "student"
3) "a"
4) "d"
5) "list"
6) "c"
7) "set_a"
8) "set_b"
127.0.0.1:6379>

persist 命令用于设置取消键的过期时间,如果过期时间被成功清除则返回 1;否则返回 0

127.0.0.1:6379> expire d 20
(integer) 1
127.0.0.1:6379> ttl d
(integer) 17
127.0.0.1:6379> persist d
(integer) 1
127.0.0.1:6379> ttl d
(integer) -1
127.0.0.1:6379> 

除过使用 persist 命令外,使用 set 命令为键赋值也会清除键的过期时间。

3. Redis 高级特性 —— 排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值