面试题答案
一键面试- MULTI命令:
- 作用:用于开启一个事务,它将后续的命令放入队列中,而不是立即执行。在MULTI之后的所有命令会被缓冲,直到EXEC命令被调用才会真正执行。
- EXEC命令:
- 作用:执行所有在MULTI开启后放入队列的命令。一旦调用EXEC,Redis会原子性地执行队列中的所有命令,要么全部成功,要么全部失败(如果在事务执行期间Redis服务器崩溃等异常情况除外)。
- DISCARD命令:
- 作用:取消当前事务,清空事务队列,并且放弃执行在MULTI之后放入队列的所有命令。
示例代码(以Python的redis - py库为例):
import redis
# 连接Redis服务器
r = redis.Redis(host='localhost', port = 6379, db = 0)
# 开启事务
pipe = r.pipeline()
pipe.multi()
# 对哈希表进行连续的字段设置操作
hash_key = 'test_hash'
field1 = 'field1'
value1 = 'value1'
field2 = 'field2'
value2 = 'value2'
pipe.hset(hash_key, field1, value1)
pipe.hset(hash_key, field2, value2)
# 执行事务
try:
pipe.execute()
print("事务执行成功")
except Exception as e:
# 取消事务(这里假设异常时取消事务)
pipe.discard()
print(f"事务执行失败,原因: {e}")
示例代码(以Redis命令行为例):
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> HSET test_hash field1 value1
QUEUED
127.0.0.1:6379> HSET test_hash field2 value2
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 1
2) (integer) 1
127.0.0.1:6379> # 如果要取消事务
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> HSET test_hash field3 value3
QUEUED
127.0.0.1:6379> DISCARD
OK