Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景。它起步较晚,发展迅速,目前已被许多大型机构采用,如google、taobao、sina微博等。本文不对其数据结构做深入的讲解,只是介绍其安装及主从结构的配置过程。如需要更详细的了解请参考其官方网站。
Redis的安装
Redis目前只支持Linux及BSD等系统,不支持Window下的安装。在Linux下安装的过程如下所示:
| $ wget http://redis.googlecode.com/files/redis-2.2.12.tar.gz$ tar xzf redis-2.2.12.tar.gz$ cd redis-2.2.12$ make |
安装成功后的提示为:
| Hint: To run "make test" is a good idea ;)make[1]: Leaving directory `/usr/alibaba/install/redis-2.2.12/src" |
在安装完成后,即可进入至该工程的src下启动服务:
通过内置的build-cli工具进行相应的测试,其测试过程如下:
| $ src/redis-cliredis> set foo barOKredis> get foo"bar"redis > getset foo 123“bar”redis >get foo123 |
Redis的主从配置
机器的分配
主从结构的配置所涉及到的机器及各机器所完成的功能如下所示:
| IP地址 | 角色 |
| 10.20.150.205 | 主结点 |
| 10.20.150.208 | 从结点1 |
| 10.20.150.209 | 从结点2 |
主从结构的配置
在进行主从结构配置之前,请确保已经在上述三台机器上已经安装了Redis服务。对于Redis的主从结构的配置相对比较简单,只需修改redis.conf文件,配置上主结点对应的IP及端口。具体如下所示:
| Port 6380bind 10.20.150.205slaveof 10.20.150.205 6379 |
l port 6380表示当前该Redis服务对应的端口号;l bind 10.20.150.205 表示当前Redis绑定的主结点的IP地址;l slaveof 10.20.150.205 6379 表示当前Redis是哪个主结点的从结点,其中包括IP及端口号。
当主结点在启动时
当只有一台主结点在启动时,会显示如下的信息:
| [29028] 26 Sep 18:39:12 * Server started, Redis version 2.2.12[29028] 26 Sep 18:39:12 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add "vm.overcommit_memory = 1" to /etc/sysctl.conf and then reboot or run the command "sysctl vm.overcommit_memory=1" for this to take effect.[29028] 26 Sep 18:39:12 * DB loaded from disk: 0 seconds[29028] 26 Sep 18:39:12 * The server is now ready to accept connections on port 6379[29028] 26 Sep 18:39:12 - 0 clients connected (0 slaves), 790584 bytes in use |
当有一台从结点10.20.150.208启动时
其中主结点会自动检测到有新的从结点启动并加入进来,其显示的信息如下:
| [29028] 26 Sep 18:40:31 - Accepted 10.20.150.208:44779[29028] 26 Sep 18:40:31 * Slave ask for synchronization[29028] 26 Sep 18:40:31 * Starting BGSAVE for SYNC[29028] 26 Sep 18:40:31 * Background saving started by pid 29091[29091] 26 Sep 18:40:31 * DB saved on disk[29028] 26 Sep 18:40:31 * Background saving terminated with success[29028] 26 Sep 18:40:31 * Synchronization with slave succeeded[29028] 26 Sep 18:40:32 - 0 clients connected (1 slaves), 798752 bytes in use[29028] 26 Sep 18:40:37 - 0 clients connected (1 slaves), 798752 bytes in use[29028] 26 Sep 18:40:42 - 0 clients connected (1 slaves), 798752 bytes in use[29028] 26 Sep 18:40:47 - 0 clients connected (1 slaves), 798752 bytes in use |
对于从结点显示的信息如下:
| #[597] 26 Sep 18:40:29 * Server started, Redis version 2.2.12[597] 26 Sep 18:40:29 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add "vm.overcommit_memory = 1" to /etc/sysctl.conf and then reboot or run the command "sysctl vm.overcommit_memory=1" for this to take effect.[597] 26 Sep 18:40:29 * The server is now ready to accept connections on port 6379[597] 26 Sep 18:40:29 - 0 clients connected (0 slaves), 790616 bytes in use[597] 26 Sep 18:40:29 * Connecting to MASTER...[597] 26 Sep 18:40:29 * MASTER <-> SLAVE sync started: SYNC sent[597] 26 Sep 18:40:29 * MASTER <-> SLAVE sync: receiving 10 bytes from master[597] 26 Sep 18:40:29 * MASTER <-> SLAVE sync: Loading DB in memory[597] 26 Sep 18:40:29 * MASTER <-> SLAVE sync: Finished with success[597] 26 Sep 18:40:34 - 1 clients connected (0 slaves), 798744 bytes in use |
当有另外一台从机10.20.150.209挂载时
当有另一台从机挂载至主机时,主机显示的信息如下:
| [29028] 26 Sep 18:42:52 - 0 clients connected (1 slaves), 798752 bytes in use[29028] 26 Sep 18:42:57 - 0 clients connected (1 slaves), 798752 bytes in use[29028] 26 Sep 18:42:58 - Accepted 10.20.150.209:47650[29028] 26 Sep 18:42:58 * Slave ask for synchronization[29028] 26 Sep 18:42:58 * Starting BGSAVE for SYNC[29028] 26 Sep 18:42:58 * Background saving started by pid 29287[29287] 26 Sep 18:42:58 * DB saved on disk[29028] 26 Sep 18:42:59 * Background saving terminated with success[29028] 26 Sep 18:42:59 * Synchronization with slave succeeded[29028] 26 Sep 18:43:02 - 0 clients connected (2 slaves), 806920 bytes in use |
从另一台从机上可以看到的信息如下:
| [Intranet root@xasc-150-209 /usr/alibaba/install/redis-2.2.12/src]#./redis-server ../redis.conf [15034] 26 Sep 18:42:56 * Server started, Redis version 2.2.12[15034] 26 Sep 18:42:56 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add "vm.overcommit_memory = 1" to /etc/sysctl.conf and then reboot or run the command "sysctl vm.overcommit_memory=1" for this to take effect.[15034] 26 Sep 18:42:56 * The server is now ready to accept connections on port 6379[15034] 26 Sep 18:42:56 - 0 clients connected (0 slaves), 790616 bytes in use[15034] 26 Sep 18:42:56 * Connecting to MASTER...[15034] 26 Sep 18:42:56 * MASTER <-> SLAVE sync started: SYNC sent[15034] 26 Sep 18:42:56 * MASTER <-> SLAVE sync: receiving 10 bytes from master[15034] 26 Sep 18:42:56 * MASTER <-> SLAVE sync: Loading DB in memory[15034] 26 Sep 18:42:56 * MASTER <-> SLAVE sync: Finished with success[15034] 26 Sep 18:43:01 - 1 clients connected (0 slaves), 798744 bytes in use |
当主结点宕掉时
当主结点突然间不可用,两台从机会由于找不到主结点而报错,信息如下:
| [597] 26 Sep 18:46:09 * Connecting to MASTER...[597] 26 Sep 18:46:09 # Unable to connect to MASTER: Connection refused[597] 26 Sep 18:46:10 * Connecting to MASTER...[597] 26 Sep 18:46:10 # Unable to connect to MASTER: Connection refused[597] 26 Sep 18:46:11 * Connecting to MASTER...[597] 26 Sep 18:46:11 # Unable to connect to MASTER: Connection refused[597] 26 Sep 18:46:12 * Connecting to MASTER...[597] 26 Sep 18:46:12 # Unable to connect to MASTER: Connection refused[597] 26 Sep 18:46:13 * Connecting to MASTER...[597] 26 Sep 18:46:13 # Unable to connect to MASTER: Connection refused[597] 26 Sep 18:46:14 - 0 clients connected (0 slaves), 790616 bytes in use |
主结点在没有启动的情况下,从机先启动时
当主结点还没有启动时,从结点先启动,由于找不到对应主结点,会报如下的信息错误:
| [Intranet root@xasc-150-208 /usr/alibaba/install/redis-2.2.12/src]#./redis-server ../redis.conf [1842] 26 Sep 18:48:50 * Server started, Redis version 2.2.12[1842] 26 Sep 18:48:50 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add "vm.overcommit_memory = 1" to /etc/sysctl.conf and then reboot or run the command "sysctl vm.overcommit_memory=1" for this to take effect.[1842] 26 Sep 18:48:50 * DB loaded from disk: 0 seconds[1842] 26 Sep 18:48:50 * The server is now ready to accept connections on port 6379[1842] 26 Sep 18:48:50 - 0 clients connected (0 slaves), 790616 bytes in use[1842] 26 Sep 18:48:50 * Connecting to MASTER...[1842] 26 Sep 18:48:50 # Unable to connect to MASTER: Connection refused[1842] 26 Sep 18:48:51 * Connecting to MASTER...[1842] 26 Sep 18:48:51 # Unable to connect to MASTER: Connection refused[1842] 26 Sep 18:48:52 * Connecting to MASTER...[1842] 26 Sep 18:48:52 # Unable to connect to MASTER: Connection refused[1842] 26 Sep 18:48:53 * Connecting to MASTER...[1842] 26 Sep 18:48:53 # Unable to connect to MASTER: Connection refused[1842] 26 Sep 18:48:54 * Connecting to MASTER...[1842] 26 Sep 18:48:54 # Unable to connect to MASTER: Connection refused[1842] 26 Sep 18:48:55 - 0 clients connected (0 slaves), 790616 bytes in use |
当有一台从机不可用时
当有一台从机变得不可用时,主机显示的信息如下:
| 32 - 1 clients connected (0 slaves), 798744 bytes in use[16848] 26 Sep 18:50:37 - 1 clients connected (0 slaves), 798744 bytes in use[16848] 26 Sep 18:50:42 - 1 clients connected (0 slaves), 798744 bytes in use |
当两台从机都宕掉时
当两台从机都变得不可用时,主机显示的信息如下:
| [29736] 26 Sep 18:52:57 - Client closed connection[29736] 26 Sep 18:53:02 - 0 clients connected (0 slaves), 790584 bytes in use[29736] 26 Sep 18:53:07 - 0 clients connected (0 slaves), 790584 bytes in use |
主从结构的测试
在主结点上执行写入
在主机上执行写入命令1
在各个从机上会显示的信息如下:
| [2528] 26 Sep 18:57:01 - DB 0: 1 keys (0 volatile) in 4 slots HT.[2528] 26 Sep 18:57:01 - 1 clients connected (0 slaves), 798952 bytes in use[2528] 26 Sep 18:57:06 - DB 0: 1 keys (0 volatile) in 4 slots HT.[2528] 26 Sep 18:57:06 - 1 clients connected (0 slaves), 798936 bytes in use |
在主机上执行get foo命令,显示的信息如下:
| redis 127.0.0.1:6379> get foo"bar" |
在从机10.20.150.208上执行get foo命令,显示的信息如下:
| redis 127.0.0.1:6379> get foo"bar" |
同理,在从机10.20.150.209上执行get foo命令,显示的信息如下:
| redis 127.0.0.1:6379> get foo"bar" |
当有一台从机挂掉后,在主机上写入
当有一台从机(10.20.150.208)宕机,在主机上执行setfoo1写入命令。主机上执行get foo1时显示的信息如下:
| redis 127.0.0.1:6379> get foo1"test" |
另一台从机上执行getfoo1时显示的信息如下:
| redis 127.0.0.1:6379> get foo1"test" |
当把10.20.150.208从机启动起来时,执行getfoo1命令,显示的信息如下:
| redis 127.0.0.1:6379> get foo1"test" |
可见,即使当从机挂掉并再次启动时,仍会将主机做过的修改全部都同步至重启的从机上。
JDBC操作MySQL时注意的一些细节dblink建物化视图解决lob大字段问题相关资讯 Redis
- Redis 非关系型数据库 ( Nosql ) (07月01日)
- Java中使用Jedis操作Redis (04月08日)
- 在Ubuntu 14.04下安装Redis (01月31日)
| - 关于 Redis的订阅发布 (04月15日)
- MongoDB仲裁节点的理解及Memcached (02月13日)
- 关于redis中的Replication (01月29日)
|
本文评论 查看全部评论 (0)