Redis系统学习 五、管理

在最后一章里,我们将集中谈论Redis运行中的一些管理方面内容。这是一个不完整的Redis管理指南,我们将会回答一些基本的问题,初接触Redis的新用户可能会很感兴趣。

配置(Configuration)

当你第一次运行Redis的服务器,它会向你显示一个警告,指redis.conf文件没有被找到。这个文件可以被用来配置Redis的各个方面。一个充分定义(well-documented)的redis.conf文件对各个版本的Redis都有效。范例文件包含了默认的配置选项,因此,对于想要了解设置在干什么,或默认设置是什么,都会很有用。你可以在https://github.com/antirez/redis/raw/2.4.6/redis.conf找到这个文件。

这个配置文件针对的是Redis 2.4.6,你应该用你的版本号替代上面URL里的"2.4.6"。运行info命令,其显示的第一个值就是Redis的版本号。

因为这个文件已经是充分定义(well-documented),我们就不去再进行设置了。

除了通过redis.conf文件来配置Redis,config set命令可以用来对个别值进行设置。实际上,在将slowlog-log-slower-than设置为0时,我们就已经使用过这个命令了。

还有一个config get命令能显示一个设置值。这个命令支持模式匹配,因此如果我们想要显示关联于日志(logging)的所有设置,我们可以这样做:

config get *log*

验证(Authentication)

通过设置requirepass(使用config set命令或redis.conf文件),可以让Redis需要一个密码验证。当requirepass被设置了一个值(就是待用的密码),客户端将需要执行一个auth password命令。

一旦一个客户端通过了验证,就可以在任意数据库里执行任何一条命令,包括flushall命令,这将会清除掉每一个数据库里的所有关键字。通过配置,你可以重命名一些重要命令为混乱的字符串,从而获得一些安全性。

rename-command CONFIG 5ec4db169f9d4dddacbfb0c26ea7e5ef
rename-command FLUSHALL 1041285018a942a4922cbf76623b741e

或者,你可以将新名字设置为一个空字符串,从而禁用掉一个命令。

大小限制(Size Limitations)

当你开始使用Redis,你可能会想知道,我能使用多少个关键字?还可能想知道,一个散列数据结构能有多少个域(尤其是当你用它来组织数据时),或者是,一个列表数据结构或集合数据结构能有多少个元素?对于每一个实例,实际限制都能达到亿万级别(hundreds of millions)。

复制(Replication)

Redis支持复制功能,这意味着当你向一个Redis实例(Master)进行写入时,一个或多个其他实例(Slaves)能通过Master实例来保持更新。可以在配置文件里设置slaveof,或使用slaveof命令来配置一个Slave实例。对于那些没有进行这些设置的Redis实例,就可能一个Master实例。

为了更好保护你的数据,复制功能拷贝数据到不同的服务器。复制功能还能用于改善性能,因为读取请求可以被发送到Slave实例。他们可能会返回一些稍微滞后的数据,但对于大多数程序来说,这是一个值得做的折衷。

遗憾的是,Redis的复制功能还没有提供自动故障恢复。如果Master实例崩溃了,一个Slave实例需要手动的进行升级。如果你想使用Redis去达到某种高可用性,对于使用心跳监控(heartbeat monitoring)和脚本自动开关(scripts to automate the switch)的传统高可用性工具来说,现在还是一个棘手的难题。

备份文件(Backups)

备份Redis非常简单,你可以将Redis的快照(snapshot)拷贝到任何地方,包括S3、FTP等。默认情况下,Redis会把快照存储为一个名为dump.rdb的文件。在任何时候,你都可以对这个文件执行scpftpcp等常用命令。

有一种常见情况,在Master实例上会停用快照以及单一附加文件(aof),然后让一个Slave实例去处理备份事宜。这可以帮助减少Master实例的载荷。在不损害整体系统响应性的情况下,你还可以在Slave实例上设置更多主动存储的参数。

缩放和Redis集群(Scaling and Redis Cluster)

复制功能(Replication)是一个成长中的网站可以利用的第一个工具。有一些命令会比另外一些来的昂贵(例如sort命令),将这些运行载荷转移到一个Slave实例里,可以保持整体系统对于查询的快速响应。

此外,通过分发你的关键字到多个Redis实例里,可以达到真正的缩放Redis(记住,Redis是单线程的,这些可以运行在同一个逻辑框里)。随着时间的推移,你将需要特别注意这些事情(尽管许多的Redis载体都提供了consistent-hashing算法)。对于数据水平分布(horizontal distribution)的考虑不在这本书所讨论的范围内。这些东西你也很可能不需要去担心,但是,无论你使用哪一种解决方案,有一些事情你还是必须意识到。

好消息是,这些工作都可在Redis集群下进行。不仅提供水平缩放(包括均衡),为了高可用性,还提供了自动故障恢复。

高可用性和缩放是可以达到的,只要你愿意为此付出时间和精力,Redis集群也使事情变得简单多了。

小结

在过去的一段时间里,已经有许多的计划和网站使用了Redis,毫无疑问,Redis已经可以应用于实际生产中了。然而,一些工具还是不够成熟,尤其是一些安全性和可用性相关的工具。对于Redis集群,我们希望很快就能看到其实现,这应该能为一些现有的管理挑战提供处理帮忙。

\clearpage

总结

在许多方面,Redis体现了一种简易的数据处理方式,其剥离掉了大部分的复杂性和抽象,并可有效的在不同系统里运行。不少情况下,选择Redis不是最佳的选择。在另一些情况里,Redis就像是为你的数据提供了特别定制的解决方案。

