Redis7分布式缓存之基础
Redis7分布式缓存
一、Redis入门概述
1.主流功能与应用
-
分布式缓存,挡在mysql数据库之前的带刀护卫

2.命名规则

二、Redis 10 大数据类型
这里说的数据类型是value的数据类型,key的类型都是字符串

1.redis字符串 (String)

2. redis列表 (List)

3. redis哈希表 (Hash)

4. redis集合 (Set)

5. redis有序集合 (ZSet)

6. redis地理空间(GEO)

7. redis基数统计 (HyperLogLog)

8. redis位图 (bitmap)

9. redis位域 (bitfield)

10. redis流(Stream)

三. Redis持久化
1. RDB
① 是什么


② 能干嘛

Snapshotting Config 快照时间配置(redis.conf)

③ 如何恢复


④ 如何备份


BGSAVE(默认)



⑤ 优点


⑥ 缺点



⑦ 那些情况会触发RDB快照

⑧ 如何禁用快照

2. AOF (Aof保存的是appendonly.aof文件)
① 是什么

② AOF持久化工作流程


③ AOF缓冲区三种写回策略



④ 如何开启AOF





⑤ 优点


⑥ 缺点


⑦ AOF重写机制
Ⅰ是什么


Ⅱ 触发机制


Ⅲ 案例说明


Ⅳ 重新原理

⑧ AOF优化配置项详解

⑨ 小总结

3. AOF+RDB





4. 纯缓存模式

四. Redis事务
1. 是什么

2. 能干嘛
一个队列中,一次性、顺序性、排他性的执行一系列命令
3. Redis事务 VS 数据库事务

4. Redis事务常用命令




五. Redis管道
1. 面试题


2. 是什么

① 解决思路

3. 小总结

六. Redis复制(replica)
1. 是什么

2. 能干嘛

3. 怎么玩

4. 案例分析
① 架构说明


② 小口诀

③ 修改配置文件细节操作

Ⅰ 开启daemonize yes 开启后台运行

Ⅱ 注释掉bind 127.0.0.1 否则别的redis连不上

Ⅲ protected-mode no 保护模式关闭

Ⅳ 指定端口

Ⅴ 指定当前工作目录 dir

Ⅵ pid文件名字,pidfile

Ⅶ log文件名字,logfile

Ⅷ requirepass

Ⅸ dump.rdb名字

Ⅹ aof文件,appendfilename

ⅩI 从机访问主机的通行密码masterauth,必须

5.常用三招
① 一主二仆

② 薪火相传

③ 反客为主

6.复制原理和工作流程


7. 复制缺点


七、Redis哨兵(sentinel)
1. 是什么


2.能干嘛

3. 怎么玩
① Redis哨兵(sentinel)架构,前提说明


② 案例步骤

Ⅰ先看看/opt目录下默认的sentinel.conf文件的内容

Ⅱ 重点参数项说明




Ⅲ


Ⅳ



Ⅴ

③ 其它步骤

4. 哨兵运行流程和选举原理

① SDown主观下线(Subjectively Down)


② ODown客观下线(Objectively Down)


③ 选举出领导者哨兵(哨兵中选出兵王)


④ 由兵王开始推动故障切换流程并选出一个新master

5. 哨兵使用建议

八. Redis集群(cluster)
1. 是什么



2. 能干嘛

3. 集群算法-分片-槽位slot

① redis集群的槽位slot

② redis集群的分片

③ 他两的优势

④ slot槽位映射,一般业界有3种解决方案

Ⅰ哈希取余分区

Ⅱ 一致性哈希算法分区


Ⅲ 哈希槽分区

是什么
###### 哈希槽计算

4. 为什么redis集群的最大槽数是16384个 ?






5.
九. SpringBoot集成Redis

1. Jedis
Jedis Client是Redis官网推荐的一个面向java客户端库文件实现了对各类API进行封装调用
2. Lettuce
① 是什么

② Jedis和Lettuce的区别

3. 集成RedisTemplate-推荐使用
① 连接单机
Ⅰ 序列化问题




Ⅱ 配置类
@Configuration
public class RedisConfig
{
/**
* redis序列化的工具配置类,下面这个请一定开启配置
* 127.0.0.1:6379> keys *
* 1) "ord:102" 序列化过
* 2) "\xac\xed\x00\x05t\x00\aord:102" 野生,没有序列化过
* this.redisTemplate.opsForValue(); //提供了操作string类型的所有方法
* this.redisTemplate.opsForList(); // 提供了操作list类型的所有方法
* this.redisTemplate.opsForSet(); //提供了操作set的所有方法
* this.redisTemplate.opsForHash(); //提供了操作hash表的所有方法
* this.redisTemplate.opsForZSet(); //提供了操作zset的所有方法
* @param lettuceConnectionFactory
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory)
{
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
//设置key序列化方式string
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认序列化
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
② 连接集群
Ⅰ 改写yml

Ⅱ 故障


Ⅲ 导致原因

Ⅳ 解决方案


刷新节点集群拓扑动态感应
