上有一篇介绍Redis的文章,由浅入深地讲解了Redis:http://blog.mjrusso.com/2010/10/17/redis-from-the-ground-up.html。强烈建议对Redis有兴趣或需要使用的朋友阅读这篇文章。
提到Redis,第一反应就是内存k/v缓存,并且很多人会拿它与Memcached相比较,毕竟他们都是以内存作为存储介质的。 如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:
1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
2 Redis支持数据的备份,即master-slave模式的数据备份。
3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
抛开这些,可以深入到Redis内部构造去观察更加本质的区别,理解Redis的设计。我觉得最值得参考的就是Redis的内存模型设计。推荐参考这两篇文章:Redis Virtual Memory: the Story and the Code和Redis Virtual Memory subsystem。
在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别(我个人是这么认为的)。Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改。
可以参考使用Redis特有内存模型前后的情况对比:
VM off: 300k keys, 4096 bytes values: 1.3G used
VM on: 300k keys, 4096 bytes values: 73M used
VM off: 1 million keys, 256 bytes values: 430.12M used
VM on: 1 million keys, 256 bytes values: 160.09M used
VM on: 1 million keys, values as large as you want, still: 160.09M used
当从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。
如果希望在海量数据的环境中使用好Redis,我相信理解Redis的内存设计和阻塞的情况是不可缺少的:)
更多关于NoSQL的文章可以参考:http://www.cnblogs.com/gpcuster/tag/NoSQL/
分享到:
相关推荐
Redis是一种开源、高性能的键值对存储系统,广泛应用于缓存、数据库和消息中间件等场景。本资源提供了Redis在Windows平台上的64位版本,包括`.msi`安装包和`.zip`压缩文件。 首先,`.msi`文件是Windows Installer的...
在深入探讨Redis之前,我们先了解下Redis的基本特性。 1. **数据类型**: Redis支持五大数据类型:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),这些类型为各种应用场景提供了丰富的...
redis-stack-server-7.2.0-v9.arm64.snap redis-stack-server-7.2.0-v9.bionic.arm64.tar.gz redis-stack-server-7.2.0-v9.bionic.x86_64.tar.gz redis-stack-server-7.2.0-v9.bullseye.x86_64.tar.gz redis-stack-...
Redis安装包,Redis-x64-3.0.504 windows版安装包
启动了redis,但是只要一关闭cmd窗口,redis就会消失。所以要把redis设置成windows下的服务。,这样就不用每次都去手动启动了,以后可以直接使用,脚本如下 redis-serviceinstall .cmd安装成服务脚本(redis设置成...
Redis在windows下安装过程 1.设置服务命令 redis-server --service-install redis.windows-service.conf --loglevel verbose 2 常用的redis服务命令。 卸载服务:redis-server --service-uninstall 开启服务:redis...
Redis是一种高性能的键值对数据存储系统,常用于数据库、缓存和消息中间件等场景。Redis支持多种数据结构,如字符串、哈希、列表、集合、有序集合,以及更复杂的Geo空间索引等,使其在许多应用中具有广泛的应用性。 ...
**Redis2-NGINX-Module 0.15 知识详解** Redis2-NGINX-Module 是一个用于 NGINX Web 服务器的扩展模块,它允许开发者将 NGINX 与 Redis 数据库集成,实现高效的数据缓存和交互。这个版本是 0.15,它提供了一系列...
Redis是一种高性能的键值对数据存储系统,常用于缓存、数据库和消息中间件等场景。这个名为"Redis-x64-5.0.14.1"的压缩包是Redis针对Windows操作系统的64位版本,版本号为5.0.14.1。在Windows上运行Redis可能与Linux...
解压这个文件后,你可以找到Redis服务器的所有组件,包括`redis-server.exe`(主服务进程)、`redis-cli.exe`(命令行客户端)、`redis-benchmark.exe`(性能测试工具)和`redis-check-dump.exe`等实用工具。...
**Redis 全面检查工具:redis-full-check** Redis 是一款高性能的键值存储系统,广泛应用于缓存、数据库和消息...同时,通过对检查结果的深入分析,可以优化 Redis 的配置和架构,进一步提高系统的性能和稳定性。
tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-...
首先,我们来深入了解Redis的核心特性: 1. **键值存储**:Redis以键值对的形式存储数据,键是唯一的标识,值可以是字符串、列表、集合、有序集合或哈希表等多种数据结构,这使得Redis适用于多种场景。 2. **高...
在本文中,我们将深入探讨Redis的主要特性和功能,以及如何安装和使用这个版本。 1. **Redis的数据类型**: - 字符串(Strings):最基础的数据类型,可以存储文本或二进制数据。 - 哈希(Hashes):用于存储键值对...
本文将深入探讨Redis的基本概念、功能特性、安装与配置,以及在Windows平台上的使用方法。 Redis的核心概念包括键(key)、值(value)和数据类型。键是用于标识存储内容的唯一标识符,值则是键所关联的数据。Redis...
Redis-x64-3.0.504安装包是一个针对64位操作系统的Redis数据库服务器的安装程序。Redis是一款高性能、开源、基于键值对的数据存储系统,广泛应用于缓存、数据库、消息中间件等多个场景。这个版本是3.0.504,代表着在...
Redis 是一个开源的、高性能的键值存储系统,常被用作数据库、缓存和消息代理。这个压缩包“Redis-x64-5.0.14.1.msi”显然是 Redis 的 Windows 64 位版本的安装程序,版本号为 5.0.14。下面将详细介绍 Redis 的核心...
Redis-x64-5.0.14.1 Windows版