multi
标识事务开始;
exec
表示事务结束并执行;
redis事务并不是立即执行,而是将执行命令入队列(同时校验命令的语法和命令是否正确),最后一起执行;
故redis事务执行失败涉及两种原因: set money 100
set lisi 200
multi
decrby money abc
decrby lisi 1
exec
命令入队列过程中,无语法错误,会正常存入执行队列中,但是事务提交时,会报错;;;;但是但是,此时正确的命令(即操作的对象和值均无误)依然会执行,仅仅将存在问题的命令(校验不通过)执行失败;
使用办法: 订阅端: Subscribe 频道名称; 发布端: publish 频道名称 发布内容;
客户端
redis 127.0.0.1:6379> subscribe news
Reading messages... (press Ctrl-C to quit)
1) "message"
2) "news"
3) "good good study"
1) "message"
2) "news"
3) "day day up"
服务端:
redis 127.0.0.1:6379> publish news 'good good study'
(integer) 1
redis 127.0.0.1:6379> publish news 'day day up'
(integer) 1
持久化: 即把数据存储于断电后不会丢失的设备中,通常是硬盘;
工作原理概述: 每隔N分钟或N次写(新增或者修改)操作后, 从内存dump数据形成rdb文件, 压缩 放在备份目录。
save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。
save 300 10 #必须是300秒之后至少10个关键字发生变化。
save 60 10000 #必须是60秒之后至少10000个关键字发生变化。
(save3个选项都注释,则rdb禁用)
stop-writes-on-bgsave-error yes #后台备份存储错误,停止往redis中写入数据。
rdbcompression yes #使用LZF压缩rdb文件。
rdbchecksum yes #存储和加载rdb文件时校验。
dbfilename dump.rdb #设置rdb文件名。
dir ./ #设置工作目录,rdb文件会写入该目录。
思考第一个问题???
aof备份是每条命令都会写入备份文件,由于是基于内存线程处理,故会降低线程的写效率,于是引出aof同步方案?何时同步一次呢??appendfsync
值设置
思考第二个问题???
基于第一个问题,设置AOF同步方案,假设设置为每秒同步一次,那么如果我们对同一个key进行100次写入操作,那AOF文件中必然会存在100条关于这条key的记录,造成AOF文件过大,故引出AOF 重写
解决上述问题。
AOF重写: aof重写是指把内存中的数据,逆化成命令,写入到.aof日志里.以解决 aof日志过大的问题.
appendonly no #是否仅要日志
appendfsync no # 系统缓冲,统一写,速度快
appendfsync always # 系统不缓冲,直接写,慢,丢失数据少
appendfsync everysec #折衷,每秒写1次
appendfilename appendonly.aof #aof文件名
no-appendfsync-on-rewrite no #重写aof时同步最新数据
auto-AOF-rewrite-percentage 100 当前aof文件是上次重写是大N%时重写
auto-AOF-rewrite-min-size 64mb aof重写至少要达到的大小