最终,回到我最开始所说的:Redis很容易学习。现在有许多的新技术,很难弄清楚哪些才真正值得我们花时间去学习。如果你从实际好处来考虑,Redis提供了他的简单性。我坚信,对于你和你的团队,学习Redis是最好的技术投资之一。

时间: 2024-10-17 05:29:26

Redis系统学习 五、管理的相关文章

Redis系统学习 三、使用数据结构

前言:上一章,简单介绍了5种数据结构,并给出了一些用例.现在是时候来看看一些高级的,但依然很常见的主题和设计模式 一.大O表示法(Big O Notation ) 常用时间复杂度O(1)被认为是最快速的,无论我们是在处理5个元素还是5百万个元素,最终都能得到相同的性能.对于sismember命令,其作用是告诉我们一个值是否属于一个集合,时间复杂度为O(1).sismember命令很强大,强大的一部分原因是其高效的性能特征.许多Redis命令都具有O(1)的时间复杂度 对数的时间复杂度 O(log

Redis基础学习(五)—Redis的主从复制

一.概述     Redis的主从复制策略是通过其持久化的rdb文件来实现的,其过程是先dump出rdb文件,将rdb文件全量传输给slave,然后再将dump后的操作实时同步到slave中.让从服务器(slave server)成为主服务器(master server)的精确复制品. 以下是关于 Redis 复制功能的几个重要方面: (1)Redis 使用异步复制.从Redis 2.8 开始,从服务器会以每秒一次的频率向主服务器报告复制流(replication stream)的处理进度. (

Redis系统学习 四、超越数据结构

5种数据结构组成了Redis的基础,其他没有关联特定数据结构的命令也有很多.我们已经看过一些这样的命令:info,select,flushdb,multi,exec,discard,watch,和keys.这一章将看看其他的一些重要命令. 使用期限(Expiration) Redis允许你标记一个关键字的使用期限.你可以给与一个Unix时间戳形式(1970 01 01 起)的绝对时间,或者一个基于秒的存活时间.这是一个基于关键字的命令,因此其不在乎关键字表示的是哪种类型的数据结构. expire

Redis系统学习 一、基础知识

1.数据库 select 1  select 0 2.命令.关键字和值 redis不仅仅是一种简单的关键字-值型存储,从其核心概念来看,Redsi的5种数据结构中的每一个都至少有一个关键字和一个值.在转入其它关于Redis的有用信息之前,我们必须理解关键字和值的概念. 关键字Keys是用来标识数据块,例如users:leto 这个关键字里的冒号没有任何特殊含义,对于Redis而言,使用分隔符来组织关键字是很常见的方法 值 values 是关联与关键字的实际值,可以是任何东西. 3.查询 key就

【Rollo的Python之路】Python 爬虫系统学习 (五) Selenium

Selenium 与 PhantomJS selenium:[s??li?ni?m]:# n. 硒(化学元素,用于制造电气设备和有色玻璃,人体缺此元素可致抑郁等病) phantom:[?fænt?m] :# n. 鬼; 鬼魂; 幽灵; 幻觉; 幻象; adj. 像鬼的; 幽灵似的; 幻觉的; 幻象的; 虚幻的 Selenium Selenium 是一个web的自动化测试工具,最初是为了网站自动化测试而开发的,Selenium可以直接运行在浏览器上,它支持所有主流的(包括PhantomJS这些无界

AIX系统学习之-ODM管理

AIX系统学习之-ODM管理 AIX ODM(Object Database Manager)是由一组对象类和对象所组成的数据库.对象类相当于Oracle数据库中的object,由ODM create创建,删除可以使用ODM drop,对象就相当于object下的数据(比如磁盘.Adapter等),可以使用ODM add命令加入对象,使用ODM delete命令删除,使用ODM change命令修改指定记录.查询的命令可以使用odmget. 一.使用 ODM 命令     当使用 odmcrea

系统学习redis之一——基础概念

前言: redis集群搭建过很多次,也用过一些基础的命令,能解决一些常规的异常.但是因为平时对数据这块用得不多,一直没有很系统的学习过redis.这次将redis的知识好好学习了一下,记录为学习笔记<系统学习redis>系列. NoSQL介绍 非关系型数据库:NoSQL关系型数据库:MySQL.SQLserver.Oracle 关系型数据库在web2.0上对高并发,暴露出了一些性能问题 NoSQL 是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,

系统学习redis之七——redis数据类型之zset数据类型及操作

sourted sets数据类型介绍 sorted set是set的一个升级版本,他在set的基础上增加了一个顺序属性.这一属性在修改元素的时候可以指定,每次指定后,zset会自动按照新的值调整顺序,是有序集合.可以理解为有两列的MySQL表,一列存value,一列存顺序.操作中key理解为zset的名字. zset数据类型方法 zadd:向指定集合zset中添加元素member,score用于排序,如果该元素已经存在,则更新其顺序 zrange:查看sourted sets里面的所有元素 zr

系统学习redis之八——redis常用命令

redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在linux终端使用,包括以下两种:1.键值相关命令2.服务器相关命令 redis命令介绍 一.键值相关命令 key:返回满足给定匹配条件的所有key.用表达式*代表取出所有的key exists:确认一个key是否存在,存在即返回1,不存在就返回0 del:删除一个key expire:设置一个key的过期时间 persist:移除给定的key的过期时间 randomkey:随机返回数据库里面的一个key rename:重