Redis学习过程记录

redis的优缺点: ok
reids为什么快。 ok
redis持久化。
redis AOF,RDB模式。
redis内存模型。
redis哨兵。 ok
redis内存淘汰策略.
redis事务。
redis主从。 ok
NIO,BIO
Redis 中的管道

redis 缓存实现。

 

reids的引用:分布式锁实现

缓存雪崩,穿透,击穿。

缓存预热,缓存热点key。
如何保证缓存与数据库双写时的数据一致性

Redis如何做大量数据插入
如何解决 Redis 的并发竞争 Key
定期删除+惰性删除。
Redis 集群最大节点个数是多少?
Redis 分布式锁?
我司:页面数据缓存,token缓存。短信缓存。分布式session缓存,主键自增,固定格式编码。调用日志缓存。自定义排序?

string , hashmap , HashSet,TreeSet , LinkList 。 set??? SortedSet??? set几种类型

 

 

Redis能读的速度是110000次/s,写的速度是81000次/s。
单个 value 的最大限制是 1GB
一个字符串类型的值能存储最大容量是多少 512M
edis 集群最大节点个数是 16384 个
Redis 的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此 Redis 适合的场景主要局限在较小数据量的高性能操作和运算上。

 

noeviction:返回错误当内存限制达到,并且客户端尝试执行会让更多内存被使用的命令。
allkeys-lru: 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
volatile-lru: 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
allkeys-random: 回收随机的键使得新添加的数据有空间存放。
volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。


I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,
一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作


poll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率
原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了


RDB持久化、AOF持久化的区别
实现方式
文件体积
安全性
优先级

RDB快照文件,一定会有丢失,线上不行

 

 

socket过程:阻塞 BIO,同步非阻塞 NIO,多路复用的NIO(管道) --select
用户态,内核态
沟通有没有数据,并不是传数据
epoll
共享空间,零拷贝
mmap
用户态和内核态
单线程沟通,阻塞IO

用户轮询调用,返回结果确定是否有数据,仍是单线程,多次尝试 同步非阻塞 IO

均有select过程。
获取数据之前会先携带指令查看那些有需要的数据,返回有数据的,有数据的发送指令到内核循环获取数据 NIO
开辟共享空间:红黑树,链表,红黑树携带所有指令,链表是那个指令有数据 epoll NIO
连接先到到内核(kenel) 内核和redis epoll
nginx:多少个CPU启动多少个进程,进程使用epoll
windows有AIO,LINUX无AIO
分布式锁 set k1 values nx --nx 新建 --xx更新
value有正向索引,负向索引
字节,字符 二进制安全
cd /proc/进程号/fd
socket
redis处理用户数据是单线程的,且每个请求中的数据是有序的。
redis后台有线程进行数据持久化。
事务。
秒杀,抢购,评论数,点赞数。string中的数据值类型,规避并发对数据的是我操作。车票也可以redis
总结:

for处理业务是单线程还是多少线程
string 二进制位,登陆记录,统计活跃用户量。用户在线状态.
list,左右,栈,队列,数组,阻塞队列。
map:模拟用户信息,页面信息,点赞,评论,收藏。
set:交并差,随机数,抽奖

统计活跃用户量:bitcount:
bit(bitmap,地图),二进制位,用户活跃量,用户在线状况

8个位构成一个字节,8bit=1byte

数据存储的最小单位。每个二进制数字0或者1就是1个位;

list:底层类似双向链表:有头指针位置。pre位,tail位
list:
lpush : 依次向左添加元素。模拟栈先进后出。
rpush : 依次先右添加元素,模拟对象先进先出。
blpop :阻塞队列,blpop:弹出指定元素,在指定时间内没有这个元素则一直阻塞。

set:
srandmember : 随机获取指定数据,抽奖。

 

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行,哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

这里的哨兵有两个作用

通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。

当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

 


监控,通知,自动故障转义
哨兵也是一台redis服务器。
哨兵集群一般是单数,双数选举时有可能打平


观察服务器注册,哨兵注册,数据同步,服务器显示信息,哨兵日志,redis,日志,添加的数据

redis守护线程:redis以守护线程的方式在后台启动,
NO:当redis退出或者关闭连接工具,redis退出。
YES:redis采用的是单进程多线程的模式,在该模式下redis会在后台运行,除非手动kill掉


启动redis主,启动一个哨兵,观察信息,启动从服务,观察哨兵配置信息,观察info

 

slaveof 127.0.0.1 6379


主从复制,读写分离,哨兵


redis插入数据时,redis都会把数据刷新到磁盘。然后从服务器也同步将数据刷新到自己的磁盘
配置:。。。。。
哨兵过程:开启一个redis-server端口是6379,开启一个哨兵端口26379,哨兵启动后会生成一个sentinel ID(哨兵唯一标识,用于互相通信),哨兵开始监控主redis6379,并启用选取过半票数
此时slave从服务器6380,从服务器开启成功后,开始连接主服务器,触发同步非阻塞事件,主服务器回应复制可以继续,选择是部分复制还是全量复制,接收主服务器的字节数,刷新旧数据,将新数据加载到内存中,数据同步成功。
配置文件中配置从服务器,哨兵开始监控从服务器信息。
当再次开启一个哨兵的时,哨兵之间开始互相通信,哨兵配置文件中同步哨兵信息(sentinel ID),新增的哨兵开始监控主服务和从服务
当主服务器退出时,开始投票确实服务是否真实宕机,当投票过半,确认主服务器宕机,开始投票选取某台从服务器每个哨兵会推举出自己所选服务器的唯一ID,选举成功后根据唯一ID找到被推举的IP 和端口,其余从服务器开始连接此主服务器,之前的主服务器下线,将此替换为主服务器,
所有哨兵配置文件,之前主服务器替换为新主服务器IP 端口
当主服务器启动时,主服务器开始同步之前主服务器数据并刷新到磁盘。哨兵切换监控的主服务器,并修改自己的配置文件。

哨兵启动后会生成一个sentinel ID(哨兵唯一标识,用于互相通信),哨兵开始监控主redis6379,并启用选取过半票数,同时开始监听从服务器6380。


哨兵26381生成了字段的唯一ID,开始监听主服务器6379并同时开始监听两台从服务器6380,6381,并与另外两台哨兵建立相互通信。


开始同步26381的信息,并建立通信。

 

posted @ 2022-02-10 17:45  爵士灬  阅读(20)  评论(0编辑  收藏  举报