基础
Redis常用的数据类型:String、Hash、List、Set、zSet
string:set mykey "new-value"
list:lpush mylist "foo",可以从左边或右边添加元素,
hash:hset website google "www.g.cn"
set:sadd myset "hello"
- sorted set:zadd myzset 2 "two" 3 "three",集合元素按score进行有序排序,可以做排行榜
过期数据删除策略:
- volatile-lru(least recently used):从设置过期时间的数据中挑选最近最少使用的数据淘汰
- volatile-random:从设置过期时间的数据中任意选择数据淘汰
- allkeys-lru(least recently used):在键空间中移除最近最少使用的 key(这个最常用)
- allkeys-random:从数据集中任意选择数据淘汰
缓存穿透:
简单点就是大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这⼀层,解决办法:做好参数校验
缓存雪崩:
缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求 ,热点缓存失效解决方案:设置不同的失效时间比如随机设置缓存的失效时间
持久化
Redis 提供了两种持久化机制:AOF和RDB
AOF:
以日志的方式记录每次写命令,并在 Redis 重启时重新执行 AOF 文件中的命令以达到恢复数据的目的. AOF重写,只保留最后一次的修改记录,防止文件过大. AOF采用的是先执行命令,后写日志的方式,只记录执行成功的命令,避免出现记录错误命令的情况
RDB:
在指定的时间间隔内将内存中的数据以二进制文件的形式写入磁盘,Redis提供了save和bgsave命令生成.rdb文件,save命令执行时会阻塞主线程,bgsave命令会创建一个子线程写入.rdb 文件,避免了对主线程阻塞
高可用
实现高可用主要有三种方式:主从复制、哨兵模式,以及 Redis 集群
主从复制:将从前的一台 Redis 服务器,同步数据到多台从 Redis 服务器上,即一主多从的模式,这个跟 MySQL 主从复制的原理一样
哨兵模式
使用 Redis 主从服务的时候,会有一个问题,就是当 Redis 的主从服务器出现故障宕机时,需要手动进行恢复,为了解决这个问题,Redis 增加了哨兵模式(因为哨兵模式做到了可以监控主从服务器,并且提供自动容灾恢复的功能)
Redis 集群
使用哨兵模式在数据上有副本数据做保证,在可用性上又有哨兵监控,一旦 master 宕机会选举 salve 节点为 master 节点,这种已经满足了我们的生产环境需要,为什么还需要使用集群模式呢?
哨兵模式归根节点还是主从模式,在主从模式下我们可以通过增加 salve 节点来扩展读并发能力,但是没办法扩展写能力和存储能力,存储能力只能是 master 节点能够承载的上限,所以为了扩展写能力和存储能力,我们就需要引入集群模式