Redis的事务
事务的概念
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。(其实在数据库中的操作基本都可以理解成是事务)
Redis 事务命令
MULTI 标记一个事务块的开始。
EXEC 执行所有事务块内的命令。
DISCAR 取消事务,放弃执行事务块内的所有命令。
WATCH key [key ...] 用于在进行事务操作的最后一步也就是在执行exec 之前对某个key进行监视,如果这个被监视的key被改动,那么事务就被取消,否则事务正常执行
UNWATCH 取消 WATCH 命令对所有 key 的监视
用Jedis完成Redis的事务操作
1.创建一个事务对象(代表开启事务)
Tracnsaction mulit=jedis.multi();
2.用事务对象进行对redis的操作
#举例为存储一个string对象,可以存储多个
mulit.set("key","value");
3.提交或回滚
mulit.exec() 提交
mulit.discar() 回滚
用stringRedisTemplate完成Redis事务操作
1.开启事务
stringRedisTemplate.multi()
代表从此行开始的代码直至提交或回滚前都是一次事务
2.执行命令
3.提交或回滚
stringRedisTemplate.exec();提交
此方法返回值为一个执行结果的list集合
stringRedisTemplate.discard();回滚
Redis持久化
RDB
rdb模式是redis默认开启的模式
redis的数据一开始是在内存上的,rdb持久化的方式会在经过一段时间后将数据持久化,形成dump.rdp文件
在redis.windows.conf(linux中为redis.conf)文件中的
save 可以改变rdb模式的保存时间。
save 900 1 表示如果数据库发生了一次改变,那么900秒后将会触发数据库的持久化功能
save 300 10 表示如果数据库发生了至少十次改变,那么300秒后将会触发数据库的持久化功能
dbfilename 字段表示持久化之后的文件名记住用.rdb首尾
dir ./ 字段表示持久化数据所保存的文件地址./为默认地址
stop-writes-on-bgsave-error yes 当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等
rdbcompression yes 是否启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间
AOF
是基于日志的持久化方式
1.可以关闭rdb持久化模式(将生成时间和保存路径注释掉即可)
2.开启AOF持久化模式
在redis.windows.conf(linux中为redis.conf)中
appendonly no改为appendonly yes
appendfilename aof持久化保存到本地的文件名称用.aof首尾
appendfsync aof模式的持久化机制,有三个取值
always 每一次操作持久化一次
everysec 每秒进行一次持久化
no redis 并不直接调用文件同步,而是交给操作系统来处理,操作系统可以根据 buffer 填充情况 / 通道空闲时间等择机触发同步;这是一种普通的文件操作方式。性能较好,在物理服务器故障时,数据丢失量会因 OS 配置有关
no-appendfsync-on-rewrite no 在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示“不暂缓”,“yes”表示“暂缓”,默认为“no”
aof-rewrite的含义
因为aof模式会记录每一条操作,所以redis提供了一种可以在不接触原aof文件的情况下,获得一份数据层面上完全相同的aof整合备份的文件
详细可见
AOF重写和其实现原理 转载
auto-aof-rewrite-min-size 64mb 触发重写的最小文件大小默认为64mb推荐使用512mb
auto-aof-rewrite-percentage 100 相对于“上一次”rewrite,本次rewrite在aof文件体积增长百分之多少后再一次触发
Redis的发布和订阅
简单来说就是有监听功能和广播功能的信息交互
可以参考redis发布与订阅