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 高级特性 —— 排序

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

  1. RabbitMQ学习笔记:高级特性TTL(过期时间)

    TTL,Time To Live的简称,即消息过期时间,可以对消息和队列设置TTL. 目前有两种方式可以设置消息的TTL.第一种是通过队列的属性设置,队列中的所有消息都有相同的过期时间.第二种方法是对 ...

  2. redis高级特性学习(慢查询、Pipeline、事务、Lua)(上)

    Redis高级特性和应用(慢查询.Pipeline.事务.Lua) Redis的慢查询 许多存储系统(例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作.所谓慢查询日志就是系统在命 ...

  3. Redis高级特性及应用场景

    Redis高级特性及应用场景 redis中键的生存时间(expire) redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它. 过期时间可以设置为秒或者毫秒精度. ...

  4. redis查看key的过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

    点击上方小伟后端笔记关注公众号 每天阅读Java干货文章 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过 ...

  5. redis list设置过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

    点击上方小伟后端笔记关注公众号 每天阅读Java干货文章 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过 ...

  6. Redis 高级特性(2)—— 发布 订阅模式

    Redis 高级特性 -- 发布订阅 1. 发布-订阅介绍 "发布-订阅"模式包含两种角色,分别为发布者和订阅者.订阅者可以订阅一个或者若干个频道(channel),而发布者可以向 ...

  7. redis 经纬度_【SpringBoot DB 系列】Redis 高级特性之 GEO

    [SpringBoot DB 系列]Redis 高级特性之 GEO GEO 用于存储地理信息,最直观的就是我们日常使用的地图 app 中,如果我想查询我所在地的周边餐饮,就可以利用 geo 中的以(x ...

  8. 5、Redis高级特性(慢查询、Pipeline、事务、Lua)

    一.慢查询 慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis 也提供了类似的功能. Redis ...

  9. 搞定Redis高级特性与性能调优

    阅读文本大概需要15分钟. 本文适合使用 Redis 的普通开发人员,以及对 Redis 进行选型.架构设计和性能调优的架构设计人员: Redis 的数据结构和相关常用命令 数据持久化 内存管理与数据 ...

最新文章

  1. 用 Python 详解《英雄联盟》游戏取胜的重要因素!
  2. 机器学习、深度学习、自然语言处理、计算机视觉顶级期刊的论文资料分享(附顶会论文下载链接)...
  3. Ubuntu 16.04 安装 CUDA、CUDNN 和 GPU 版本的 TensorFlow 一般步骤总结
  4. 如何高效的通过BP算法来训练CNN
  5. spring系统学习:20180611: Spring中AOP通知的类型
  6. 混淆工具Dotfuscator基本使用
  7. MySQL-安全对调两个表名
  8. TurboDrive技术
  9. Linux-mysql备份
  10. 自学JAVA-2:数据类型与运算符
  11. R工程化—Rest API 之plumber包
  12. 捷联惯导系统学习6.13(状态估计的误差分配与可观测度分析 )
  13. 开源掌机芯片方案对比
  14. linux 网桥防火墙,linux透明防火墙(网桥形式).doc
  15. 短视频源码APP开发——短视频的功能
  16. XenServer部署系列——网络配置
  17. Google Play开发者账号注册过程中的安全问题
  18. IE8下实现视频播放
  19. python 正则提取 中文,汉字
  20. Django短信和邮箱注册、支付宝沙箱的使用

热门文章

  1. IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...
  2. 2022-2028年中国乙烷行业投资分析及前景预测报告
  3. 【牛腩新闻发布系统】整和后台05
  4. Visual Studio 中文显示乱码问题
  5. 用OpenCV进行摄像机标定
  6. 适用于AMD ROC GPU的Numba概述
  7. 行人检测与重识别!SOTA算法
  8. Mybatis获取参数值的方式
  9. pyEcharts安装及详细使用指南
  10. oracle查看数据库字符编码,oracle 查看、批改字符集编码