Redis的安装与使用及4种模式
一、什么是Redis Redis的作用是什么?
Redis是一种开源的非关系型数据库,储存结构以 Key Value(键值对)形式,可基于内存、分布式、持久化的操作,支持多种数据类型:string list set zset hash
1.安装
下载可查看:https://www.runoob.com/redis/redis-install.html
下载redis的安装包,安装后,进入安装路径下 使用命令: redis-server.exe redis.windows.conf 安装成功
二、五种类型的简单使用:String类型
2.1 String 类型
2.2 lit 类型
2.3 hash 类型
2.4 set 类型
无序不可重复,下面做个例子,第一次添加一个 mysql ,再次添加会告诉你添加没有成功(返回0, 1为成功)
第一次添加的是 redis 第二是是mysql ,可以看出无序,且不能重复
2.5 zset 类型
有序且不可重复
三、redis的穿透、击穿、雪崩
我们知道redis主要是用来做缓存存储数据,减少访问数据库的压力,起到一个削封的作用。但是key失效,或者没有这个key的时候会出现以下几种情况。
3.1 穿透
当用户请求的时候,会先去redis里面查看有没有存在这个数据,如果没有则去数据库查询,这个时候如果数据库也不存在,如果并发量大每次请求都访问数据库则会造成数据库宕机。
(解决方式:临时在redis里存储一个访问的key,value可以设置为null ,设置有效期为1-3分钟,降低对数据库访问)
3.2 击穿
一些key是常用的,比如我们的用户ID、用户的手机号等常用信息,这些常用的 key 在某一段时间突然失效,如果并发量大都会去请求数据库造成数据库的压力过大而挂掉。
(解决方式:把常用的key设置为无过期时间 或者 定时去更新他们的失效时间)
3.3 雪崩
当我们服务器里突然大批量的key失效,这个时候所有的请求都访问数据库,造成数据库压力过大而宕机。
(解决方式:把key设置成随机的过期时间,避免大批量的key同一时间点失效 或者 redis集群部署)
四、Redis的持久化方式 RDB和AOF
redis提供了两种持久化的方式,分别是RDB和AOF
4.1 RDB(默认持久化方式)
redis以快照的形式把数据持久化到磁盘等介质上。RDB持久化的过程中会把数据先写到一个临时文件,当持久化结束就会替换掉上次的持久化文件,
正是这种持久化方式,让我们可以随时来做持久化备份。redis在使用RDB持久化的时候会单独起一个子进程来进行持久化操作,主进程不会进行任何的 IO 操作,保证了redis的极高性能。
如果你对数据完整性要求不高,就可以选择用RDB模式,比如我们五分钟持久化一次文件,当redis故障时仍然会有五分钟的数据丢失,如果对数据要求很敏感就可以使用redis提供的另一种持久化方式AOF
4.2 AOF
AOF就是换了一种持久化方式,它会把每次写的指令记录下来,当下次redis重启的时候,从前到后再执行一遍写的指令操作,数据就可以恢复了。
配置redis.conf中的appendonly yes就可以打开AOF功能,如果有写的操作(SET)redis就会被追加到AOF的末尾,AOF默认是1秒把写的指令持久化到磁盘,
这两种持久化方式可以同时存在,但是redis重启的时候会优先选择AOF,这种方式会尽可能的保证数据的完整性。
下面来测试一下,先修改redis的配置文件,打开AOF持久化方式
set两个key 来做测试
然后关闭一下redis服务器,重新打开查询下刚刚set的key能不能获取到
可以获取 OK了~
可以看下redis下的 dump.rdb 里面有我们刚刚设置的两个key
appendonly.aof查看备份文件,可以看到该文件把所有的写操作全部记录下来
五、单机模式、主从模式、哨兵模式、集群模式
5.1 单机模式
比较简单,安装一个redis直接操作,上文的操作都是单机模式。好上手,数据不需要同步,数据天然一致性~,缺点:可靠性不是很好,存在宕机的风险。
5.2 主从模式
主从模式顾名思义,一个主服务器,多个从服务器,主服务器可以用来读写,从服务器只能用来读,主服务器会把写的数据同步到从服务器中。
主从服务器的搭建也很简单,只要在从服务器上配置上主服务器的 IP 端口号即可。
列如从服务器的配置:
#slaveof 192.168.1.001 6379 (主服务器的 IP + 端口号)
既然是主从模式,我们会考虑一个问题,就是主服务器挂掉了,从服务器会升为主服务器,其他从节点配置的主服务器IP需要人为去改动。
那么应用服务器当前访问的还是挂掉的主服务器ip 这个时候就会存在问题。就有了哨兵模式。
5.3 哨兵模式
刚刚说道了主服务挂掉,从服务器升为主服务器,这个时候应用服务器访问的还是之前的主服务器IP。哨兵模式的主从复制,实现了自动化的故障修复。
简单来说:应用服务器访问的是哨兵集群,即使你主服务挂掉,从服务器升为主服务器,应用服务器的访问地址是不用变的,因为它直接访问的是哨兵集群,他们两个才是做交互的。
哨兵模式不光只用来做故障修复,它还有一些其他的优点:主节点的存活检测,主从的运行检测,主从切换。
网上浏览了很多哨兵模式,这里我再说下所了解到的原理:
每一个哨兵(sentinel)都会以每秒一次的频率向它所关联的 主服务器 、从服务器、其他哨兵发送一个 PING命令
如果其中一个示例收到了 PING 命令后 ,在down-after-milliseconds 指定的时间内没有回复PING命令,哨兵就会视它为 “主观下线”。
如果一个主服务器被标记为 “主观下线” 那么其他的 哨兵节点(sentinel) 都会以每秒一次的频率 确认他是否进入到了 “主观下线”。
如果多个哨兵节点(起码大于等于配置里的节点数量)都同意这个主服务器进入到了 “主观下线”,那么它将被标记为“客观下线”(OWODN)。
如果当前这个主服务被标记为“客观下线”后,哨兵会向这个主服务的所有从节点(从服务器)发送一个 INFO命令,以10秒一次的频率。
哨兵会和其他的哨兵节点协商主节点的状态,当主节点的状态为 SDOWN 时,哨兵集群会选出一个子节点升级为主节点,将剩下的从节点指向新的主节点。
5.4 集群模式
通过了解Redis的哨兵模式,很好的解决了自动化故障转移,而不是像主从模式一样(需要人为去把从服务器升为主服务器),但是哨兵模式还会有一个问题,
就是所有从服务器的数据是一样的,这样比较浪费资源。当你一台服务器数据量大存不下的时候,主从模式和哨兵模式就不适合用了,就有了集群模式。
集群模式简单来说就是通过数据分片的方式每个服务器上存储的内容不一样,将Redis的数据根据一定的规则分配到不同的服务上去。可以说集群模式就是主从和哨兵模式的结合体。
开启集群模式可以通过 redis.conf 文件修改 :cluster-enabled yes ,每个集群至少需要3个以上主节点,当数据不够放的时候直接增加从服务器即可