expire  设置生存时间

Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即到期后数据销毁。

TTL查看key的剩余时间,当返回值为-2时,表示键被删除。

当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。

注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。

127.0.0.1:6379> flushall

OK

127.0.0.1:6379> set bomb tnt

OK

127.0.0.1:6379> expire bomb 10

(integer) 1

127.0.0.1:6379> ttl bomb

(integer) 5

127.0.0.1:6379> ttl bomb

(integer) 3

127.0.0.1:6379> ttl bomb

(integer) 3

127.0.0.1:6379> ttl bomb

(integer) 2

127.0.0.1:6379> ttl bomb

(integer) 1

127.0.0.1:6379> ttl bomb

(integer) -2

127.0.0.1:6379> ttl bomb

(integer) -2

127.0.0.1:6379>

persist  重新设置值

设置新的数据时需要重新设置该key的生存时间。重新设置值也会清除生存时间。

127.0.0.1:6379> set bomb tnt

OK

127.0.0.1:6379> expire bomb 60

(integer) 1

127.0.0.1:6379> ttl bomb

(integer) 49

127.0.0.1:6379> persist bomb

(integer) 1

127.0.0.1:6379> ttl bomb

(integer) -1

127.0.0.1:6379>

pexpire

设置生存时间为毫秒,可以做到更精确的控制。

127.0.0.1:6379> set bomb tnt
OK
127.0.0.1:6379> pexpire bomb 10000
(integer) 1
127.0.0.1:6379> ttl bomb
(integer) 6
127.0.0.1:6379> ttl bomb
(integer) 3
127.0.0.1:6379> ttl bomb
(integer) -2
127.0.0.1:6379>

事务管理

redis是单线程时,提交命令时,其它命令无法插入其中,轻松利用单线程实现了事务的原子性。

那如果执行多个redis命令呢?就没有办法保证事务啦,

于是redis有下列相关的redis命令来实现事务管理。

multi 开启事务

exec 提交事务

discard 取消事务

watch 监控,如果监控的值发生变化,则提交事务时会失败

unwatch 去掉监控

Redis保证一个事务中的所有命令要么都执行,要么都不执行。

如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列,事务中的所有命令都不会执行。

而 一旦客户端发送了EXEC命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为Redis中已经记录了所有要执行的命令。

exec提交事务

例如:模拟转账,王有200,张有700,张给王转100。过程如下:

127.0.0.1:6379> set w 200
OK
127.0.0.1:6379> set z 700
OK
127.0.0.1:6379> mget w z #mget:一次取多值
1) "200"
2) "700"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby z 100 #decrby 设置递减步长,默认的递减步长为1 QUEUED #注意此命令根本没有执行,而是把其放在一个队列中
127.0.0.1:6379> incrby w 100    #设置递增步长,默认的递增步长是1

QUEUED
127.0.0.1:6379> mget w z
QUEUED
127.0.0.1:6379> get w #同时,这些相关的变量也不能再读取
QUEUED
127.0.0.1:6379> get z
QUEUED
127.0.0.1:6379> exec
1) (integer) 600
2) (integer) 300
3) 1) "300"
2) "600"
4) "300"
5) "600"
127.0.0.1:6379> mget w z
1) "300"
2) "600"
127.0.0.1:6379>

如果有错误命令,自动取消

127.0.0.1:6379> mget w z
1) "300"
2) "600"
127.0.0.1:6379> multi #开启事务
OK
127.0.0.1:6379> get w
QUEUED
127.0.0.1:6379> set w 100
QUEUED
127.0.0.1:6379> abc
(error) ERR unknown command 'abc' #错误命令
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get w
"300"
127.0.0.1:6379>

discard取消事务

redis事务太简单,没有回滚,而只有取消。

discard 命令用于取消一个事务, 它清空客户端的整个事务队列, 然后将客户端从事务状态调整回非事务状态,

最后返回字符串 OK 给客户端, 说明事务已被取消

127.0.0.1:6379> mget z w
1) "600"
2) "300"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incrby z 100
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get z
"600"
127.0.0.1:6379> exec
(error) ERR EXEC without MULTI

秒杀

客户端1:
127.0.0.1:6379> clear
127.0.0.1:6379> set ticket 1
OK
127.0.0.1:6379> set money 0
OK
127.0.0.1:6379> watch ticket #乐观锁,对值进行观察,改变则事务失败
OK
127.0.0.1:6379> multi #开启事务
OK
127.0.0.1:6379> decr ticket #用于value值自减
QUEUED
127.0.0.1:6379> incrby money 100
QUEUED
客户端2:还没等客户端1提交事务,此时客户端2把票买到了。
127.0.0.1:6379> get ticket
"1"
127.0.0.1:6379> decr ticket
(integer) 0
客户端1:
127.0.0.1:6379> exec
(nil) #执行事务,失败
127.0.0.1:6379> get ticket
"0"
127.0.0.1:6379> unwatch #取消监控

