首页 > 编程知识 正文

java面试redis(redis集群面试)

时间:2023-05-03 21:55:50 阅读:92452 作者:2918

1 .什么是1.Redis?

Redis本质上是一种密钥值类型的存储器数据库,类似于memcached。 将整个数据库加载到内存中进行操作,定期通过异步操作将数据库数据闪存到硬盘中进行保存。

由于纯粹的内存操作,Redis的性能非常好,每秒可以处理10万次以上的读写操作,是众所周知性能最高的Key-Value DB。

Redis的优点不仅仅是性能。 Redis最大的吸引力是支持存储多个数据结构。 另外,单个值的最大限制为1GB,像memcached一样只能存储1MB的数据,因此Redis可以用于实现许多有用的功能。

例如,可以用他的List制作FIFO双向链表,实现轻量高性能的消息队列服务,或者用他的Set制作高性能的tag系统。

2.Redis与memcached相比有什么好处?

memcached所有的值都是简单的字符串,redis作为其替代物,支持更丰富的数据类型

redis的速度比memcached快得多

redis可以使其数据持续化

3.Redis有哪些数据处置战略?

Redis有什么样的数据处置战略? 有noeviction、allkeys-lru、allkeys-random、volatile-random、volatile-ttl五种淘汰战略,分别介绍一下。

noeviction:在客户端尝试执行使用更多内存的命令时,会返回错误(某些写入命令、DEL和某些例外情况除外)。

allkeys-lru:正在重新使用最不常用的密钥(LRU ),以腾出空间存储新添加的数据。

volatile-lru:尝试重用最不常用的密钥(LRU ),但由于仅限于过期集合的密钥,因此有空间存储新添加的数据。

allkeys-random:重复使用随机密钥,从而腾出空间存储新添加的数据。

volatile-random:重复使用随机密钥,从而有空间存储新添加的数据,但仅限于过期集合的密钥。

volatile-ttl:重复使用过期集合中的密钥,优先重复使用生存时间(TTL )较短的密钥,从而为存储新添加的数据提供空间

4.Redis的所有数据存储在内存中的理由是什么?

Redis将所有数据读取到内存中以实现最大的读写速度,然后异步写入磁盘。

所以redis具有快速、数据持久化的特点。 如果不将数据放入内存中,磁盘I/O速度会严重影响redis的性能。 在内存越来越便宜的今天,redis越来越受欢迎。 如果设置了最大使用内存,则在数据的现有记录数达到内存限制值后,无法继续插入新值。

5.Redis适合在什么样的场景下使用?

会话缓存(会话缓存) )

最常用的Redis场景之一是“会话缓存”(session cache )。 与其他存储(如Mem cached )相比,Redis缓存会话具有:Redis提供持久性的优点。 在维护不严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大多数人都会不高兴,但现在仍然是这样吗?

幸运的是,Redis在这几年的改进使我们能够轻松地找到如何正确使用Redis来缓存会话的文档。 就连众所周知的商业平台Magento也提供了Redis的插件。

所有页面缓存(FPC ) )。

除了基本的会话token外,Redis还提供了简单的FPC平台。 回到一致性问题,如果重新启动Redis实例,用户将看不到页面加载速度减慢,因为磁盘是永久的。 这是一个很大的改进,就像PHP本地FPC一样。

再以Magento为例,Magento提供了一个将Redis用作全页面缓存后端的插件。

另外,对于WordPress用户来说,Pantheon有一个非常好的插件wp redis,这个插件可以帮助你以最快的速度加载所浏览的页面。

队列

Reids在内存存储引擎领域的一大优点是提供了list和set操作。 这样,Redis就可以作为一个优秀的消息队列平台。 Redis用作队列的操作类似于本机程序语言(如Python )对list的推送/pop操作。

在谷歌上快速搜索“Redis queues”,很快就能找到大量的开源项目。 这些项目的目的是利用Redis来创建非常好的后端工具以满足不同的队列需求。 例如,Celery有一个后台,它使用Redis作为中介者。 可以从这里看到。

排名/计数器

Redis经常实现在内存中递增或递减数字的操作。 集合(Set )和有序集合) Sorted Set )在执行这些操作时也变得非常简单。 Redis只是提供这个

两种数据结构。 因此,从排序集合中获取前10名用户。 将其称为“user_scores '”,只需按如下方式执行,即可生成:

当然,这假设你在根据用户分数进行升序排序。 如果想返回用户和用户的分数,就必须这样运行:

zrangeuserscores 010 withscoresagoragames就是一个很好的例子,用Ruby实现。 那个排行榜用Redis来保存数据。 可以在这里看到。

⑤发布/订阅

最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!

6.Redis集群方案哪些方案?

①codis

目前用的最多的集群方案,基本和twemproxy-致的效果,但它支持在节点数量改变情况下,旧节点数据可恢复到新hash节点。

②redis

cluster3.0自带的集群,特点在于他的分布式算法不是一致性hash,而是hash槽的概念,以及自身支持节点设置从节点。具体看官方文档介绍。

③在业务代码层实现

起几个毫无关联的redis实例,在代码层,对key进行hash计算,然后去对应的redis实例操作数据。这种方式对hash层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的自动脚本恢复,实例的监控,等等。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。