一.Redis(以键值对组织数据库)
作用:内存中存储数据
注:Redis是在分布式系统中才能发挥出真正的威力
二.浅谈分布式系统:
1.单机架构:
是什么:单机架构就是即有一台服务器,这台服务器负责所有工作
2.分布式系统:
是什么:多台服务器
3.负载均衡:
是什么:负责分均用户请求
作用:用算法平均公正讲用户请求分到多台应用服务器
4.数据库读写分离:
服务器遵从"一主(写)多从(读)"--------"从节点"需要从"主节点"同步数据
5.引入缓存(Redis)
数据分类:1.冷数据. 2.热点数据
即在内存存数据:遵循二八原则(20%的数据能支持80%的访问量)
6.数据库分表分类:
作用:应对更大的数据量
7.微服务:
作用:1.使用微服务,可便于功能的复用.
2.给不同服务进行不同部署
3.解决了团队协作与组织问题
三.环境搭建-redis客户端介绍
1.Redis是一个客户端-服务器结构的程序
四.Redis实战操作(Redis常见命令)
1.Redis中最核心的两个命令:get(查)和set(存)
Redis里存的是键值对:key-value
key是String类型,而value类型有多种(字符串,哈希表,列表,集合,有序集合)后续展开
2.Redis全局命令:就是能够搭配任意一个数据结构来使用的命令
1)keys命令:用来查询当前服务器上匹配的key
语法:keys pattern
例如:keys * (慎用)
注:在生产环境上,一般会禁止用keys命令,尤其是大杀器keys *
2)exists命令:判定key是否存在
语法:exists key [key...]
3)del命令:删除key
语法:del key [key...]
4)expire命令:给指定key设置过期时间,到时就删
语法:expire key seconds ,单位:秒(s)
pexpire key milliseconds ,单位:毫秒(ms)
5)ttl命令:查看指定key的过期时间
语法:ttl key ,一般与expire搭配使用,单位(s)
pttl key ,单位(ms)
返回值N: >=0-->还有N秒key过期
-1 -->key存在,永不过期(没设置过期时间)
-2 -->key不存在
6)type命令:返回key对应的value 的数据类型(五大数据类型)
语法:type key
⭐️3.Redis经典面试题
问:redis的key的过期策略是怎么实现的?
答:redis整体的策略有二:1.定期删除 2.惰性删除 (二者结合来进行)
1.定期删除:Redis 每隔一段时间,随机抽一批 key(包含过期与没过期)检查有没有过期,过期就删掉.
2.惰性删除:假设这个key已经到过期的时间了,但是暂时没有访问到这个过期的key,key仍存在,在后续,在下一次被访问到这个key时,检查到过期了,于是这次访问就会让redis服务器除法删除这个key的操作,同时返回一个null.(若仍需要这个key,则需手动取数据库里查再重新设置)
总结**:二者删过期的key的方式一样,都是检测到key过期了就删,只是删key的时机不一样**
4.定时器的实现原理:(了解)
定时器是在某个时间到达之后,执行指定任务的功能
1)基于优先级队列/堆
2)基于时间轮实现的定时器:把时间划分成很多歌小段,每个小段挂着一个链表,每个链表代表一个任务
注:redis并未采取这两种方案,redis的定时器就是他对key 的过期的策略(定期删除和惰性删除)
五.常用数据结构:
- key(string): "abcd" --->字符串(String)
:field value --->哈希表 (Hash)
:[a,b,甲,乙] --->列表(List)
:苹果,香蕉,西瓜 --->集合(Set)
:99.0-关羽 98.0-刘备 97.0张飞--->有序集合
2.编码方式:同一个数据类型,背后可能的编码实现方式是不同的,会根据特定场景优化,比如根据value的大小,使用不同的编码方式
六.关于单线程模型:
单线程模型的工作流程:redis只使用一个线程,处理所有的命令请求
⭐️七.Redis必考面试题:
问:redis为什么相较于MySQL等数据库跟快?
答:
1.redis访问内存,数据库访问硬盘
2.redis核心功能,比数据库的核心功能跟简单
3.redis 是单线程模型,避免了不必要的线程竞争开销
4.处理网络IO时,使用了epoll这用的IO多路复用机制
(IO 多路复用机制就是单个线程借助内核,同时监听多个网络连接,有事件就处理、无事件就阻塞等待,实现单线程高并发,是 Redis 单线程能扛大量客户端的底层核心。)