1、redis的进化背景
Reactor模式
-
传统阻塞IO模型客户端与服务端线程1:1分配,不利于进行扩展。
-
伪异步IO模型采用线程池方式,但是底层仍然使用同步阻塞方式,限制了最大连接数。
-
Reactor 通过 I/O复用程序监控客户端请求事件,通过任务分派器进行分发。
单线程时代
-
基于 Reactor 单线程模式实现,通过IO多路复用程序接收到用户的请求后,全部推送到一个队列里,交给文件分派器进行处理。
多线程时代
-
单线程性能瓶颈主要在网络IO上。
-
将网络数据读写和协议解析通过多线程的方式来处理 ,对于命令执行来说,仍然使用单线程操作。
https://xie.infoq.cn/article/d8785a39c52de02d9c3e06801
2、redis的部署模式
单节点实例
主从模式(master/slaver)
sentinel模式
cluster模式
https://www.cnblogs.com/cqming/p/11191079.html
3、redis 集群实战问题汇总
https://www.cnblogs.com/dadonggg/p/8628735.html
4、redis主从同步下数据丢失的处理方案
https://blog.csdn.net/duysh/article/details/103304134
从节点大于配置的时间点还未ack,从阻止主节点写入;减少了数据丢失的时间跨度
Redis Cluster 不保证强一致性,存在丢失数据的场景:
- 异步复制
在 master 写成功,但 slave 同步完成之前,master 宕机了,slave 变为 master,数据丢失。
wait
命令可以给为同步复制,但也无法完全保证数据不丢,而且影响性能。
- 网络分区
分区后一个 master 继续接收写请求,分区恢复后这个 master 可能会变为 slave,那么之前写入的数据就丢了。
可以设置节点过期时间,减少 master 在分区期间接收的写入数量,降低数据丢失的损失。
5、生产部署
1)测试环境 6个 IP
注意事项:
1,搭建redis集群默认每个服务器上有两个实例,端口号分别为 6379 , 6380 。
2,redis集群服务器需要6台,每个上面有2个redis实例。避免创建集群时主从在同一个服务器上。
#redis配置 config
redis.ips=10.***.***.190:6379,10.***.***.191:6379,10.***.***.192:6379,10.***.***.193:6379,10.***.***.194:6379,10.***.***.195:6379
2)生产环境8 个IP
6、redis 特性
速度快
键值对的数据结构服务器
丰富的功能
简单稳定
持久化
主从复制
高可用和分布式转移
客户端多语言
7、主要应用
缓存
排行榜系统
计数器应用
社交网络
消息队列系统
8、常用命令
全局命令
查看版本及信息
./redis-server
查看key数量
dbsize
#查看进程
ps -ef|grep redis
#模糊查找
keys 0566*
#是否存在key
exists 2acbb1294682454da68ed167cb67e925
set chenhy 1111
get chenhy
#设置过期时间
expire chenhy 15
#查看过期时间
ttl chenhy