Redis整理第三波(生存时间、事务管理)的更多相关文章

  1. redis的持久化 与事务管理

    1. redis的持久化 Redis的持久化主要分为两部分:RDB(Redis DataBase), AOF(Append Only File) 2. 什么是redis 的持久化        在指定 ...

  2. Redis数据库之KEY的操作与事务管理

    目的 了解并掌握各种数据类型的命令操作方式,以及各种数据类型值的操作方式.同时,主要培养对KEY的操作命令运用的能力.重点掌握对KEY信息的管理.事务常规管理和事务回滚操作. KEYS命令的练习,对K ...

  3. Spring 事务管理高级应用难点剖析--转

    第 1 部分 http://www.ibm.com/search/csass/search/?q=%E4%BA%8B%E5%8A%A1&sn=dw&lang=zh&cc=CN& ...

  4. MyBatis5:MyBatis集成Spring事务管理(上篇)

    前言 有些日子没写博客了,主要原因一个是工作,另一个就是健身,因为我们不仅需要努力工作,也需要有健康的身体嘛. 那有看LZ博客的网友朋友们放心,LZ博客还是会继续保持更新,只是最近两三个月LZ写博客相 ...

  5. spring+springmvc+mybatis+oracle+atomikos+jta实现多数据源事务管理

    ---恢复内容开始---   在做项目过程中,遇到了需要一个项目中访问两个数据库的情况,发现使用常规的spring管理事务,导致事务不能正常回滚,因此,采用了jta+atomikos的分布式数据源方式 ...

  6. Hibernate框架笔记02_主键生成策略_一级缓存_事务管理

    目录 0. 结构图 1. 持久化类的编写规则 1.1 持久化和持久化类 1.2 持久化类的编写规则 2. 主键生成策略 2.1 主键的分类 2.2 主键生成策略 3. 持久化类的三种状态[了解] 3. ...

  7. Java笔试面试题整理第三波

    转载至:http://blog.csdn.net/shakespeare001/article/details/51247785 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...

  8. springmvc+mybatis+redis的session共享+maven管理

    负载均衡搭建:http://www.cnblogs.com/guoyansi19900907/p/8717746.html redis安装:http://www.cnblogs.com/guoyans ...

  9. spring事务管理及相关知识

    最近在项目中遇到了spring事务的注解及相关知识,突然间感觉自己对于这部分知识只停留在表面的理解层次上,于是乎花些时间上网搜索了一些文章,以及对于源码的解读,整理如下: 一.既然谈到事务,那就先搞清 ...

随机推荐

  1. 在Python中正确使用Unicode

    正确处理文本,特别是正确处理Unicode.是个老生常谈的问题,有时甚至会难倒经验丰富的开发者.并不是因为这个问题很难,而是因为对软件中的文本,开发者没有正确理解一些关键概念及其表示方法.在Stack ...

  2. AngularJs 指令 directive中link,controller 的区别

    其实严格来讲,link和controller是完全不同的概念,这里讲区别有点牵强. angular指令中,带有link和controller两个函数,很多人在写指令的时候不知道是写在link里 还是c ...

  3. dmp文件恢复oracle数据库

    –创建用户 create user anhui identified by anhui -给予用户权限 grant create session to anhuigrant connect,resou ...

  4. Linux之rsync数据同步服务

    rsync是一个开源.快速的.多动能的.可以实现全量,增量的本地或远程数据同步备份工具,它适用于多种操作系统平台. 1.rsync的特性(功能) (1)支持拷贝特殊文件(如链接文件.设备文件) (2) ...

  5. db2联邦数据库

    目标机器:192.168.0.16 本地机器:192.168.0.18 .登陆本地数据库 db2 connect to dwmm user dainst using dainst ## 打开联邦数据库 ...

  6. 线段树 SP1716 GSS3 - Can you answer these queries III

    SP1716 GSS3 - Can you answer these queries III 题意翻译 n 个数,q 次操作 操作0 x y把A_xAx 修改为yy 操作1 l r询问区间[l, r] ...

  7. Liunx 发送邮件

    可以使用rpm -qa | grep mailx查看系统自带的mailx版本. 使用wget http://sourceforge.net/projects/heirloom/files/latest ...

  8. C#中web项目使用log4net日志

    我准备把log4net的实现方法放在一个类库项目中,别的项目直接引用该类库,即可进行日志的记录,操作步骤如下: 1.下载log4net.dll文件 2.在解决方案下创建类库项目 3.把log4net. ...

  9. 2015苏州大学ACM-ICPC集训队选拔赛(1) 1001 1002 1010

    签到题 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submissio ...

  10. Git for Linux and Windows

    1.在liunx中安装 1.1yum安装 [root@node1 ~]# yum install git –y [root@node1 ~]# git version git version 1.8. ...