- 浏览: 1012317 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
1. Redis是什么 这个问题的结果影响了我们怎么用Redis。如果你认为Redis是一个key value store, 那可能会用它来代替MySQL;如果认为它是一个可以持久化的cache, 可能只是它保存一些频繁访问的临时数据。Redis是REmote DIctionary Server的缩写,在Redis在官方网站的的副标题是A persistent key-value database with built-in net interface written in ANSI-C for Posix systems,这个定义偏向key value store。还有一些看法则认为Redis是一个memory database,因为它的高性能都是基于内存操作的基础。另外一些人则认为Redis是一个data structure server,因为Redis支持复杂的数据特性,比如List, Set等。对Redis的作用的不同解读决定了你对Redis的使用方式。 互联网数据目前基本使用两种方式来存储,关系数据库或者key value。但是这些互联网业务本身并不属于这两种数据类型,比如用户在社会化平台中的关系,它是一个list,如果要用关系数据库存储就需要转换成一种多行记录的形式,这种形式存在很多冗余数据,每一行需要存储一些重复信息。如果用key value存储则修改和删除比较麻烦,需要将全部数据读出再写入。Redis在内存中设计了各种数据类型,让业务能够高速原子的访问这些数据结构,并且不需要关心持久存储的问题,从架构上解决了前面两种存储需要走一些弯路的问题。 很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快。但是测试结果基本是Redis占绝对优势。一直在思考这个原因,目前想到的原因有这几方面。 Redis的数据全部放在内存带来了高速的性能,但是也带来一些不合理之处。比如一个中型网站有100万注册用户,如果这些资料要用Redis来存储,内存的容量必须能够容纳这100万用户。但是业务实际情况是100万用户只有5万活跃用户,1周来访问过1次的也只有15万用户,因此全部100万用户的数据都放在内存有不合理之处,RAM需要为冷数据买单。 这跟操作系统非常相似,操作系统所有应用访问的数据都在内存,但是如果物理内存容纳不下新的数据,操作系统会智能将部分长期没有访问的数据交换到磁盘,为新的应用留出空间。现代操作系统给应用提供的并不是物理内存,而是虚拟内存(Virtual Memory)的概念。 基于相同的考虑,Redis 2.0也增加了VM特性。让Redis数据容量突破了物理内存的限制。并实现了数据冷热分离。 Redis的VM依照之前的epoll实现思路依旧是自己实现。但是在前面操作系统的介绍提到OS也可以自动帮程序实现冷热数据分离,Redis只需要OS申请一块大内存,OS会自动将热数据放入物理内存,冷数据交换到硬盘,另外一个知名的“理解了现代操作系统(3)”的Varnish就是这样实现,也取得了非常成功的效果。 作者antirez在解释为什么要自己实现VM中提到几个原因(6)。主要OS的VM换入换出是基于Page概念,比如OS VM1个Page是4K, 4K中只要还有一个元素即使只有1个字节被访问,这个页也不会被SWAP, 换入也同样道理,读到一个字节可能会换入4K无用的内存。而Redis自己实现则可以达到控制换入的粒度。另外访问操作系统SWAP内存区域时block进程,也是导致Redis要自己实现VM原因之一。 作为一个key value存在,很多开发者自然的使用set/get方式来使用Redis,实际上这并不是最优化的使用方法。尤其在未启用VM情况下,Redis全部数据需要放入内存,节约内存尤其重要。 假如一个key-value单元需要最小占用512字节,即使只存一个字节也占了512字节。这时候就有一个设计模式,可以把key复用,几个key-value放入一个key中,value再作为一个set存入,这样同样512字节就会存放10-100倍的容量。 这就是为了节约内存,建议使用hashset而不是set/get的方式来使用Redis,详细方法见参考文献(7)。 Redis有两种存储方式,默认是snapshot方式,实现方法是定时将内存的快照(snapshot)持久化到硬盘,这种方法缺点是持久化之后如果出现crash则会丢失一段数据。因此在完美主义者的推动下作者增加了aof方式。aof即append only mode,在写入内存数据的同时将操作命令保存到日志文件,在一个并发更改上万的系统中,命令日志是一个非常庞大的数据,管理维护成本非常高,恢复重建时间会非常长,这样导致失去aof高可用性本意。另外更重要的是Redis是一个内存数据结构模型,所有的优势都是建立在对内存复杂数据结构高效的原子操作上,这样就看出aof是一个非常不协调的部分。 其实aof目的主要是数据可靠性及高可用性,在Redis中有另外一种方法来达到目的:Replication。由于Redis的高性能,复制基本没有延迟。这样达到了防止单点故障及实现了高可用。 要想成功使用一种产品,我们需要深入了解它的特性。Redis性能突出,如果能够熟练的驾驭,对国内很多大型应用具有很大帮助。希望更多同行加入到Redis使用及代码研究行列。
2. Redis不可能比Memcache快
Libevent。和Memcached不同,Redis并没有选择libevent。Libevent为了迎合通用性造成代码庞大(目前Redis代码还不到libevent的1/3)及牺牲了在特定平台的不少性能。Redis用libevent中两个文件修改实现了自己的epoll event loop(4)。业界不少开发者也建议Redis使用另外一个libevent高性能替代libev,但是作者还是坚持Redis应该小巧并去依赖的思路。一个印象深刻的细节是编译Redis之前并不需要执行./configure。
CAS问题。CAS是Memcached中比较方便的一种防止竞争修改资源的方法。CAS实现需要为每个cache key设置一个隐藏的cas token,cas相当value版本号,每次set会token需要递增,因此带来CPU和内存的双重开销,虽然这些开销很小,但是到单机10G+ cache以及QPS上万之后这些开销就会给双方相对带来一些细微性能差别(5)。
3. 单台Redis的存放数据必须比物理内存小
4. Redis的VM实现是重复造轮子
5. 用get/set方式使用Redis
6. 使用aof代替snapshot
小结
发表评论
-
Redis入门教程
2011-07-12 22:08 2160入门教程,仅供菜鸟。 ... -
redis-sharding – 一个 Redis Proxy【转】
2011-04-28 01:43 1649redis-sharding 是一个由perl写的 Redis ... -
redis 运维实际经验纪录之一【转】
2011-04-26 11:30 1183发表于 2010/05/25 由 ... -
1,250,000,000 Key/Value Pairs in Redis 2.0.0-rc3 on a 32GB Machine【转】
2011-04-26 11:28 911Posted on July 25, 20 ... -
200,000,000 Keys in Redis 2.0.0-rc3【转】
2011-04-26 11:27 978Posted on July 24, 20 ... -
Redis配置文件各项参数说明【转】
2011-04-26 11:00 1624最近一个项目用到Redis ... -
Redis配置主从服务器【转】
2011-04-26 10:31 1273redis配置主从服务器 R ... -
More Redis internals: Tracing a GET & SET【转】
2011-04-26 10:09 1864In my previous article , I too ... -
深入Redis内部-Redis 源码讲解【转】
2011-04-26 10:08 607Redis 作为 NoSQL 数据库的杰出代表,一直广受关注, ... -
redis安装配置及使用【转】
2011-04-26 09:03 15702011-03-27 20:41 http://cod ... -
Redis安装配置【转】
2011-04-26 09:02 2045http://bbs.linuxtone.org/thread ... -
闲聊Redis【转】
2011-04-26 09:00 1157Redis 是一个有趣 的项目,与其把它说成键值存储、键 ... -
redis知识点整理【转】
2011-04-25 22:40 1071xmind做的笔记,可惜只能截图 关键字: ... -
jedis线程池的代码【转】
2011-04-25 22:36 2804备忘:(本机i5的测试数据:redis线程执行时间是:2118 ... -
在多台服务器上简单实现Redis的数据主从复制【转】
2011-04-25 22:27 1217Redis的主从复制功能非常强大,一个mas ter可以拥有 ... -
归档Redis在Windows,linux平台下的安装配置【转】
2011-04-25 22:25 2213为了方便查阅资料,特将网上搜索到的Redis相关安装配置进行归 ... -
Redis在Windows下的使用[转]
2011-04-25 22:24 1155Windows版的Redis可到此处下载,非官方版http:/ ... -
windows下redis和memcached的性能对比测试【转】
2011-04-25 22:19 1698在windows下测试了redis和memcached的性能, ... -
膜拜Redis【转】
2011-04-25 21:14 984膜拜Redis 2009年06月18 ...
相关推荐
redis 数据库 介绍
在IT行业中,C++与Redis的结合使用是一个常见的实践,特别是在需要高性能数据存储和处理的场景下。...在实际项目中,开发者需要结合这些知识点,编写出高效、稳定的C++代码,实现对Redis数据库的无缝操作。
MYSQL、ORACLE、SQLSERVER、Postgres、Redis数据库等保测评作业指导书V1.1 本文档旨在提供一个综合的数据库等保测评作业指导书,涵盖MYSQL、ORACLE、SQLSERVER、Postgres、Redis等多种数据库管理系统。该指导书旨在...
Redis数据库从入门到实践 Redis是一种快速、高性能的键值对数据库,常用于缓存和会话管理等功能。该数据库采用内存存储数据,使得读取和写入速度非常快。同时,Redis还支持丰富的数据类型和命令,方便用户进行数据...
本文将详细讲解如何使用C#语言来实现对Redis数据库的访问,以便充分利用其高效特性来提升应用性能。 首先,要实现C#访问Redis,我们需要一个客户端库。StackExchange.Redis是.NET开发者广泛使用的官方推荐库,它...
本教程将深入讲解如何在SpringBoot项目中通过注解方式实现Redis数据库的切换。 首先,我们需要理解SpringBoot与Redis的集成原理。SpringBoot提供了对Redis的自动配置支持,只需要在项目中引入`spring-boot-starter-...
文档描述了Redis 数据库的键值设计,个人感觉很好!
#### Redis数据库介绍 Redis是一种开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串、散列、列表、集合等,并且提供了丰富的命令集用于数据操作。 #### Redis与...
redis ppt 介绍
redis数据库服务器 的 exe 文件 -
Python 的 Redis 数据库连接与使用 Python 的 Redis 数据库连接与使用是指通过 Python 语言对 Redis 数据库进行连接和操作的过程。Redis 是一个基于内存的 key-value 存储系统,可以存储多种数据类型,包括字符串、...
MYSQL、ORACLE、SQLSERVER、Postgres、Redis数据库等保测评作业指导书
《易语言Redis数据库支持库详解》 在编程领域,易语言作为一款中文编程语言,以其独特的易学易用性受到了广大编程爱好者的喜爱。而 Redis,作为一种高性能的键值存储系统,广泛应用于缓存、消息队列等场景,是许多...
本文将详细介绍如何在C或C++环境中使用Redis数据库,并通过动态库文件实现跨程序调用。 首先,我们要理解Redis的基本概念。Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,它支持数据结构如...
【C++操作Redis数据库】 Redis是一个高性能的键值对存储系统,常被用作数据库、缓存和消息中间件。在C++中与Redis交互,通常需要借助客户端库,这里提到的是`hiredis`,这是一个轻量级、高效的纯C语言实现的Redis...
### Redis 数据库基础 #### 一、Redis简介与NoSQL概念 Redis是一种广泛使用的开源内存数据结构存储系统,它可以作为数据库、缓存和消息中间件使用。作为一种NoSQL(Not Only SQL)数据库,Redis提供了非关系型数据...
在windows系统上可视化查看redis数据库 redis可视化工具 RedisInsight是Redis Labs提供的一个用于管理和监控Redis数据库的图形用户界面(GUI)工具。它为用户提供了直观的界面,以便更轻松地执行各种Redis数据库操作...
Redis是一款开源的、高性能的键值对存储系统,主要用于数据缓存、消息中间件和数据库。在Windows环境下,Redis提供了一套完整的安装和运行环境,让开发者能够在Windows操作系统上便捷地使用Redis服务。 1. Redis...
在linux系统上可视化查看redis数据库 redis可视化工具 RedisInsight是Redis Labs提供的一个用于管理和监控Redis数据库的图形用户界面(GUI)工具。它为用户提供了直观的界面,以便更轻松地执行各种Redis数据库操作,...
Redis是一款开源、高性能的键值对存储系统,它支持数据结构如字符串、哈希表、列表、集合和有序集合,广泛应用于缓存、数据库、消息中间件等场景。Redis 2.4.6是该软件的一个历史版本,下面将详细讨论这个版本中的...