Redis
文章平均质量分 69
freebird_lb
这个作者很懒,什么都没留下…
展开
-
redis服务器模型分析
redis的服务器程序采用的是单进程,单线程的模型来处理客户端的请求。对读写等事件的响应是通过对epoll函数的包装来做到的。 下图是整个服务器模型原理图。 首先我们来说明下整个服务器初始化的过程: 1.初始化asEventLoop。 2.初始化服务器socket监听,并且绑定acceptTcpHandler事件函数,以应对建立客户端连接的请求。 3.绑定bef转载 2012-02-28 14:14:47 · 2312 阅读 · 0 评论 -
Redis学习笔记3--Redis键值设计
tag在互联网应用里尤其多见,首先看下面的关系型数据表:Book表: idnameauthor1The Ruby Programming LanguageMark Pilgrim2Ruby on railDavid Flanagan3原创 2012-07-10 19:11:30 · 11414 阅读 · 1 评论 -
Redis学习笔记4--Redis数据存储优化机制
1.zipmap优化hash:前面谈到将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新建一个hash对象时开始是用zipmap来存储的。这个zipmap其实并不是hash table,但是zipmap相比正常的hash实现可以节省不少hash本身需要的一些元数据存储开销。尽管zipmap的添加,删除,查找都是O(n),但是由于一般对象的field数原创 2012-07-10 19:13:57 · 12422 阅读 · 1 评论 -
Redis学习笔记1--入门篇
一、Redis简介:Redis(http://redis.io)是一款开源的、高性能的键-值存储(key-value store),它是用ANSI C来编写。Redis的项目名是Remote Dictionary Server的缩写,但它常被称作是一款数据结构服务器(data structureserver)。Redis的键值可以包括字符串(strings)、哈希(hashes)、列表(lis原创 2012-07-10 18:55:10 · 23851 阅读 · 7 评论 -
Redis学习笔记6--Redis事务
redis对事务的支持目前还比较简单。redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。 由于redis是单线程来处理所有client的请求的所以做到这点是很容易的。一般情况下redis在接受到一个client发来的命令后会立即处理并 返回处理结果,但是当一个client在一个连接中发出multi命令有,这个连接会进入一个事务上下文,该连接后原创 2012-07-10 19:19:11 · 6247 阅读 · 3 评论 -
Redis学习笔记5--Redis排序
redis支持对list,set和sorted set元素的排序。排序命令是sort 完整的命令格式如下:SORT key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey]1.SORT key: sort key这个是最简单的情况,原创 2012-07-10 19:17:42 · 11371 阅读 · 2 评论 -
Redis学习笔记10--Redis主从复制
redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。下面是关于redis主从复制的一些特点: 1.master可以有多个slave 2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构 3.主从复制不会阻塞master。也就原创 2012-07-24 11:22:51 · 5832 阅读 · 1 评论 -
Redis学习笔记11--Redis分布式
Redis-2.4.15目前没有提供集群的功能,Redis作者在博客中说将在3.0中实现集群机制。目前Redis实现集群的方法主要是采用一致性哈稀分片(Shard),将不同的key分配到不同的redis server上,达到横向扩展的目的。下面来介绍一种比较常用的分布式场景:在读写操作比较均匀且实时性要求较高,可以用下图的分布式模式:在读操作远远多于写操作时,可以用下图的分布式模式:原创 2012-07-24 11:24:47 · 39237 阅读 · 2 评论 -
Redis学习笔记9--Redis持久化
redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。redis支持四种持久化方式,一是 Snapshotting(快照)也是默认方式;二是Append-only file(缩写aof)的方式;三是虚拟内存方式;四是diskstore方式。下面分别介绍之。(一)Snapshotting 快照是默认的持久化方式。这种方原创 2012-07-24 11:21:38 · 66442 阅读 · 8 评论 -
Redis学习笔记2--Redis数据类型及相关命令
Redis支持的种数据类型包括string、list 、set 、sorted set 和hash。Redis相关的命令可以查看:http://redis.io/commands 这是官方的命令使用手册,也有中文翻译的:http://redis.readthedocs.org/en/2.4/index.html1. keys: redis本质上一个key-value store,所以原创 2012-07-10 19:07:17 · 27815 阅读 · 2 评论 -
Redis被bgsave和bgrewriteaof阻塞的解决方法
Redis 是一个性能非常高效的内存 Key-Value 存储服务, 同时它还具有两个非常重要的特性: 1. 持久化; 2. Value 数据结构. 这两个特性让它在不少场景轻松击败了 Memcached 和 Casandra 等.Redis 的持久化在两种方式: Snapshotting(快照) 和 Append-only file(aof). 在一个采用了 aof 模式的 Redis 服务原创 2012-06-29 11:32:26 · 2890 阅读 · 1 评论 -
[Erlang 0019]Redis协议解读与实现(.Net & Erlang)
Redis从1.2版本开始采用新的统一协议,从2.0版本开始成为与Redis Server交互的标准方式.Redis协议是一个折中方案,它平衡了下面的需求:简单实现 计算机快速解析 足够简单人工能够正常解读 概览客户端通过TCP6379端口连接Redis服务器.客户端服务器端之间传送的每一个Redis命令或者数据都是\r\n(CRLF)结束.Redis接受命令和参数,服务器接受命转载 2012-02-28 17:05:52 · 2233 阅读 · 0 评论 -
Redis内存使用优化与存储
Redis常用数据类型Redis最为常用的数据类型主要有以下五种:StringHashListSetSorted set在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的:首先Redis内部使用一个redisObject对象来表示所有的key和value,redisObject最主要的信息如上图所示:type代表一个va转载 2012-02-28 21:07:37 · 1423 阅读 · 0 评论 -
Redis曝新BUG:内存超限后的死循环
Redis曝出了一个新bug,如果你设定了Redis的maxmemory,并且这个Redis有Slave,那么当你的maxmemory限制达到后,就会出现死循环。具体原因和流程如下:Redis 达到了配置中设定的maxmemory限制,开始按LRU策略删除数据 被过期清除的数据会生成DEL 日志推送到Slave 但是如果Slave达到一定数量时,这条DEL日志使用的output b转载 2012-03-10 11:15:01 · 1452 阅读 · 0 评论 -
Redis作者谈Redis应用场景
毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。下面是一篇新鲜出炉的文章,其作者是Redis作者@antirez,他描述了Redis比较适合的一些应用场景,NoSQLFan简单列举在这里,供大家一览:转载 2012-03-11 22:02:27 · 1450 阅读 · 0 评论 -
Redis 中的事务
目录 [隐藏]1 事务2 用法3 回滚命令队列4 用 check-and-set 进行乐观锁定5 关于 WATCH 的说明6 用 WATCH 实现 ZPOP事务MULTI, EXEC, DISCARD 和 WATCH 是 Redis 事务的基础。他们允许一次执行一组命令,并有两项重要保证:在一个事务中的所有命令是连续执行的。在一个 Redis 事务的执行过程中绝不会转载 2012-03-11 14:45:34 · 1216 阅读 · 0 评论 -
SPRING DATA - REDIS配置
前段时间由于业务需要,研究了下redis,第一次接触redis,没有详细的研究,只把它当着工具来用,以后有时间慢慢研究下,简单的看了下redis的官网(http://www.redis.io/),Commands Clients Documentation这3个方面看完已了解了大部分情况,看了java Clients,redis官网比较推荐Jedis,而spring对redis的客服端做了一个转载 2012-04-14 13:49:23 · 11197 阅读 · 0 评论 -
Redis测试分析(pipeline模式推荐)
测试环境 Redis测试版本:2.2.12 使用Java Jedis客户端进行测试 测试数据量:50万, 超过2亿 速度 1) mset函数插入效率最高,插入Redis的速度达到20万条数据/秒。但是该函数所耗内存较高,对于我们实际应用一表每天2.4亿的数据量来说,需要消耗近32G内存;2) mset函数中当m值达到200以上时,插入速度接近饱和,因此实际应用中,应转载 2012-04-14 15:22:18 · 2565 阅读 · 0 评论 -
jedis 用连接池时超时返回值类型错误
这个是今天发现一个bug:在测试redis并发读写的时候(jedis作为客户端,并使用了连接池),总是报 java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Longat redis.clients.jedis.Connection.getIntegerReply(Connection.转载 2012-04-14 17:03:13 · 8149 阅读 · 0 评论 -
Redis一个异常的解决办法,异常描述:Could not get a resource from the pool
异常描述: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool at redis.clients.util.Pool.getResource(Pool.java:22) at com.derbysoft.jredis.longkeytest.Bor转载 2012-04-14 12:13:48 · 276015 阅读 · 15 评论 -
Redis学习笔记8--Redis发布/订阅
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。pub /sub不仅仅解决发布者和订阅者直接代码级别耦合也解决两者在物理部署上的耦合。redis作为一个pub/sub server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订原创 2012-07-24 11:17:42 · 64376 阅读 · 5 评论