Redis的一些基本知识

1. 什么是redis:

Redis是以键值对存储数据的NoSQL数据库

2. redis的优势:

整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush 到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作

3. redis的五种数据类型:

string字符串、hash散列、set集合、zset有序集合、list列表

4. 什么是redis持久化

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失
redis提供了两种持久化解决方法 Rdb Aof
Rdb存储
1、 在配置文件我们默认Rdb是默认的持久化方式
2、 默认的文件名称 dump.rdb
3、 rdb保存机制
 15分钟 修改过1次
5分钟 修改过10次
1分钟 修改过1万次
 4、如果数据重要的话就用aof方式,他是实时进行存储的,所以他更安全,但效率比较低

5、rdb方案的数据存储过程

Redis使用fork函数复制一份当前进程(父进程)的副本(子进程);
父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入到硬盘中的临时文件;当子进程写入完所有数据后会用该临时文件替换旧的RDB文件。

6、Rdb问题
 1、一旦redis非法关闭,当数据不符合快照条件时,数据会丢失
 2、如果数据不重要,则不必要关心。
 3、如果数据不能允许丢失,那么要使用aof方式。

解决方案—手动快照:
可以通过SAVE和BGSAVE命令来手动快照,两个命令的区别是前者是由主程进行快照,会阻塞其他请求,后者是通过fork子进程快照操作。

5. redis主从复制:

主从复制就是为了避免单点故障 ,构建读写分离架构,满足读多写少的应用场景主要有 主从复制 主从从复制 目前后者是更好的一种解决方案,设置主从的操作有两种,在redis.conf中配置 主机slaveof,还有就是直接通过slaveof这种临时行为主从复制 主机进行写操作 从机进行读操做 且只能进行读操作

到该从机中

6. 哨兵:

1、什么是哨兵 :
它是一个独立的进程,主要作用是对Redis的系统的运行监控
2、哨兵主要功能:
监控主数据库和从数据库是否运行正常;
主数据出现故障后自动将从数据库转化为主数据库
3、从机宕机
从机宕机,哨兵会监控到,并输出日志,
从机之间通过PINGPANG机制半数以上也可以判断出该从机宕机,因此不再同步数据
4、主机宕机
哨兵监测到主机宕机(6379),会尝试恢复故障
投票选举哨兵的leader
leader选中一个从机(6381),向从机发送 slave of no one 指令,断开主从连接,
将6381升级为master,设置其他从库6380设置为6381的从库
 当6379故障恢复重新启动,
 将设置为新master6381的从库,同步主库的数据,替换原来的rdb文件

7. 什么是redis集群:

redis3.0 之后出现了集群,每个节点并不是存储所有的数据的,这样会出现木桶效应;我们采取优化策略是将16384个哈希槽均匀的分布在各个节点中,比如 有3个节点那么 0-5000的哈希槽分布在1节点 5000-10000分布在2节点,其余的分布在3节点那么存放的数据如何存入到指定节点中呢?我们需要将存入的key进行crc16算法计算出结果,该结果在与16383求余,最终值一定会得到一个0-16383的值,该值假设是1500,则该数据将被存入节点1;

8. Redis集群方案什么情况下会导致整个集群不可用?

有A,B,C三个节点的集群,在没有复制模型的情况下,如果节点B失败了,那么整个集群就会以为缺少5501-11000这个范围的槽而不可用。

9. 如何保证redis中的数据都是热点数据?

Redis内存中数据集大小上升到一定大小的时候,就会实行数据淘汰策略

10. reids是多线程还是单线程的?

	单线程的

11. 为啥用单线程?

因为redis性能很好,它是靠缓存运行的,单线程就可以处理所有并发,不需要使用多线程。

12. 可以用多线程吗?

不可以,我从网上看了些资料,因为它不是速度很快,不需要设置多线程。Redis的事物。redis事务保证了一组指令在操作时,不被其他操作打断,他的所有命令都会序列化、按顺序执行。

13. redis事务的指令

     multi  :表示事务的开始
     exec  :表示事务的执行
事务的异常
    异常1  可能是内存不够,事务被放弃执行
    异常2  语法出现错误,redis可以对语法错误进行检测,显示错误信息的
    异常3   如果事务中有部分指令是正确,有部分指令执行后出现错误,redis不会执行回滚操作

14. redis的穿击

一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。
解决方案: 对第一个查询redis没有并且数据库也没有的key,在redis中设置次key的空值的数据,即可解决

15. Redis雪崩

当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。
如何避免?
1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
2:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值