Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
批量操作在发送 EXEC 命令前被放入队列缓存。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。一个事务从开始到执行会经历以下三个阶段:
开始事务。命令入队。执行事务。单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。 事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
127.0.0.1:6379> multi #开启事物 OK 127.0.0.1:6379> set age 18 #命令入队 QUEUED 127.0.0.1:6379> set name jack QUEUED 127.0.0.1:6379> exec #执行事务 1) OK 2) OK 127.0.0.1:6379> 一:事物 MULTI 标记一个事务块的开始。 EXEC 执行所有事务块内的命令。 DISCARD 取消事务,放弃执行事务块内的所有命令。 127.0.0.1:6379> watch name #对name开启监听 OK 127.0.0.1:6379> multi OK 127.0.0.1:6379> set name ztind QUEUED 127.0.0.1:6379> exec (nil) ---->事物执行前有对name继续重新设值,本事物将被打断 故结果为nil 127.0.0.1:6379> 二:乐观锁 WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 UNWATCH 取消 WATCH 命令对所有 key 的监视。Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
#订阅消息 SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息。 UNSUBSCRIBE [channel [channel ...]] 指退订给定的频道。 #订阅匹配类的消息 PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道。 PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道。 #为上述两类学习发送消息 PUBLISH channel message 将信息发送到指定的频道。 #Pubsub 命令用于查看订阅与发布系统状态,它由数个不同格式的子命令组成。 PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。 eg:pubsub channelsredis在指定的时间间隔内将内存中的数据快照写入磁盘,保存为dump.rdb文件.
redis为内存储存,断电即失,为了保存数据redis使用dump.rdb来实现数据保存,下次启动redis服务器自动读取。
save策略:
save 900 1 表示在900s内至少有1个key修改即保持save 300 10 表示在300s内至少有10个key修改即保持save 60 10000 表示在60s内至少有10000个key修改即保持dump.rdb文件的生成情况如下:
save ,主动执行save命令时生成flushall , 清空所以数据库数据时生成shutdown,关闭redis服务器时生成以日志的方式来记录每个写操作命令,将redis执行过程中的所有写命令记录下来(读操作不记录)保存到appendonly.aof文件中。只追加文件不改写文件。redis服务重启后读取本文件并执行里面的命令来实现数据恢复功能。 默认不开启,可到配置文件redis.conf修改开启 appendonly yes
保存策略:
appendfsync always #总是同步修改追加保存appendfsync everysec #每秒修改追加保存(默认)appendfsync no #不同步,交由系统来保存,最快