Java八股文之redis系列

Redis数据库的优缺点?

1.读写性能非常好。
2.支持数据的持久化,有AOF和RDB两种数据持久化方式。
3.支持事务。
4.数据结构和数据类型都很丰富。
5.支持主从复制。

Redis为什么常常用作缓存?

缓存的定义就是指比起一般的向存储器里面读取数据,速度会快一些,redis本来就存在与内存中,所以他的速度相对于会比较快。

Redis是单线程还是多线程?为什么redis这么快?

redis是单线程的。
redis的瓶颈在于网络和内存,redis6.0之后引入多线程是为了解决网络io读写这个瓶颈,执行命令还是单线程的,不存在线程安全问题。
redis这么快的原因:
1.redis是基于内存的,所以他的速度相对较快。
2.redis的数据结构很简单。
3.redis是单线程的,避免了频繁的上下文切换带来的资源消耗,也避免了死锁问题。
4.使用多路IO复用技术。

redis的数据类型有哪些?

常见的redis数据类型有:String,Hash,Set,Zset,List。
比较不常见的有:bitmap,Hyperloglog,geospatial。

Redis数据结构有哪些?

redis数据结构有:简单动态字符串,链表,字典,跳跃表,整数集合,压缩列表等。

Redis应用场景有哪些?

1.缓存,redis基于内存,读写速度非常快,并且有过期键删除策略,常用来作为缓存。
2.分布式锁,redis中的setnx功能来设置分布式锁。

redis是单线程的,如何提高它的利用率?

可以在一台服务器上部署多个redis实例,把他们当作不同的服务器来使用。

过期键的删除策略

1.惰性删除。
2.定时删除。
3.定期删除。

Redis中的内存淘汰机制

1.volatile-lru
2.volatile-ttl
3.volatile-random
4.allkeys-lru
5.allkeys-random
6.noeviction
7.volatile-lfu
8.allkeys-lfu

Redis持久化机制

redis持久化机制有rdb和aof两种。

RDB

rdb是redis默认的持久化方式,按照一定的时间间隔将内存的数据以快照的形式保存到硬盘,恢复时,将快照读取到内存中。RDB持久化实际操作过程是fork一个子进程,先将数据集写入临时文件,再将临时文件替换之前的文件,用二进制压缩存储。

优点

1.适用于大规模的数据恢复,启动效率更高。
2.只有一个文件dump.rdb,方便持久化。
3.性能最大化,在开始持久化之前,他需要做的只是fork出子进程,之后再由这些子进程完成持久化操作,这样就可以极大避免服务进程执行IO操作。

缺点

1.数据安全性低,因为rdb是在一定的时间间隔内完成数据备份操作,假设在这一短时间内,redis宕机,就会导致数据丢失。
2.由于rdb是fork子进程来完成持久化操作的,因此当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1s。

AOF

AOF持久化以日志的形式记录服务器所处理的每一个写,删除操作,查询操作不会记录。以文本的方式记录,打开文本就可以看到完整的记录过程。

优点

1.具备更高的安全性,Redis提供了三种持久化策略,分别是每秒同步,每修改同步和不同步。每秒同步最多会丢失一秒钟的数据,每修改同步不会丢失数据 。
2.该日志对文件的操作采用的是append模式,因此在写入过程中,即使出现宕机也不会破坏日志中原有的文件。
3.AOF包含一个格式清晰,易于理解的日志文件用于记录所有的修改操作,可以通过该文件完成日志的重建。

缺点

1.对于同样数量的数据集,AOF文件常常大于RDB文件。RDB在恢复大数据集时,速度比AOF速度快。
2.根据AOF选择策略的不同,效率也不同,但AOF在运行效率上往往会慢于RDB。

Redis事务

什么是redis的事务?

Redis事务是一个单独的隔离操作,事务中的命令都会序列化,按顺序地执行。事务在执行的过程中,不会被其他客户端发来的命令请求所打断,所以redis事务是在一个队列中,一次性,顺序性,排他性地执行一系列命令。
redis事务地主要任务就是串联多个命令防止别的命令插队。

redis事务地相关命令

1.DISCARD:命令取消事务,放弃执行事务队列内所有命令,恢复连接为非(transaction)模式。
2.EXEC:执行事务队列内的所有命令。
3.MULTI:用于标记一个事务块的开始。
4.UNWATCH
5.WATCH

Redis事务的特性

1.redis事务不保证原子性。
2.redis事务的执行是隔离性的,但是没有隔离级别。
3.redis事务不支持回滚。

Redis事务为什么不支持回滚?

1.Redis命令只在两种情况下失败
1.编写的redis语句有语法错误,
2.要执行的key,数据类型不匹配。
因为不需要回滚,redis内部实现简单且高效。

Redis的集群,主从,哨兵。

redis单机版的缺点:
1.不能保证数据的可靠性,redis部署在一台服务器上,一旦服务器宕机,服务就不可用。
2.性能瓶颈,内存容量有限,处理能力有限。

redis集群的实现方案:

1.redis主从。
2.redis哨兵。
3.redis自研。
4.redis cluster。

redis主从模式

优点:
1.高可靠性,如果master节点宕机,可以切换相应的从节点为主节点。
2.读写分离,slave节点可以分担读的压力,特别是面对大并发的读请求时。
缺点:
1.不具备自动恢复和容错能力,主节点故障,从节点需要手动升为主节点,可用性较低。

redis哨兵模式

redis哨兵模式的作用

1.监控所有服务器是否正常运行:通过发送命令返回监控服务器的运行状态,处理监控主服务器,从服务器外,哨兵之间也相互监控。
2.故障切换:当哨兵检测到master宕机,会自动将slave升为master,然后通过发布订阅通知其他的slave,修改配置文件,让他们切换master。同时原来那个有故障的master也只会称为slave。

优点

1.具备自动容错和恢复能力,不需要手动地将slave节点切换为master节点。

缺点

1.浪费资源,集群里所有节点保存地都是全量数据,数据量过大时,主从同步会严重影响性能。
2.只有一个master执行写请求,写操作会单机瓶颈性能影响。
3.redis主机宕机之后,在选举出新的master节点之前,谁也不知道谁是主机,谁是从机,此时redis会开启保护机制,禁止写操作,直到新的master节点选取出来。

Redis主从架构中,数据会丢失嘛?

redis主从架构数据丢失的两种情况:
1.异步复制同步丢失。
2.集群发生脑裂时,数据丢失。

Redis分布式锁

什么是分布式锁?

在分布式场景下,对共享资源的访问,在同一时刻,只能被一个锁占有。

分布式锁的特性:

1.互斥性:在任意时刻,同一条数据,只能被一台机器上的一个线程访问
2.高可用性:当部分节点宕机后,客户端仍然能够正常的获取锁和释放锁。
3.独占性:加锁和解锁必须由同一个服务器来完成,不能在一个线程上加锁,在另一个线程上解锁。
4.防锁超时:如果客户端没有主动释放锁,那么服务器会在一定的时间后自动释放锁。

分布式锁有效性和安全性的要求

1.互斥性:在任意时刻,只有一个客户端可以持有一个锁。
2.释放死锁,即使被锁定的客户端崩溃或者分区,仍然可以释放锁。
3.容错性:只要大部分节点都在运行,客户端就能获取和释放锁。

RedLock算法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值