Redis 3.0.0 正式版终于到来了!最重要的新特性是集群(Redis Cluster),提供 Redis 功能子集(比如不支持多数据库)的分布式、容错的实现(最多支持 1000 结点)。本教程是 Redis 3.0 官方文档的翻译版,内容上突出新特性,旨在帮助读者快速上手并掌握 Redis 3.0 的知识点。适用人群本教程为中级教程,适用于基于 Redis 数据库的应用开发者。
手动故障转移(Manual failover)有时候在主服务器事实上没有任何故障的情况下强制一次故障转移是很有用的。例如,为了升级主服务器节点中的一个进程,可以对其进行故障转移使其变为一个从服务器,这样最小化了对可用性的影响。 Redis 集群支持使用 CLUSTER FAILOVER 命令来手动故障转移,必须在你想进行故障转移的主服务的其中一个从服务器上执行。
使用 redis-rb-cluster 写一个示例应用在后面介绍如何操作 Redis 集群之前,像故障转移或者重新分片这样的事情,我们需要创建一个示例应用,或者至少要了解简单的 Redis 集群客户端的交互语义。 我们采用运行一个示例,同时尝试使节点失效,或者开始重新分片这样的方式,来看看在真实世界条件下 Redis 集群如何表现。
这篇文档是对 Redis 集群的介绍,没有使用复杂难懂的东西来理解分布式系统的概念。本文提供了如何建立,测试和操作一个集群的相关指导,但没有涉及在 Redis 集群规范(参考本系列其他文章,译者注)中的诸多细节,只是从用户的视角来描述系统是如何运作的。
分割下的一致性(Consistency under partitions)Redis Sentinel 的配置是最终一致性的,所以每个分区会被统一到一个可用的更高版本的配置。但是,在使用 Sentinel 的真实世界系统中有三个不同的角色: Redis 实例。Sentinel 实例。客户端。为了定义系统的行为,我们得考虑这三个角色。
Redis Sentinel 是 Redis 的官方高可用解决方案,是设计用来帮助管理 Redis 实例的系统。用于完成下面 4 个任务: 监控(Monitoring)。Sentinel 不断检查你的主从实例是否运转正常。通知(Notification)。Sentinel 可以通过 API 来通知系统管理员,或者其他计算机程序,被监控的 Redis 实例出了问题。自动故障转移(Automatic failover)。
本文提供对 Redis 持久化(persistence)的技术性描述,适合所有的 Redis 用户来阅读。想获得对 Redis 持久化和持久性保证有更全面的了解,也可以读一下作者的博客文章(地址为 http://antirez.com/post/redis-persistence-demystified.html,译者注)。
Redis 的复制 (replication) 是一种使用和配置起来非常简单的主从(master-slave)复制,允许 Redis 从服务器成为主服务器的精确副本。以下是关于 Redis 复制的一些重要方面: Redis 采用异步复制。从 Redis 2.8 开始,从服务器会周期性地报告从复制流中处理的数据量。一个主服务器可以拥有多个从服务器。从服务器可以接受其他从服务器的连接。
分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集。本文第一部分将向你介绍分片的概念,第二部分将向你展示 Redis 分片的可选方案。 分片为何有用(Why useful)Redis 的分片承担着两个主要目标: 允许使用很多电脑的内存总和来支持更大的数据库。没有分片,你就被局限于单机能支持的内存容量。
Redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统。由于 Redis 的键包括 string,hash,list,set,sorted set,bitmap 和 hyperloglog,所以常常被称为数据结构服务器。
本文档是一篇草案,其包含的指引将来可能会随着Sentinel项目的进展而改变。 支持Redis Sentinel的Redis客户端指引Redis Sentinel是Redis实例的监控解决方案,处理Redis主服务器的自动故障转移和服务发现(谁是一组实例中的当前主服务器)。
有时候 Redis 实例需要在短时间内加载大量的已存在数据,或者用户产生的数据,这样,上百万的键将在很短的时间内被创建。 这被称为集中插入(mass insertion),这篇文档的目的,就是提供如何最快地向 Redis 中插入数据的一些相关信息。
把 loadUserInfo 作为一个单独的函数有点大题小做了,但是在复杂的程序中这是一个很好的方法。认证中唯一被遗漏的事情就是登出了。我们怎么来做登出呢?很简单,我们改变 user:1000 的 auth 字段中的随机串,从 auths 哈希中删除旧的认证秘钥,然后添加一个新的。
本文讲述使用 PHP 以及 Redis 来设计和实现一个简单的微博。编程社区传统上认为,在开发 web 应用程序时,作为特殊目的的键值存储数据库不能用于替换关系型数据库。本文将向你展示 Redis 在键值层之上的数据结构是实现各种应用程序的有效数据模型。 在继续之前,你可以花点时间体验一下在线演示(http://retwis.redis.io,译者注),看看我们究竟要做什么。
Redis 有序集合 (Sorted sets)有序集合类似于集合和哈希的混合体的一种数据类型。像集合一样,有序集合由唯一的,不重复的字符串元素组成,在某种意义上,有序集合也就是集合。 集合中的每个元素是无序的,但有序集合中的每个元素都关联了一个浮点值,称为分数(score,这就是为什么该类型也类似于哈希,因为每一个元素都映射到一个值)。
Redis 列表(Lists)为了解释列表类型,最好先开始来点理论,因为列表这个术语在信息技术领域常常使用不当。例如,”Python Lists”,并不是字面意思(链表),实际是表示数组 (和 Ruby 中的 Array 是同一种类型)。 通常列表表示有序元素的序列:10,20,1,2,3 是一个列表。但是数组实现的列表和链表实现的列表,他们的属性非常不同。 Redis 的列表是使用链表实现的。
Redis 不是一个无格式 (plain) 的键值存储,而是一个支持各种不同类型值的数据结构服务器。这就是说,传统键值存储是关联字符串值到字符串键,但是 Redis 的值不仅仅局限于简单字符串,还可以持有更复杂的数据结构。下面列的是 Redis 支持的所有数据结构,后面将逐一介绍: 二进制安全 (binary-safe) 的字符串。
字符串 (Strings)字符串是 Redis 最基本的数据类型。Redis 字符串是二进制安全的,也就是说,一个 Redis 字符串可以包含任意类型的数据,例如一张 JPEG 图像,或者一个序列化的 Ruby 对象。 一个字符串最大为 512M 字节。 你可以使用 Redis 的字符串类型做很多有意思的事情,例如,你可以: 使用 INCR 命令族 (INCR,DECR,INCRBY),将字符串作为原子计数器。
关注时代Java