目录
1.Redis简介
Memcache和Redis的区别?
为什么Redis能这么快?
1.1Redis执行原理
多路IO复用
1.2Redis常用数据类型
Redis底层数据类型
2.从海量数据里查询某一固定前缀的Key
先问清楚数据量是多大。
我们改用下图方式实现。
左边客户端等待30秒
3.如何通过redis实现分布式锁
3.1如何解决分布式锁
如何解决setnx长期有效的问题
以上代码中会出现什么问题呢?
如果setnx之后,代码挂掉了,后面的逻辑执行不到了。
3.2redis2.2之后的使用
4.如何实现异步队列
4.1一对一
有没有其他方法实现队列呢?有!
左边等待消息,右边push消息。
4.2一对多
想解决这个问题,需要使用专业的MQ
5.redis持久化
5.1Redis如何做持久化
RDB持久化
找到我们的redis.conf文件,在redis安装的根目录下。
我们搜索save
900表示900s内有一次写入指令,就会产生1次快照。
300表示300s内有一次写入指令,就会产生快照,如果是0<变动数<10,就会等到900s后才去做备份。
60表示60s内又1w条写入,我们就进行一次备份。
stop-writes-on-bgsave-error yes表示当备份进程出错的时候,主进程就停止新的写入操作,保护持久化数据一致性。
rdbcompression no表示rdb文件备份,在rdb文件备份时,将文件进行压缩后才备份。我们设置为no。
redis系统会定期备份文件在dump.rdb文件中
如上图所示,执行save保存,退出连接后可以看到生成rdb文件。
删除rdb文件,执行lastsave,会返回上次保存rdb文件的时间戳。
我们执行bgsave,重新保存一份,会发现lastsave的时间戳发生了改变。
自动化触发RDB
AOF持久化
同样的,进入redis.conf文件
搜索appendonly设置为yes,就会生效。
搜索appendfsync,默认每秒备份一次。配置完成之后重启redis服务
重启的时候我们可以看到它发送了一个shutdown指令,之后窒息感save指令,这里在保存我们的rdb文件。
当我们执行一条写入操作时,会在目录下看到生成了aof文件。
5.2RDB和AOP的优缺点
5.3混合模式备份
redis4.0之后推出的。
6.redis同步机制
使用pipeline的好处
6.1主从同步原理
6.2全同步过程
6.3增量同步过程
6.4redis哨兵模式(Redis Sentinel)
6.5流言协议Gossip
7.redis的集群原理
顺时针存储key在最近的节点上,如ObjectB就存储在NodeB上
如下图,如果NodeC服务奔溃,我们的对象也会顺时针存储在下一台NodeD服务器上。
如下图,如果我们新增NodeX,对其他Node节点不会影响,只需要我们在Object重新定位到NodeX节点上。
Hash环的数据倾斜问题
引入虚拟节点解决数据倾斜的问题
8.总结
redis和Memcache
多路io复用
常用类型
海量数据筛选条件key
实现简单的分布式锁
实现异步队列
持久化:RDB,AOF,混合
AOF:redis主从,redis哨兵,redis集群。