`

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 数据库的性能,满足...

    小结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