Redis事务的三个特性
- 单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
- 没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,也就不存在”事务内的查询要看到事务里的更新,在事务外查询不能看到”这个让人万分头痛的问题
- 不保证原子性:redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚
关系型数据库事务处理ACID
原子性
整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性
在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性
两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
持久性
在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新 以及修改的资料一次操作完毕,但实际上并不可行。
常用的一些 Redis 命令
-
设置指定key的值 SET key value
-
获取指定key的值 GET key
-
返回 key 中字符串值的子字符 GETRANGE key start end
-
将给定 key 的值设为 value ,并返回 key 的旧值(old value) GETSET key value
-
对 key 所储存的字符串值,获取指定偏移量上的位(bit) GETBIT key offset
-
获取所有(一个或多个)给定 key 的值 MGET key1 [key2…]
-
对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit) SETBIT key offset value
-
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位) SETEX key seconds value
-
只有在 key 不存在时设置 key 的值 SETNX key value
-
用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始 SETRANGE key offset
value -
返回 key 所储存的字符串值的长度 STRLEN key
-
同时设置一个或多个 key-value 对 MSET key value [key value …]
-
同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在 MSETNX key value [key value …]
-
这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位 PSETEX key milliseconds value
-
将 key 中储存的数字值增一 INCR key
-
将 key 所储存的值加上给定的增量值 INCRBY key increment
-
NCRBYFLOAT key increment
将 key 所储存的值加上给定的浮点增量值 INCRBYFLOAT key increment -
将 key 中储存的数字值减一 DECR key
-
key 所储存的值减去给定的减量值 DECRBY key decrement
-
APPEND 命令将 value 追加到 key 原来的值的末尾 APPEND key value