1.Redis 持久化方式有什么区别
RDB 优点,
(1).RDB是一个非常紧凑的文件,它保存了某个时间点的数据集,非常适用于数据的备份。
(2).RDB是一个紧凑的单一文件,非常适用于灾难恢复。
(3).RDB在保存RDB文件时父进程唯一需要做的就是复制出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他的IO操作,所以RDB持久化方式可以最大化Redis的性能。
(4).与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些
RDB的缺点
(1).如果你希望在Redis意外停止工作的情况下丢失的数据最少的话,那么RDB不适合,Redis要完整的保存整个数据集是一个比较繁重的工作
(2).RDB需要经常复制子进程来保存数据集到硬盘上,当数据集比较大的时候,复制的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求。
AOF优点
(1).使用AOF会让你的Redis更加持久:你可以使用不同的同步策略:无同步,每秒同步,每次写的时候同步。
(2).AOF文件是一个只进行追加的日志文件,所以不需要seek
(3).Redis 可以在AOF文件体积变得过大时,自动地在后台对AOF进行重写。
(4).AOF文件有序地保存了对数据库执行的所有写入操作,这些写入操作以Redis协议的格式保存,因此AOF文件的内容非常容易被人读懂,对文件进行分析也很轻松。
2.redis 过期时间如何实现
(1).惰性删除
(2).定期删除
3.memcache 与 redis 的区别都有哪些?
(1).redis 有丰富的数据类型
(2).内存管理机制不同,redis会将很久不用的值存在磁盘中。
(3).过期时间的处理不一样,redis是定期删除和惰性删除,memcache惰性删除
(4).redis支持持久化
(5).redis支持事物
(6).集群管理的不同
4.MySQL 有2000万条数据,如何查询热点数据
redis 提供6种数据淘汰策略:
(1).从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
(2).从已设置过期时间的数据集中挑选将要过期的数据进行淘汰。
(3).从已设置过期时间的数据集中任意选择数据淘汰
(4).从数据集中挑选最近最少的数据进行淘汰。
(5).从数据集中任选数据淘汰
(6).禁止淘汰数据
5.redis分布式锁
6.redis位操作
https://www.php.cn/faq/549445.html
7.应用场景
string :原子计数器;分布式锁;单点登录;数据缓存;秒杀场景中的库存管理;活跃度以及登录次数统计;
hash:键值对信息,如用户信息、文章信息;
list:访问频率限制;队列;优先级队列;分页;最新排行;
set:共同好友、二度好友;标签;统计访问网站的独立IP;数据排重;
zset:最新排行;最热排行;用户得分排行榜;网站最近的访问用户、活跃用户;
8.Redis 复制
优点:备份;容灾;读写分离;
建立复制方式:
(1)在redis.conf文件中配置slaveof<masterip><masterport>选项,然后指定该配置文件启动Redis生效
(2) 在redis-server启动命令后加上--saveof<masterip><masterport>启动生效
(3)直接在salveof<masterip><masterport>命令在从节点执行生效
复制方式
(1).全量复制
(2).增量复制
(3).无硬盘复制
Redis 故障修复
(1).从数据库崩溃
(2).主数据库崩溃 :在从数据库中使用 SLAVEOF NO ONE 将从数据库提升为主数据库继续使用,启动之前的主数据库,然后使用SLAVEOF 命令将其设置成主数据库的从数据库,即可将数据同步回来。
9.Redis哨兵
作用就是监控Redis的运行情况。主数据库发生故障时自动将从数据库转换为主数据库。
建立哨兵的方式:
redis-sentinel /path/to/sentinel.conf
redis-server /path/to/sentinel.conf -sentinel
Sentinel 配置:
sentinel monitor mymaster 127.0.0.1 6379 2 //mymaster表示哨兵监控的主数据库的名字 ,后两个参数表示主数据的地址和端口号,这里我们要监控的是主数据库6379 ,2 表示最低通过票数,当集群中有两个哨兵认为mymaster 挂掉时,才能真正认为该master已经不可用了。
sentinel down -after -milliseconds mymaster 60000 //表示每隔一段时间发送一次PING命令
哨兵工作的原理:
哨兵启动后,会定时执行下面三个操作:
每10秒哨兵会向主数据库和从数据库发送INFO命令,获取有没有新的从库
每2秒哨兵会向主数据库和从数据库的__sentinel__:hello频道发送自己的信息。获取有没有新的哨兵
每1秒哨兵会向主数据库、从数据库和其他哨兵节点发送PING命令,获取其他节点是否连接正常。
Redis 哨兵故障恢复
发现故障
哨兵选举:Raft算法,发现主数据库客观下线的哨兵节点(下面称作A),向每个哨兵节点发送命令,要求对方选自己成为领头哨兵,如果目标哨兵节点没有选过其他人,则会同意将A设置成领头哨兵,如果A发现有超过半数且超过quorum参数值的哨兵节点同意选自己成为领头哨兵,则A成功成为领头哨兵,当有多个哨兵节点同时参选领头哨兵,则会出现没有任何节点当选的可能。此时每一个参选节点将等待一个随机时间重新发起参选请求,进行下一轮选举,直到选举成功。
选择新主数据库:所有在线的从数据库中,选择优先级最高的从数据库。优先级可以通过slave-priority选项来设置,如果有多个最高优先级的从数据库,则复制的命令偏移量越大(即复制越完整越优先),如果以上条件都一样,则选择运行ID较小的从数据库。
恢复故障:首先领头哨兵将从停止服务的主数据库的从数据库中挑选一个来当新的主数据库,选出一个新的从数据库后,领头哨兵将向数据库发送SLAVEOF NO ONE 命令使其升格为主数据库。而后领头哨兵向其他从数据库发送SLAVE OF 命令来使其成为新主数据库的从数据库。最后一步则是更新内部的记录,将以停止服务的旧主数据库更新为新主数据库的从数据库,使得当其恢复服务时自动以从数据库的身份继续服务
10.Redis 集群
介绍:性能好,支持水平扩展、可用性高
Redis常用集群方案:
Codis 由豌豆荚2014年11月开源,基于GO和C开发。
Twemproxy:是一种代理分片机制,由Twitter开源。
优点:运营成本低,业务方不用关心后端Redis实例,跟操作Redis一样。代理的逻辑和存储的逻辑是隔离的
缺点:代理层多了一层转发,性能有所损耗。进行扩容/缩容的时候,部分数据可能会失效,需要手动进行迁移,对运维要求较高,而且难以做到平滑的扩缩容。出现故障不能自动转移,运维性很差升级复杂。
Redis-cluster:由微博、唯品会、去哪儿、阿里云 Redis一线工程师联合发起的非营利性技术组织。
优点:无中心节点,数据按照slot存储分布在多个Redis实例上,平滑的进行扩容缩容节点,自动故障转移,降低运维成本,提高了系统的可扩展性和高可用性
缺点:严重依赖外部Redis-Trib脚本,需要依赖Smart Client ,出故障转移节点的检测过慢,不如中心“Zookeeper”及时,Gossip消息的开销,无法根据统计区分冷热数据。
工作原理:在一个集群中,所有的键会被分配给16384个插槽,Redis将每个键名的有效部分使用CRC16算法计算出散列值,然后取对16384的余数。这样使得每个键都可以分配到16384个插槽中,进而分配的指定的一个节点中处理
11.Redis集群扩容与收缩
节点的增加:CLUSTER MEET ip port
ip和port是集群中任意一个节点的地址和端口号,B与A建立关系后,B会将节点A的信息通知给集群中的每一个节点
CLUSTER REPLICATE node_id 从数据库节点
以主数据库的形式运行,重新分配插槽,并且迁移数据
节点删除:需要重新分配插槽并且迁移数据,CLUSTER FORGET <node_id>从集群中移除node_id指定的节点
Redis脚本轻松迁移数据
Redis-trip.rb reshard 127.0.0.1:6380 (集群中任意一个节点的地址和端口)