注:上一篇提问
Redis 的作者再事务功能的文档中解释,不支持事务回滚是因为这种复杂的功能和Redis追求的简单高效的设计主旨不符合,并且认为,Redis事务执行时,错误通常时编程错误造成的,这种错误通常只会出现在开发环境中,而很少会在实际的生产环境中出现,所以他认为没有必要为Redis开发事务回滚功能。 所以我们在讨论Redis事务回滚的时候,一定要区分发生错误的时候。
Redis(2)
Nosql
- ⼀般⼩项⽬mysql,⼤项⽬Oracle
- Nosql概念:泛指⾮关系型数据库,not only sql。
- ⽬的:解决⼤数据问题
- 主流nosql:redis,MongoDB,memcache…
redis
- 主从模式
- 作⽤1:备份数据
- 作⽤2:负载均衡,master节点可以进⾏读和写,slave节点只进⾏读操作。
- 主从同步:
- 在⼀台机器上启动多个redis实例,需要修改⼀下配置,保证多个redis实例出现共享数据。
- 修改master主服务器 redis.windows.conf
bind 127.0.0.1
port 6379
dbfilename dump.rdb
- 修改slave从服务器
bind 127.0.0.1
port 6380
dbfilename dump.rdb
slaveof 127.0.0.1 6379
- 哨兵模式:主从模式中,当master节点挂了以后,slave节点不能 主动选举⼀个master节点出来那么我就安排⼀个或多个sentinel来做 这件事,当sentinel发现master节点挂了以后,sentinel就会从slave中重新选举⼀个master。
- 由于Redis的数据都存放在内存中,如果没有配置持久化,redis 重启后数据就全丢失了,于是需要
开启redis的持久化功能,将数据保存到磁盘上,当redis重启后, 可以从磁盘中恢复数据。 - redis持久化⽅法⼀,rdb快照
-
概念:在指定的时间间隔内将内存中的数据集快照写⼊磁盘。实际过程:redis server ⾸先
fork ⼀个⼦进程,将数据集写⼊临时⽂件,写⼊成功后,替换之前的⽂件。 -
优点:1. 保存了 redis 在某个时间点上的数据集,适合⽂件备份和灾难恢复。2. 最⼤化redis
性能,⽗进程fork⼦进程,⼦进程就会处理后⾯所有⼯作,⽗进程⽆须io操作。 -
缺点:1. 因为设置保存点,所以可能会五分钟保存⼀次,这样,可能会丢失⼏分钟数据。2.
每次保存,都要fork⼀个⼦进程,⼦进程资源消耗⾮常⼤,可能会造成服务器在某毫秒内停
⽌处理客户端,⽩板。 -
特点:主服务器改变,⼦服务器什么都不要改变就可以保存数据。
-
步骤:
-
//1. 通常,快照持久化是默认开启的,会⾃动保存数据,启动时在⽂件夹⽣成dump.rdb⽂件。
//2. 也可以使⽤save⼿动设置频率
save
//3. 通过bgsave的⽅法⼿动运⾏快照持久化。
bgsave
//4. 数据恢复,将备份⽂件 (dump.rdb) 移动到 redis 安装⽬录并启动服务即可。
- redis持久化⽅法⼆,aof(append only file)⽇志追加
- 概念:redisClient发送写的命令,Redisserver同步写的命令,以⽇志的形式记录服务器所处
理的每⼀个写、删除操作,查询操作不会记录,以⽂本的⽅式记录,可以打开⽂件看到详
细的操作记录。 - 特点:1. append模式,所以,即使宕机也不会破坏⽇志⽂件中已存在内容。2. 更⾼的数据
持久性,因为有3种同步策略,每秒同步,每修改同步和不同步。
- 概念:redisClient发送写的命令,Redisserver同步写的命令,以⽇志的形式记录服务器所处
- rdb和aof的结合,达到秒级持久化。
- appendonly yes,默认关闭,⼀开始就要配置好
- 每秒钟写⼊磁盘⼀次
springboot+redis
- 添加依赖:
- spring-boot-starter-data-redis2.1.0
- 项⽬结构:
- ⼯具类RedisUtils.java
- 封装Redi