就我个人而言,我认为Redis的基本用途是我们应该拥有每个Java程序员。如果您需要面试,一些主要复制+Cache+Cache+Distribution+Redis群集,每个人都必须理解和掌握,但是我已经帮助了每个人都发现大型工厂的原始采访。我相信您已经阅读了这32次Redis访谈。对问题的解释将对Redis有更好的了解,对访调员的质疑更加方便。
大多数朋友知道,Redis的五种基本类型:
它还具有三种特殊类型的数据结构
解决方案:
REDIS支持mainstay的模型。原理:主将数据同步到从属,而从属将不会将数据同步到Master.Slave。Slave将在启动时将主连接到Master以同步数据。
这是一个典型的分布式读取和写作分离模型。我们可以使用主插入数据,从属提供检索服务。这可以有效地减少对单个计算机的并发访问的数量
通过增加从属数据库的数量,阅读的性能可以线性增加。为了避免主DB的单点失败,群集通常将两个主DB用作双基机热,因此整个群集的可读性为很高。读取和写作分离体系结构的缺点是,无论是主还是从属,每个节点都必须保存完整的数据。如果数据量很大,则群集的扩展容量仍然受单个节点的存储容量的限制。Write-Instriment Application不适合阅读和写作分离体系结构。
为了解决读取和写作分离模型的缺陷,可以应用数据碎片模型。
您可以看到成都是一个独立的主人,然后通过企业实现数据片。
结合上述两个模型,每个主人都可以设计为由一个主和多个从属组成的模型。
主人最好不要执行任何持久性,例如RDB内存快照和AOF日志文件
如果数据更重要,则从从设备打开AOF备份数据,并将策略设置为每秒同步
为了复制连接的速度和稳定性,主和从属在同一局部网络中最好
尽量避免以极大的压力在主图书馆上增加图书馆
RESP是Redis客户端和服务器使用的通信协议;RESS的特征:实现简单,快速的分析,良好的可读性
首先将setnx抓取锁战,抓取后,然后使用到期添加过期的时间以防止锁定忘记释放。*设置说明具有非常复杂的参数。这应该用于合成SETNX并同时到期!
REDIS是基于内存的操作。CPU不是Redis的瓶颈。REDIS的瓶颈最有可能是机器内存或网络带宽的大小。因为单线易于实现,并且CPU不会变成瓶颈,因此使用单个线程解决方案是合乎逻辑的(毕竟,毕竟,那里使用多线程将是很多麻烦!)。
under_memory:REDIS分配器(单元为字节)分配的内存总量(由字节),包括使用的虚拟内存(IE交换);REDIS分销商将在稍后引入。DUSE_MEMORY_HUMAN显示更友好。
under_memory_rss **:** redis进程占据了操作系统的内存(字节字节),这与顶部和ps命令看到的值一致;除了分配器分配的内存外,used_memory_rss还包括进程操作本身需要本身。MEMORY,内存片段等,但不包括虚拟内存。
mem_fragmentation_ratio **:**内存片段比率,此值是use_memory_rss / used_memory的比率。
mem_allocator **:编译期间指定了** redis使用的内存分配器;它可以是libc,jemalloc或tcmalloc,默认值为jemalloc;默认的Jemalloc在屏幕截图中使用。
作为数据库,数据是最重要的部分。该部分所占据的内存将在used_memory中计数。
该过程本身所需的主要过程是主过程本身的主要过程,必须占用内存,例如代码,恒定池等。内存的这一部分大约是几兆。与大多数生产环境中重新数据所占据的内存相比,可以忽略它。该内存的一部分不会由Jemalloc分配,因此不会在used_memory中计数。
CAPS内存缓冲器内存包括客户端缓冲区,复制积压缓冲区,AOF缓冲区等;其中,客户端缓冲区存储客户端连接的输入和输出缓冲区;复制积压缓冲区的部分复制功能;AOF缓冲区用于在进行AOF重写时执行,保存最近的写作命令。在了解相应的功能之前,您不需要知道这些缓冲区的详细信息;记忆的这一部分由Jemalloc分配,因此将在used_memory中计数。
内存片段是由Redis在分配和回收物理内存的过程中产生的。无法有效地使用REDIS,哪些形成内存片段。内存片段将不会在used_memory中计数。
无论哪种类型,Redis都不会直接存储,而是通过RedisObject对象存储。
(即,在空字符'0'末端的字符数组)由默认字符串表示,但使用sds.sds是简单动态字符串的缩写。
副本是高可用Redis的基础,并且在复制的基础上实现了前哨和群集。复制主要实现了数据的多机器备份,以及负载平衡和简单的失败恢复。DefterFefect:失败:失败:失败。恢复不能自动化;写作操作不能加载;存储容量受摊位的限制。
基于复制,前哨实现了自动故障恢复。已有:写作操作无法加载;存储容量受一台机器的限制。
当Redis内存数据集的大小提高到一定大小时,将实现数据消除策略。
## 24.什么是合适的方案?
(1)使用REDIS的最常用的会话缓存之一是会话缓存。redis缓存会话的优点比其他存储(例如Memcached)是Redis提供持久性。当维护并非严格必需的缓存时,用户的购物车信息丢失了,大多数人会感到不高兴。现在,情况是否如此?幸运的是,随着多年来Redis的改善,很容易找到如何适当使用Redis来缓存会话文档。即使众所周知的业务平台Magento也提供Redis Plug -ins。
(2)除了基本的会话令牌外,整页缓存(FPC)还提供了一个非常简单的FPC平台。返回一致性问题,即使REDIS实例重新启动,由于磁盘的耐用性,用户将看不到页面的加载速度下降。这是一个很好的改进,类似于PHP本地FPC.Taking Magento的例子,Magento提供了一个插件,可以将Redis用作完整的页面缓存后端。此外,对于WordPress的用户,Pantheon具有很好的插头- 在WP-REDIS中,可以帮助您加载页面,尽快浏览。
(3)存款引擎领域中队列REID的主要优势是提供列表和设置操作,该操作允许REDIS用作一个好消息队列平台。Redis用作队列的操作类似于推送/列表的流行操作(例如Python)。如果您快速在Google中搜索“ Redis队列”,则可以立即找到许多开源项目。这些项目的目的是使用Redis创建一个非常好的背部端工具来满足各种队列的需求。例如,芹菜具有将Redis用作经纪人的背景,您可以从此处查看。
(4)在内存中实现了排名/计数器重新,以增加或减少内存中的数量。分组集(集合)和排序集也使我们在执行这些操作时非常简单。REDIS仅提供这两个数据结构。因此,我们需要在分类集合中获得前10位用户 - 我们将其称为“ user_scores”,我们只需要如下执行它:当然,这是假设您基于基于的用户的分数,增加排序。如果要返回用户的分数,则需要这样执行:zrange user_scores 0 with scoresagora游戏是一个很好的例子。它由Ruby.Arrive实施。
(5)发布/订阅最后(但绝对不是最重要的)是Redis的发布/订阅函数。确实有很多情况使用版本/订阅。我已经看到人们在社交网络连接中使用,并且可以也可以根据发布/订阅用作脚本触发器,甚至使用Redis的发行/订阅功能来建立聊天系统!(不,这是真的,您可以验证)。
他们最多可以存储多少元素?从理论上讲,Redis可以处理多达232个键,并在实践中对其进行测试。每个实例至少存储至少2500万键。我们正在测试一些更大的值。任何列表,设置和排序集可以放置232个元素。换句话说,redis的存储限制是系统中可用的内存值。
(1)主人最好不要执行任何持久性,例如RDB内存快照和AOF日志文件(2),如果数据更重要,则某个从属将打开AOF备份数据,该策略设置为每秒同步(3)(3)对于主和庞大的复制速度和连接的稳定性,主和从从同一地区网络(4)尝试避免添加大压力库(5)来复制结构。链接的链结构更稳定,也就是说,主人<-slave1 <-slave2 <-slave3 ...这种结构很方便解决单点失败的问题,并实现奴隶的替换为主人。如果主人挂起,您可以立即使Slave1成为主人,而其他不变。
RDB持久方法可以以指定的时间间隔存储您的数据。AOF持久方法每次都会记录服务器的操作。当服务器重新启动时,将重新执行这些命令以还原原始数据。使用REDIS协议将AOF命令添加到文件末尾的文件末尾。
REDIS还可以重写AOF文件的背景,以使AOF文件的卷不大。如果您只希望在服务器运行时数据存在,则无法使用任何持久的方式。
您也可以同时打开两个持久方法。在这种情况下,当redis重新启动时,它将优先为AOF文件来还原原始数据,因为AOF文件保存的数据集比RDB文件更重要。保存的数据集应完成。最重要的是要了解RDB和AOF耐用性之间的区别,让我们从RDB持久性开始。
一般来说,如果您想实现与PostgreSQL相当的数据安全性,则应同时使用两个持久功能。如果您非常关心数据,但是您仍然可以在几分钟内承受数据丢失,然后,您只能使用RDB来持久。许多用户只使用AOF持续存在,但是不建议使用此方法:因为RDB快照(快照)定期生成数据库备份,并且恢复数据集的速度比速度更快。AOF恢复,除了加法外,使用RDB还可以避免前面提到的AOF程序的错误。
对于运行实例,可以通过Config Set命令修改许多配置选项,而无需执行任何形式的重新启动。从Redis 2.2开始,您可以从AOF切换到RDB的快照耐用性或其他方法,而无需重新启动REDIS。命令以获取更多信息。但是有时需要重新启动,例如将REDIS程序升级到新版本,或者当您需要修改当前配置命令不支持的配置参数时。
1.备忘录的所有值都是简单的字符串。作为替代品,REDIS支持更丰富的数据类型
2. Theredis的速度比Memcach的速度快得多
3.REDIS可以在其数据中坚持下去,可以在其数据中持续存在
有三个节点的a,b和c的群集,而无需复制模型,如果节点B失败,整个群集将认为5501-11000的范围不可用。