`

redis小结

 
阅读更多

 一、Redis主从同步原理

1 Redis主从同步的过程

配置好slave服务器连接的master后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连接,master都会启动一个后台进程,将数据库快照保存到文件中.同时master主进程会开始收集新的写命令并缓存起来。当后台进程完成写文件后,master就将快照文件发送给slaveslave将文件保存到磁盘上,然后加载到内存将数据库快照恢复slave上。slave完成快照文件的恢复后,master就会把缓存的命令都转发给slave,slave更新内存数据库。后续master收到的写命令都会通过开始建立的连接发送给slave。从masterslave的同步数据的命令和从 client到master发送的命令使用相同的协议格式。当masterslave的连接断开时,slave可以自动重新建立连接。如果master同时收到多个slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave

 

我画了一个非常简单的示意图:

 

 

 

2 Redis主从同步的特点

主从同步具有明显的分布式缓存特点,主要包括这些方面:

1)一个master可以有多个slave,一个slave也可以有多个slave

2slave不仅可以连接到masterslave也可以连接其他slave形成树状结构;

3)主从同步不会阻塞master,但是会阻塞slave。也就是说当一个或多个slavemaster进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求;

4)主从同步可以用来提高系统的可伸缩性,我们可以用多个slave专门处理client的读请求,也可以用来做简单的数据冗余或者只在slave上进行持久化从而提升集群的整体性能。

 

3 Redis主动同步设置方法

 

有两种方式可以用来完成进行主从Redis服务器的同步设置。都需要针对slave服务器上进行,指定slave需要连接的Redis服务器(可能是master,也可能是slave)。

 

3.1 在配置文件中设置

在作为slaveRedis服务器的配置文件(redis.conf)中设置。

slaveof  10.1.1.102  6379  #指定masterip和端口

 

         很明显,这种设置方式非常简单,但是需要修改配置文件,并且配置文件是在服务器启动时加载的。所以服务器不启动无法修改,操作不灵活。

         这种配置方式适合于作为部署时的初始配置。

3.2Redis客户端中进行设置

这里以Redis官方推荐的Jedis为例来说明,后文中的测试也基于Jedis来进行。这里jedis对象实例是属于slave的,参数是服务器的地址和端口。

slaveJdedis.slaveOf("10.1.1.102", 6379);  #指定masterip和端口

slaveJdedis.slaveofNoOne();  #取消指定master,自己成为一个master了。

 

         通过客户端指定的方式,可以方便的修改masterslave服务器的主从关系。所以这种方式非常适合于根据需要在线调整masterslave服务器。

3.3 当前主从同步存在的问题

         由于masterslave服务器的不是Redis自动选举产生,需要人工参与,因此主从倒换无法自动完成。这样就存在一个问题,什么时候以及由谁来触发倒换。我看了下客户端是没有这个能力的,一定要的话需要自己增加。

         Jedis目前随机选择读取的哪台Redis服务器,因此实现自动分布式读取我们需要对Jedis做二次封装。

 

1)  需要开发一种机制,尽快检测到masterslave的工作状态;

2)  需要定义一种masterslave的自动切换策略;

3)  需要定义一种可以随机读取任何一台Redis服务器的机制;

 

这些功能都可以在客户端实现,不过效果不会太好。如果服务器自身能够支持就比较完美了,不过从Redis官网的介绍情况来看,好像目前还没有看到有人提这样的需求,也没有这样的规划。

 

         很明显,这种设置方式非常简单,但是需要修改配置文件,并且配置文件是在服务器启动时加载的。所以服务器不启动无法修改,操作不灵活。

 

         这种配置方式适合于作为部署时的初始配置。

 

 

二、Redis主流客户端介绍

Redis的官方网站,列出了5Redisjava客户端软件。其中JedisRedis官方推荐的java客户端,这款一直有维护并更新。目前服务器最新稳定版本是Redis2.4.17,最新的测试版本Redis 2.6.0 RC7

2.1 Jedis

         JedisRedis官方推荐的Java客户端版本。目前最新为Jedis 2.1.0-5版本,完全兼容Redis 2.0.0版本。这个客户端一直都有维护和更新。

2.2 JRedis

JRedis之前很长一段时间没有更新,可以完全兼容Redis 2.0.0版本。今天5月份前做过更新后可以兼容最新的Redis2.6.0测试版本。

2.3 JDBC-Redis

JDBC-Redis是用于Redis这个NoSQL数据库的JDBC驱动。只能下载到20093月发布的jdbc-redis_0.1_beta版本,目前已经无人维护了。

2.4 RJC

RJC提供Apache DBCP风格的连接池。1年前已经停止更新,可以完全兼容Redis 2.0.0版本。

2.5 redis-protocol

这个更新是最快和最频繁的,可以兼容最新的Redis 2.6.0版本。不过它定位于完整支持Redis协议,更加高效和Redis服务器进行数据交互。所以,并没有充分发挥redis服务器的功能。

2.6 各个Java客户端总体评价

         整体来讲,各个客户端基本都实现了Redis协议协议定义的基本功能。Redis-protocol更新最近对Redis协议的支持最完整;Jedis提供对Redis服务器的更多配置操作,使用起来是最方便的。其他客户端都很少维护,功能也是一般。

         如果要少量扩展客户端的功能,基于Jedis来做开发是最快捷的。

         如果要最大限制兼容和扩展客户端的功能,基于Redis-protocol是最好的选择。

三、Redis主从同步的使用建议

         Redis主从同步在目前所有的Java客户端都支持不好。主要原因应该还是Redis服务器本身的实现机制限制导致的。如果一定要做也是可能的,不过效果可能会打折扣。

3.1 通过封装Jdedis来实现

1)新增一个管理类,负责维护Redis服务器集群的服务器拓扑关系;

2)新增一个监测类,负责监测和维护Redis服务器集群中的服务器运行状态;

3)新增一个Master选择策略类,负责确定masterslave的切换时机,并选择最合适的Redis服务器充当master

 

4)新增一个代理类,接管当前的Jedis客户端对Redis服务器的读写操作。应用层通过代理类来使用Jedis客户端。代理类需要保证Redis服务器集群对应用层透明

 

 

 

转自:http://blog.sina.com.cn/s/blog_63d8dad801015t9c.html

 

  • 大小: 73.6 KB
分享到:
评论

相关推荐

    Redis安装与使用方法小结

    Redis是一款高性能的键值存储系统,常用于缓存和数据持久化。本文将详细介绍Redis的安装与使用方法,包括从下载、安装、启动、测试、持久化策略、开机启动、安全配置、命令行模糊查询以及设置键的过期时间等方面。 ...

    Redis实践与总结

    ### Redis实践与总结 #### 一、Redis简介与应用场景 Redis是一种开源的内存中的数据结构存储系统,可以作为数据库、缓存以及消息中间件使用。它支持多种数据结构,如字符串(strings)、散列(hashes)、列表...

    Redis从入门到精通(深入剖析)【55集完整资料】44-redis-redis事务小结.avi

    Redis从入门到精通高清,迅雷播放器组件可顺利播放

    redis集群搭建小结

    Redis 集群搭建是一个关键的IT操作,它涉及到分布式数据存储、高可用性和扩展性。Redis 是一个高性能的键值存储系统,广泛应用于缓存、消息队列、计数等多个场景。在集群模式下,Redis 可以通过将数据分散在多个节点...

    微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单

    六、程序测试与小结 文章可能涵盖了编写测试用例以验证Redis Stream消息队列在秒杀场景下的正确性和性能。测试应包括模拟大量并发请求,检查订单创建的正确性,以及验证在高负载下系统的稳定性和伸缩性。 总结,...

    Linux环境安装redis

    小结 通过以上步骤,我们已经成功地安装和配置了 Redis 服务器。在 Linux 环境中安装 Redis 是一个相对简单的过程,只需要下载安装包、拷贝到适当的目录、解压缩、编译安装、配置和启动 Redis 服务器。

    深入理解redis_memcached失效原理(小结)

    Redis 和 Memcached 都是广泛使用的内存数据存储系统,它们常用于缓存和快速数据访问。本文主要讨论了这两种技术的缓存失效原理,特别是针对 Redis 的失效机制进行了深入解析。 首先,我们要明白如何触发 key 的...

    redis常用命令小结

    1、redis-benchmark redis基准信息,redis服务器性能检测 redis-benchmark -h localhost -p 6379 -c 100 -n 100000 100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能 [root@...

    Redis从入门到精通视频.rar

    44-redis-redis事务小结.avi 45-redis-redis消息的发布与订阅.avi 46-redis-redis的主从复制-提供三台redis服务.avi 47-redis-redis的主从复制-启动三台redis服务.avi 48-redis-redis的主从复制-设置主从关系、全量...

    day68Redis高级day68Redis高级

    1.1.3. 小结 RDB方式bgsave的基本流程是: * fork主进程得到一个子进程,共享内存空间 * 子进程读取内存数据并写入新的RDB文件 * 用新RDB文件替换旧的RDB文件 RDB会在什么时候执行?save 60 1000代表什么含义?...

    Redis Sentinel实现哨兵模式搭建小结

    Redis哨兵模式,用现在流行的话可以说就是一个“哨兵机器人”,给“哨兵机器人”进行相应的配置之后,这个”机器人”可以7*24小时工作,它能能够自动帮助你做一些事情,如监控,提醒,自动处理故障等。 Redis-...

    Redis架构下的MySQL数据库性能提升浅析.pdf

    小结 Redis 架构下的 MySQL 数据库性能提升浅析,Redis 的三种理解和 Redis 中的数据结构选择对于 MySQL 数据库性能提升都起着至关重要的作用。通过合理地选择和使用 Redis,能够提高 MySQL 数据库的性能,满足...

    centos redis 集群安装部署 哨兵模式

    CentOS Redis 集群安装...八、小结 CentOS Redis 集群安装部署哨兵模式需要关闭防火墙、安装 GCC、安装 Redis、配置 Redis、安装哨兵模式、启动 Redis 以及配置从机器。通过这些步骤,可以实现 Redis 集群的高可用性。

    小结plus、Redis的配置,基础包

    知识点: 1. Mybatis框架概述:Mybatis是一个半自动化的ORM框架,即对象关系映射框架,它的主要作用是实现Java对象与数据库表的映射。Mybatis让开发者以面向对象的方式操作数据库,但又不完全屏蔽SQL语句,保留了...

    redis设计与实现原理及运作机制

    **小结** 简单动态字符串(SDS)是Redis中一种重要的基础数据结构,它在保证字符串操作高效的同时,也为Redis提供了灵活的内存管理机制。 ##### 1.2 双端链表 (Doubly Linked List) **双端链表的应用** 双端链表在...

    redis简单介绍及安装使用小结

    Redis是一种高性能的键值对数据存储系统,常被用作数据库、缓存和消息中间件。它与Memcached相似,都是基于内存的数据存储,但Redis提供了更多丰富的数据类型,包括字符串(string)、哈希(hash)、列表(list)、集合...

Global site tag (gtag.js) - Google Analytics