堆栈花园的NoSql学习备忘录——Redis

一、redis中value的五种数据类型

1. 字符串类型 string
字符串类型是Redis中最基本的数据类型,可以存储任何形式的字符串,包括二进制数据,序列化后的数据,JSON数据,甚至是一张图片,最大512M。

2. 哈希类型 hash
Redis hash是一个string类型的field和value的映射表,hash特别适合存储对象。

keyloginUser
//field////value//
uname张三
times5
regionShanghai

其中redis的keyloginUser,而value是表头下方的内容,其中左侧是field,右侧是value

  • 相当于java中以下内容:
Map<String,String> hash = new HashMap<>();
hash.put("uname","张三");
hash.put("times","5");
hash.put("region","Shanghai");

Map<String,Map<String,String>> redis = new HashMap<>();
redis.put("loginUser",hash);

3. 列表类型 list
redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个到列表的头,也可以到列表的尾部。

keyvalue
region北京 上海 广州 深圳

4. 集合类型 set
redis 的 set 是 string类型的无序集合,集合成员是唯一的,集合中不能有重复数据

keyvalue
上海徐汇区
黄浦区
静安区

5. 有序集合类型 zset
redis 有序集合 zset 和集合 set 一样也是string类型的元素集合,不允许重复。不同的是zset的每个元素可以关联一个数字,数字可以重复,redis通过数字来为集合中的元素从小到大排序。

二、Redis事务

1. redis中的事务
Redis中的事务是一组命令的集合,至少是两个或两个以上的命令,redis事务保证这些命令执行时,不会被任何其他操作打断。

2. 事务的操作命令

① multi
作用:标记一个事务的开始。事务里的多条命令会按照先后顺序放到一个队列里。

返回值:总是返回ok

② exec
作用:执行所有事务块内的命令。

返回值:事务内所有执行语句的内容。如果事务被打断,返回nil

③ discard
作用:取消事务,放弃执行事务块内的所有命令。
返回值:总是返回ok

④ watch key [key …]
作用:监视一个或多个key,如果在事务执行之前,这些key被其他命令改动了,事务会被打断。

返回值:总是返回ok

⑤ unwatch
作用:取消watch命令对所有key的监视。

返回值:总是返回ok

redis的watch机制就是一种乐观锁(CAS)

三、持久化

1. 持久化概述

  • 持久化可以理解为存储,将数据存储到一个不会丢失的地方,如果把数据放在内存里,服务器关闭或重启就会丢失数据,所以放在磁盘中就算一种持久化。
  • redis的数据存储在内存里,如果linux宕机或者重启,或者redis发生崩溃或者重启,内存中的数据都会丢失。为了解决这个问题,redis提供了两种机制对数据进行持久化存储,便于发生故障后能迅速恢复数据。

2. 持久化方式
(1) RDB方式

① 什么是RDB方式
Redis Database,就是在指定的时间间隔将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。
RDB保存了某个时间点的数据集。存储在一个二进制文件中,只有一个文件,默认是dump.rdp。RDB适合做备份,可以保存最近一小时,一天,一个月的全部数据,保存数据是在一个单独的进程中写入,不影响redis的正常使用,RDB恢复数据比较快。

② 如何实现RDB方式
在redis.conf文件中配置即可,默认是开启的。
在redis.conf中搜索SNAPSHOTTING,查找关于RDB的配置说明:
A:配置执行RDB生成快照文件的时间策略。

save <seconds> <changes>
例如:
save 900 1
save 300 10
save 60 10000

配置内容的意思是,在n秒内,有m个key被改变了,就自动保存一次。

B:dbfilename ,设置RDB的文件名,默认文件名是dump.rdb
C:dir,设置RDB文件的存储位置,默认是./当前目录

总结

  • 优点:
    由于存储的是数据快照文件,恢复数据方便,也很快。
  • 缺点:
    ① 在最近一次快照之后更新的数据会丢失。
    ② 因为存储的时候需要操作磁盘,所以会有多余的开销,如果redis数据库很大,可能会让redis暂停服务一段时间(毫秒)。

(2) AOF方式

① 什么是AOF方式
Redis每次接收到一条更改数据的命令时,它把命令写到一个AOF文件中,当redis重启时,它通过执行AOF文件来恢复数据。

② 如何实现AOF实现
AOF方式的数据持久化,同样仅需在redis.conf文件中配置即可:
A:appendonly,默认是no,改成yes就开启了了AOF持久化
B:appendfilename,指定AOF文件名,默认文件名叫appendonly.aof
C:dir,指定RDB和AOF文件存储目录,默认是./
D:appendfsync,配置向AOF文件写命令数据的策略
D1:no,不主动进行同步操作,完全让操作系统来完成,比较快,但是不安全。
D2:always,每次执行写入都会执行同步,会影响一定的性能,但比较安全。
D3:everysec,每秒执行一次同步操作,比较平衡,介于安全与速度之间,是默认项。
E:auto-aof-rewrite-min-size,允许重写的最小AOF文件大小,默认是64M。当aof文件大于64M的时候,开始清理AOF文件,去掉无用的命令,优化AOF文件大小。

四、主从复制
  • 通过持久化功能,Redis保证了即使服务器重启也不会丢失数据,但是由于数据都存储在一台服务器上,如果这台服务器的硬盘坏了,那会导致数据丢失。
  • 为了避免单点故障,我们需要将数据复制多份部署到其他服务器上,即使有一台服务器出现故障,其他服务器依然可以继续提供服务。那么Redis的主从复制就可以让一台服务器上的数据更新的同时,自动更新同步到其他服务器上。
    在这里插入图片描述
  • 在主Redis中,主要负责写。而从Redis中,主要负责读。所以主从复制的机制也实现了读写分离,减轻了单个服务器的压力。
  • 容灾处理:当主服务器出现故障,可以手动将slave中的一个提升为master,剩下的slave挂至新的master上(冷处理)。
五、高可用Sentinel哨兵
  • Sentinel哨兵是redis官方提供的高可用方案,它可以监控多个redis服务实例的运行情况。Redis Sentinel哨兵也是一个服务器,只不过它运行在特殊模式下,Redis Sentinel是在多个Sentinel进程环境下互相协作工作的。

  • Sentinel系统有三个主要任务:

  1. 监控:
    Sentinel不断地检查主服务器和从服务器,是否按照预期正常工作。
  2. 提醒:
    当被监控的Redis出现故障,Sentinel会通知管理员或其他应用程序。
  3. 自动故障转移:
    如果监控的主服务器出现故障,Sentinel会开始进行故障迁移操作。将其中的一台从服务器变为主服务器,其他从服务器指向新的主服务器。

注意:哨兵的数量一般是奇数个,且最小值为3,因为哨兵判断一个主服务器是否出现故障,是通过投票的方式,少数服从多数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值