Home  >  Article  >  Database  >  【Redis笔记】第1篇:redis基本概念简介

【Redis笔记】第1篇:redis基本概念简介

WBOY
WBOYOriginal
2016-06-07 15:22:521326browse

[题外话] 忙了几个月,年底终于闲下来了,几个月前在线上生产环境中引入redis,几个月下来运行稳定。趁着空闲,把自己当时的调研内容分享出来,希望可以帮助到更多初学者。 下面开始正文 1. Whats Redis Redis作为一个open source key-value store,与传统的

[题外话] 忙了几个月,年底终于闲下来了,几个月前在线上生产环境中引入redis,几个月下来运行稳定。趁着空闲,把自己当时的调研内容分享出来,希望可以帮助到更多初学者。 下面开始正文

1. What’s Redis

Redis作为一个open source key-value store,与传统的k-v存储开源方案相比,其value类型支持各种常见数据类型(如strings, hashes, lists, sets, sorted-sets, etc.),正因如此,其可被用于多种应用场景。

特别需要明确的是:当需要处理的数据能被内存完全容纳时,Redis才能发挥其优异的性能,即Redis works with an in-memory dataset。

备注:从v2.0开始到v2.4,Redis支持vitual memory的概念,即当数据集比物理内存大时,会将冷key的value交换到磁盘上,当被请求时,再重新换回主存。不过由于VM机制弊大于利,从redis v2.4之后的版本(不包括2.4)开始,VM特性已被Redis弃用,详细说明可以参考这里。

Redis支持数据持久化(persistence),以便Redis服务因各种原因重启后,可以load之前已有数据,从而恢复服务状态。用户可根据实际使用情况选择两种持久化策略:

1) RDB方式:dump内存数据库至磁盘

2) AOF方式:将每个写操作记录到command log文件中,以便server重启时回放log以恢复数据状态(类似于mysql的binlog)

Redis支持Master-Slave Replication,从库以全镜像方式同步主库数据,以防系统故障。

Redis目前还不支持集群,不过支持集群的版本已在作者开发计划中(cluster目前有alpha版本,尚未发布生产环境可用版本)。

虽无官方的集群实现,但业界主流做法是用Partitioning方式将数据集散列到不同的redis实例上,从而变相实现了对redis集群的支持,redis官网的这里对partitioning的实现思路做了描述并推荐了twitter开源的一个支持redis的proxy - twemproxy(该proxy最初是作为memcached proxy开源的)。

有两个基本概念需要区分:Redis Master-Slave Replication和Redis Cluster,前者在两个库之间实现数据全镜像,后者则是将用户数据散列到不同机器上,每个机器的Redis节点只hold一部分用户数据。

个人感觉,两种方法都可以起到单点故障容错作用,只是实现方式及应用场合不同而已。

Redis还可以被用作Message Queue,支持的指令集见这里

关于Redis的更多基础介绍,可直接查看其官网文档。

2. Redis Architecture

关于redis的架构及实现细节,有很多资料可以参考,这里推荐2篇:

1) Redis作者antirez关于Redis设计哲学的说明:Redis Manifesto

2) The architecture of REDIS

3. Redis Performance and Application

Redis以其高性能闻名(全内存hold数据,典型的"空间换时间"),关于其性能的benchmarks,这里给出2篇资料:

1) Redis官方发布的性能测试工具及测试结果

2) TimYang: MemcacheDB/Tokyo Tyrant/Redis性能对比测试

虽然redis在业界大热,但也非包治百病的万能药。关于Redis的常见应用场合及注意事项,这里推荐2篇资料:

1) Common Web Use Cases Solved In Redis

2) TimYang: Redis几个认识误区

需要说明的问题:

关于性能,即使假定测试机器配置均相同,Redis的启动配置不同也会对Redis性能指标产生影响(比如持久化策略的配置)。因此各种性能测试结果具有参考意义,但不可以生搬硬套。

关于应用,不限于本文给出的资料,大家感兴趣的话,可用"redis use case"或"redis application"等key words进行搜索。

4. Redis Installing

Redis源码无外部依赖,故编译安装非常方便,从官网下载最新稳定版的源码后,解压后make即可。

编译好的bin文件位于在源码的src目录下,均以redis-xxx命名。其中:

可执行的2进制文件共有5个:

a.redis-benchmark # 性能测试工具

b.redis-check-aof # aof文件修复工具

c.redis-check-dump # rdb文件修复工具

d.redis-cli # 命令行交互工具

e.redis-server # redis server

conf文件两个:

a.redis.conf # redis server的配置文件

b.sentinel.conf # redis sentinel配置文件,用于监控

redis server完成编译后,部署启动实例前,需要对redis.conf中的配置项有较为清楚的理解和合理的配置,否则可能会影响redis的性能或造成数据丢失。限于篇幅,redis的配置说明会在下篇笔记中详细描述。

【参考资料】

1. Redis官网

2. Redis Author - antirez’s Blog [old]

3. Redis Author - antirez’s Blog [new]

============================ EOF ==========================

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn