作者:_妃妃教主 | 来源:互联网 | 2023-06-20 10:36
今天千锋广州Java小编就给大家分享一些就业面试宝典之分布式相关问题,一起来看看吧!1、存储方式Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。4、v
今天,前锋广爪哇边肖将与大家分享一些分布式的就业面试相关问题集锦。让我们来看看!
![](https://img6.php1.cn/3cdc5/9c7e/c5a/fa2803e115c06e52.png)
1.1有什么区别。Redis和Memcache?
1.存储模式Memecache将所有数据存储在内存中,断电后会挂起,数据不能超过内存大小。redis的一部分存在于硬盘上,Redis可以持久保存它的数据。
2.数据支持类型memcached所有值都是简单字符串。作为替代,redis支持更丰富的数据类型,并提供列表、集合、zset和hash等数据结构的存储。
3.使用不同的底层模型,它们与客户端通信的底层实现和应用协议是不同的。Redis直接自己搭建了VM机制,因为如果一般系统调用系统函数,会浪费一些时间去移动和请求。
4.取值不同:最大Redis可达1gbMemcache只有1mb。
5.redis比memcached快得多。
6.Redis支持数据备份,即主从模式的数据备份。
2.使用Redis有什么好处?
(1)速度快,因为数据存储在内存中。与HashMap类似,HashMap的优点是搜索和运算的时间复杂度为O(1)。
(2)支持丰富的数据类型,字符串、列表、集合、排序集合和哈希。
(3)支持事务,所有操作都是原子性的。所谓的原子性意味着对数据的所有更改要么被执行,要么不被执行。
(4)功能丰富:可用于缓存消息,按键设置到期时间,到期后自动删除。
3.什么是redis持久性?rdb和aof的比较?
持久性是将内存数据写入磁盘,以防止服务关闭时内存数据丢失。
比较:
1.aof文件比rdb更新更频繁,aof更适合恢复数据。
2.aof比rdb更安全、更大。
3.rdb比aof有更好的性能。
4.如果两者都配备了优先装载AOF
4.4的最佳场景是什么。Redis?
(1)会话缓存
使用Redis最常用的场景是会话缓存。使用Redis缓存会话相对于其他存储(如Memcached)的优势在于Redis提供了持久性。
(2)整页缓存(FPC)
除了基本的会话令牌,Redis还提供了一个非常简单的FPC平台。回到一致性问题,即使Redis实例重新启动,由于磁盘的持久性,用户也不会看到页面加载速度下降,这是一个很大的改进,类似于PHP本地FPC。
再次,以Magento为例,Magento提供了一个插件,使用Redis作为全页缓存后端。
另外,对于WordPress用户来说,Pantheon有一个非常好的插件wp-redis,可以帮助你尽快加载你访问过的页面。
(3)排队
REDIS在内存存储引擎领域的一大优势就是提供列表和集合操作,这使得Redis成为一个很好的消息队列平台。Redis作为队列的操作类似于列表上本地编程语言(如Python)的推/弹出操作。
(4)、排行榜/计数器
Redis在内存中增加或减少数字的操作实现得非常好。Set和Sorted Set也让我们执行这些操作变得非常简单。Redis只是提供了这两种数据结构。因此,我们需要从排序后的集合中获取前10名用户——我们称之为“user_scores”,我们只需要按如下方式执行即可:
(5)发布/订阅
最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅确实有很多使用场景。我见过人们在社交网络中使用它,它也可以作为基于发布/订阅的脚本触发器,甚至可以使用Redis的发布/订阅功能来构建聊天系统!
5.5.redis中神经羽毛的概念?
Redis集群没有使用一致哈希,而是引入了神经羽毛的概念。Redis集群有16384根神经羽毛。每个键通过CRC16检查和模16,384来决定放置哪个槽。集群的每个节点负责一部分哈希槽。
6.如何理解Redis事务?
事务是一个单独的隔离操作:事务中的所有命令都将被序列化并按顺序执行,并且事务在执行过程中不会被其他客户端发送的命令请求中断。事务是一个原子操作:事务中的所有命令要么执行,要么不执行。
7.7.redis的淘汰策略有哪些?
当达到内存限制并且客户端尝试执行将会使用更多内存的命令时(大多数写命令,但有DEL和少数例外),Noeviction:会返回一个错误。
Allkeys-lru:尝试回收最少使用的密钥(lru),以便为新添加的数据留出空间。
Volatile-lru:尝试回收最少使用的密钥(
LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
allkeys-random: 回收随机的键使得新添加的数据有空间存放。
volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。
volatile-ttl: 回收在过期集合的键,并且优先回收存活时间(TTL)较短的键,使得新添加的数据有空间存放。
8.redis有哪些数据结构?
String、List、Set、Zset(Sorted Set)、hash
9.redis 缓存穿透、缓存雪崩、缓存击穿?
缓存穿透:无效ID,在redis缓存中查不到,去查询DB,造成DB压力增大。
解决方法:
1、解决方法1:布隆过滤器,提供一个很大的Bit-Map,提供多个hash函数,分别对查询参数值【比如UUID】,进行求hash,然后分别对多个hash结果,在对应位置对比是否全为1或者某个位置为0,一旦有一个位置标识为0,表示本次查询UUID,不存在于缓存,再去查询DB.起到一个再过滤的效果。
2、解决方法2:把无效的ID,也在redis缓存起来,并设置一个很短的超时时间。
缓存雪崩:缓存同一时间批量失效,导致大量的访问直接访问DB
解决方法:
在做缓存时候,就做固定失效时间+随机时间段,保证所有的缓存不会同一时间失效
缓存击穿:在缓存失效的时候,会有高并发访问失效的缓存【热点数据】
解决方法:
最简单的解决方法,就是将热点数据设置永不超时!
第二个解决方法:对访问的Key加上互斥锁,请求的Key如果不存在,则加锁,去数据库取,新请求过来,如果相同KEy,则暂停10s再去缓存取值;如果Key不同,则直接去缓存取!
10.redis如何实现高并发?
redis通过一主多从,主节点负责写,从节点负责读,读写分离,从而实现高并发。