Redis 事务相关操作

Redis 作为一个非关系型内存数据库,也有事务定义

1. 事务的定义-ACID特性

A表示原子性:即事务是一个不可分割的实体,事务中的操作要么都完成,要么都不完成

C表示一致性:即事务前后数据完整性必须一致,假设数据库有很多完整性约束,比如id字段不能为空,则事务执行后,这些完整性约束不能被违反

I表示隔离性:即一个事务内部对其他事务操作是隔离的,并发执行的各事务间不能相互干扰

D表示持久性:即事务一旦提交完成,该事务对数据库的操作是永久性的,并不能在进行回滚了,哪怕数据库出现故障该修改操作也将一直保持

2. Redis 事务的相关命令

  multi命令 开启事务

# 开启事务
multi
# OK

  若干操作组成一个事务

set name zhangsan
# QUEUED
set age 22
# QUEUED
get name
# QUEUED
get age
# QUEUED

  exec命令 提交事务 

# 提交事务
exec

# OK
# OK
# zhangsan
# 22

  discard命令 撤销事务并丢弃事务队列中的 redis 操作

->discard

  watch命令 监视指定的键值对 从而让事务有条件的执行

# watch命令监视一个或多个key
# 若在exec提交事务之前,name被其他事务修改,则不执行该事务,否则执行
watch name

multi 

get name

exec

3. Redis 持久化

将redis内存中的数据保存到磁盘上称之为 redis 持久化

1)AOF:Append Only File---保持事务持久性

  在redis修改相关的命令执行后,将命令添加到aof_buf缓冲区,然后定时写入到硬盘的AOF文件中

# 修改配置文件
vi /etc/redis.conf

appendonly yes  # 默认是no 不开启
appendfilename "appendonly.aof"
appendfsync everysec

# appendfsync 参数值
# always: 每条修改命令都更新到磁盘上的aof文件
# everysec: 每秒更新数据到磁盘上的aof文件
# no: 不自动更新,由操作系统决定何时更新

Redis 事务相关操作_第1张图片

   修改完配置文件,重启 redis 服务

sudo systemctl restart redis

2)RDB:Redis DataBase---不能确保事务持久性

       RDB 持久化指的是在满足一定的触发条件时(在一个的时间间隔内执行修改命令达到一定的数量,或者手动执行 SAVE 和 BGSAVE 命令),对这个时间点的数据库所有键值对信息生成一个压缩文件 dump.rdb存入硬盘,然后将旧的删除,进行替换

  默认触发条件

# 900秒内有一个以上的键被修改,就会生成快照文件
save 900 1
# 300秒内有十个及以上的键被修改,就会生成快照文件
save 300 10
# 60秒内有10000个及以上的键被修改,就会生成快照文件
save 60 10000

  默认快照文件名

dbfilename dump.rdb

  默认快照文件硬盘路径

dir /var/lib/redis

你可能感兴趣的:(redis,redis,数据库,java)