1.Redis是什么?
redis是一种非关系型数据库,数据以
- string 常规的字符串类型
- list 有序可重复
- set 无序不重复
- hash value以键值对的形式存储
-
2.Redis是否支持事务,请介绍?
redis是支持事务的,但只能是简单事务,没有回滚机制,如果事务中有执行错误的语句,事务提交后,正确的语句会执行而不会回滚。
redis事务执行命令:
#开启事务 multi
#执行命令
#提交事务 exec
#取消事务 discard3.Redis的持久化?
因为redis的数据是存在内存中的,一旦程序关闭,会出现数据的丢失。为解决这个问题,redis提供了2种持久化方案,RDB 和AOF。
RDB:
RDB是Redis默认的持久化方案,是基于快照的思想,将内存中的数据以快照的方式生成二进制文件存储到硬盘中。可以自动触发和手动开启
自动触发:修改配置文件的参数 save 30 100 此设置为 30秒内数据有100次操作变化就会触发保存机制。
手动触发:save 命令 和 bgsave 命令 (save 为同步处理,会阻塞redis;bgsave 是复制一个和主线程一样的子线程进行保存操作)
AOF:
与RDB直接备份数据不同,AOF是将每次的写操作进行备份,默认的备份文件为appendonly.aof。AOF需要手动开启。
手动开启:1.将配置文件redis.conf中的appendonly no 改为appendonly yes;
2.设置备份文件名 appendfilename appendonly.aof;
3.修改触发方式appendfsync属性,有三种 always、eyerysec、no。
默认的触发机制为eyerysec,每秒存储一次。always为每条操作后就存储,no为每30秒存储操作一次。
RDB与AOF差异点: RDB默认开启,AOF需手动开启;
- RDB性能优于AOF;
- AOF安全性优于RDB;
- AOF优先级高于RDB;
- RDB存储某个时刻的数据快照,AOF存储写命令;
- RDB在配置触发状态会丢失最后一次快照以后更改的所有数据,AOF默认使用everysec,每秒保存一次,最多丢失两秒以内的数据;
-
4.Redis的高可用?
虽然redis持久化能够保证数据的安全性,但如果服务器发生宕机,数据一样会丢失。要解决这个问题,就要考虑使用搭建集群来保证数据的安全。目前常用的有3种方案,主从复制、哨兵模式、分片集群。
主从复制:
一主多从,将master上的数据备份到多个slave中。master负责写操作,slave负责读操作,实现读写分离,即保证了数据安全又缓解了主服务器访问压力。若master发生宕机,可手动将slave设置为主节点,slaveof no one。
哨兵模式:
由于主从复制方案中主节点宕机需要手动处理,为达到自动进行切换,增加哨兵进行监控处理。如图所示,3个哨兵会对主库进行监控,哨兵之间也会进行通信,当有一半哨兵主观判断主库发生问题下线后,会形成客观判断主库宕机,此时会触发新主库切换操作。若后面旧主库重新上线,或作为新主库的从库使用。
分片集群:
哨兵模式虽然解决了高可用问题,但是主库与从库的数据是一样的,加上哨兵的服务加因此搭建成本比较高。而分片集群在高可用的基础上能够存储更多的数据。
hash槽,16843个,会平均分配到每个master主库,一份数据会经过CRC16算法得出相应的hash槽值,再存储到相应的分片,这是一种去中心化存储的思想。每个分片又是一个哨兵模式。能很好解决数据的高可用与水平扩展。5.Redis的key过期删除策略?
定时删除:使用较少
- 惰性删除: 当使用时才判断是否过期,是否要删除,对CPU友好但对内存不友好。