作者个人研发在高并发场景下提供了一个简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。开源半年多以来,已成功为十几家中小企业提供精准定时调度解决方案,经受住了生产环境的考验。为了造福更多童鞋,这里提供一个开源框架地址:https://github.com/sunshinelyz/mykit-delay写在前面Redis作为分布式缓存的标配,在开发中被广泛使用分布式和微服务系统应用。但是很少有朋友会去了解Redis的虚拟内存。这不,有个哥们出去面试的时候被问到这个问题了。今天,我们就来说说Redis的虚拟内存。关于Redis与大多数NoSQL数据库一样,Redis也遵循Key/Value数据存储模型。但在某些情况下,Redis会将Keys/Values保存在内存中,以提高数据查询和数据修改的效率,但这种方式并不是最优的。我们可以进一步优化,尽量只在内存中保留Keys数据,这样可以保证数据检索的效率,而Values数据在很少使用的时候可以持久化到磁盘。在实际应用中,只有10%左右的Key是比较常用的key,这样Redis可以通过虚拟内存将剩下的不常用的Key和Values持久化到磁盘,一旦这些持久化的Key或Values需要被读取时,Redis会再次把它读回主存。应用场景对于大多数数据库来说,理想的运行方式是将所有数据加载到内存中,后续的查询操作完全基于内存数据即可完成。但是现实中这样的场景并不多,更多的时候只能将部分数据加载到内存中。在Redis中,有一个很重要的概念就是key一般是不交换的,所以如果你的数据库中有大量的key,每个key只关联一个很小的值,那么这种场景不太适合使用Virtual记忆。如果相反,数据库只包含少量的键,但是每个键关联的值都非常大,那么这种场景就非常适合使用虚拟内存。在实际应用中,为了让虚拟内存更充分的发挥作用,帮助我们提高系统的运行效率,我们可以将很多值较小的Key合并成少量值较大的Key。最主要的方法就是将原来的Key/Value模式改为Hash-based模式,这样很多原来的Key就可以成为Hash中的属性。配置Redis虚拟内存(1)在配置文件中添加如下配置项,使当前Redis服务器在启动时开启虚拟内存功能。vm-enabledyes(2)在配置文件中设置Redis可用的虚拟内存的最大字节数。如果内存中的数据大于该值,则将部分对象持久化到磁盘,并释放该持久化对象占用的内存,直到已用内存小于该值才停止持久化。vm-max-memory(bytes)Redis的交换规则是尽量考虑“最老”的数据,即最久未被使用的数据会被持久化。如果两个对象的age相同,则先持久化Value大的数据。需要注意的是,Redis不会将Keys持久化到磁盘,所以如果只是keys的数据已经填满了整个虚拟内存,那么这种数据模型将不适合使用虚拟内存机制,或者将value设置的大一些以适应整个Keys的数据。在实际应用中,如果考虑使用Redis的虚拟内存,应该尽可能多的分配内存给Redis,避免频繁持久化数据到磁盘。(3)在配置文件中设置页数和每页占用的字节数。为了将数据从内存传输到磁盘,我们需要使用交换文件。这些文件与数据持久化无关,Redis在退出前会将其全部删除。由于对交换文件的访问多为随机访问,建议将交换文件存储在固态硬盘上,这样可以大大提高系统的运行效率。vm-pages134217728vm-page-size32在上面的配置中,Redis将需要持久化的文件分成了vm-pages页,每页占用的字节为vm-page-size,那么Redis最终可以交换的文件大小为:vm-pages*vm-page-size。由于一个值??可以存储在一个或多个页面上,但是一个页面不能容纳多个值,鉴于此,我们在设置vm-page-size时需要充分考虑Redis的这一特性。(4)Redis配置文件中有一个非常重要的配置参数,即:vm-max-threads4该参数表示Redis在对swap文件进行IO操作时申请的最大线程数。一般来说,我们建议此值等于主机的CPU核心数。如果该值设置为0,则Redis将在与交换文件交互时同步执行此操作。Redis同步数据对于Redis来说,如果交换文件的操作是以同步的方式进行的,那么当一个客户端正在访问交换文件中的数据时,如果其他客户端试图访问交换文件中的数据,则该客户端的请求最后的操作会被暂停,直到前面的操作完成。尤其是在相对较慢或繁忙的磁盘上读取大数据值时,这种阻塞的影响更为突兀。但是,同步操作并非无用。其实从全局的执行效率来看,同步方式要优于异步方式。毕竟同步方式省去了线程切换、线程间同步、线程拉起操作的额外开销。特别是当大部分频繁使用的数据可以直接从主存中读取时,同步方式的性能会更好。至于最终选择哪种配置方式,最好的办法就是不断地试验和调优。本文转载自微信公众号“冰河科技”,可通过以下二维码关注。转载本文请联系冰川科技公众号。
