Redis入门系列之事务

    事务是指一段数据库指令要么全部完成,要么全部不执行。保持一段指令的完整性。几乎所有关系型数据库都支持事务,而nosql 很少有支持事务的,就算支持效果也很差。Redis只能算是部分支持。因为Redis不能自动rollback。

一.Redis中执行事务

    1.1在Redis中事务开启指令是multi,提交事务指令是exec

localhost:6379> multi 
OK
localhost:6379> set name a 
QUEUED
localhost:6379> set name b
QUEUED
localhost:6379> set name d
QUEUED
localhost:6379> exec
1) OK
2) OK
3) OK


   1.2当事务执行过程中出现异常的时候,Redis会继续执行下面的指令

localhost:6379> multi
OK
localhost:6379> set name b
QUEUED
localhost:6379> set name c
QUEUED
localhost:6379> set name d
QUEUED
localhost:6379> incr name 
QUEUED
localhost:6379> set name e
QUEUED
localhost:6379> exec
1) OK
2) OK
3) OK
4) (error) ERR value is not an integer or out of range
5) OK
localhost:6379> get name 
"e"

        上面的一段事务命令可以看出来,第四条指令执行失败,但是Redis还是会执行第五条指令。所以不支持回滚的事务很危险的,很显然Redis不能用于对数据正确性一致性要求高的地方,如金融,财务。

二.Redis中watch命令

    如果一段事务在操作的过程中,不允许一个key被其他事务操作。因为会出现脏数据。

        watch的作用就是监视一个key,如果其发生改变,那么后面的multi    exec里面的就会执行失败。

localhost:6379> watch name 
OK
localhost:6379> set name a
OK
localhost:6379> multi
OK
localhost:6379> set name a
QUEUED
localhost:6379> exec
(nil)

    可以看到在watch了name之后,事务中只要有操作name的命令,整个事务都不会执行。watch只能在同一个客户端中有效。

    unwatch可以取消监控。

三.设置key的超时时间

    

localhost:6379> set name Tom
OK
localhost:6379> expire name 900
(integer) 1
localhost:6379> ttl name
(integer) 897

      expire name  900  设置key的超时时间单位为秒。

      ttl   name          查看key还剩多少存在时间

       需要注意的是key经过修改之后,超时时间需要重新设置。

localhost:6379> expire name 900
(integer) 1
localhost:6379> ttl name
(integer) 897
localhost:6379> ttl name
(integer) 787
localhost:6379> persist name
(integer) 1
localhost:6379> ttl name 
(integer) -1

        

你可能感兴趣的:(java,redis,memcached,key-value)