Redis

Redis

1.Redis简介

1.1 NoSQL非关系数据库

以key-val存储,不支持ACID,适合场景:高并发、海量数据读写。
Redis是典型的NoSQL数据库
在这里插入图片描述

1.2 Redis应用场景

1.2.1 配合关系型数据库做高速缓存

  1. 高频次,热门访问的数据,降低数据库IO
  2. 分布式架构,做session共享

1.2.2 多样的数据结构存储持久化数据

在这里插入图片描述

1.3 Redis介绍相关知识

在这里插入图片描述

  1. redis 默认端口号:6379 默认有16个数据库
  2. Redis是单线程+多路IO复用技术
  3. 与Memcache三点不同:redis 支持多种数据类型、支持持久化、单线程+多路IO复用
    在这里插入图片描述

1.4 Redis常用的5大数据类型

1.3.1. 符串String

1.3.2. 哈希Hash

1.3.3. 列表List

1.3.4. 集合Set

1.3.5. 有序集合 Sorted set (底层实现结构)

数据结构采用的是跳表结构,查找时间复杂度(log(n))
链接: 聊聊Mysql索引和redis跳表 —redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里).

1.5 Redis 键(key )命令

链接: Redis各种命令-菜鸟教程.
在这里插入图片描述

1.6 redis 配置文件介绍

1.6.1 bind

在这里插入图片描述

1.6.2 protected-mode

将本机访问保护模式设置为:no。
不然不支持远程访问。

1.6.3 port

默认端口:6379

1.6.4 tcp-backlog

在这里插入图片描述

2. Redis的发布和订阅(本质:一种消息通信模式)

2.1 什么是发布和订阅

  1. Redis发布订阅(pub/sub)是一种消息通信模式:发送者发送消息,订阅者接受消息。
  2. Redis可以订阅任意数量的频道。

2.2 Redis的发布和订阅

在这里插入图片描述

2.3 发布订阅命令行实现

链接: 菜鸟教程.

3 Redis 新数据类型

3.1 Bitmaps

用二进制位作为信息的基本单位。
在这里插入图片描述

3.2 HyperLogLog

统计基数的数量
在这里插入图片描述

3.3 Geographic

在这里插入图片描述

4 Jedis操作redis

4.1 Jedis常用操作

之前用命令操作的均可以用jedis-api完成。
在这里插入图片描述

4.2 Redis_Jedis实例

在这里插入图片描述

4.2.1 随机生成6位验证码

在这里插入图片描述

4.2.2 每个手机每天只能发送三次,验证码放到Redis中,设置过期时间

在这里插入图片描述

5. Springboot整合Redis

链接: Springboot整合Redis参考视频.
链接: 博客链接.
分三个阶段

  1. 在pom.xml导入两个依赖
  2. 在springboot 配置文件中配置Redis ip地址、端口号、连接池
  3. 在项目中新建Redis一个配置类,配置Redis其他相关内容

6. Redis中事务的操作

6.1事务的操作原理

在这里插入图片描述

6.2 事务的三个操作命令

在这里插入图片描述

6.3 事务的冲突问题

案例:双十抢购商品
三个人拥有一个账户购买商品会超额,同时也会出现超时连接。
解决办法: 用redis连接池解决超时连接问题;用乐观锁解决超卖问题;这时会出现库存遗留问题,需要用Lua脚本去实现。

6. 4解决事务冲突的问题: 悲观锁与乐观锁

悲观锁与乐观锁(cas)的区别:
在这里插入图片描述
乐观锁适用于平时的抢票场景

6.5 watch 操作命令实现乐观锁

6.6 Redis中事务的三个特性

在这里插入图片描述

7. Redis持久化操作

7.1 RDB(Redis-DataBase)

在相同时间间隔内以数据快照的方式存在dump.rdb
采用了“写时复制技术”
特点:对数据敏感性要求不高,可能最后一次丢失数据

7.2 AOF(append only file)

在文件末尾追加内容,根据更新时间策略(aof频率同步操作)更新appendonly.aof
当appendonly.aof达到一定的容量时,会进行Rewrite压缩。

8. Redis 主从复制

8.1 搭建一主两从Redis的步骤

在这里插入图片描述

8.2 主从复制的原理

在这里插入图片描述

8.3 一主二仆、薪火相传、反客为主

反客为主:slaveof no one ---->将从slave 变为master服务器.

8.4 哨兵模式(反客为主的自动版)

故障恢复
在这里插入图片描述

9.Redis 集群

9.1 Redis为什么要集群?

容量不够,redis 如何进行扩容?并发写操作,redis如何分摊?
Redis集群 实现了对redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这个N节点中,每个节点存储总数据的1/N.

9.2 什么是slot插槽?

在这里插入图片描述

9.3 redis 故障恢复?

在这里插入图片描述

9.4 集群Redis开发

即便链接的不是主机,集群会自动切换主机存储,主机写,从机读
无中心化主从集群。无论是哪台主机写的数据,其他主机上都能读到数据。

public class JedisClusterTest{
	public static void main(String[] args){
		Set<HostAndPort>set = new HashSet<HostAndPort>();
		set.add(new HostAndPort("192.168.31.211",6379));
		JedisCluster jedisCluster = new JedisCluseter(set);
		jedisCluster.set("k1","value1");
		System.out.println(jedisCluster.get("k1"));
	}
}

10. Redis 应用问题解决

10.1 缓存穿透

在这里插入图片描述
解决方案:
在这里插入图片描述
在这里插入图片描述

10.2 缓存击穿

在这里插入图片描述
解决方案
在这里插入图片描述

10.3 缓存雪崩

  1. 数据库压力变大服务器崩溃
  2. 在极少时间段,查询大量key的集中过期情况
    在这里插入图片描述
    解决办法:
    在这里插入图片描述
    在这里插入图片描述

11. Redis 分布式锁 (Redis应用问题解决)

11.1 概念

1.分布式锁引入
在这里插入图片描述
2.分布式锁场景
在这里插入图片描述
3 代码分析
在这里插入图片描述
4 uuid误删场景
在这里插入图片描述
5 uuid 防止误删
在这里插入图片描述
在这里插入图片描述
6 缺乏原子性操作
在这里插入图片描述
在这里插入图片描述
7. 解决原子性问题 – lua脚本
在这里插入图片描述
在这里插入图片描述

11. 2 超卖场景:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分布式锁案例
在这里插入图片描述
在这里插入图片描述
优化:
宕机 设置过期时间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有问题
在这里插入图片描述

11. Redis知乎面试总结

链接: 《进大厂系列》系列-Redis常见面试题(带答案).

12. 参考视频

链接: 尚硅谷-参考视频.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值