`
buerkai
  • 浏览: 169561 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

reids 主从复制

 
阅读更多
在WINDOWS 下使用redis,需要下载相应的包,见附件。

进入目录,D:\redis-2.4.5-win32-win64\32bit,如果马上想运行的话,直接点击redis-server.exe,然后再打开redis-cli.exe,输入info,就会看到一大堆的信息,说明你配置环境成功了。

如果你想要按照你的配置文件启动的话,先修改配置文件,然后在cmd中进入当前目录,输入redis-server.exe redis.conf,服务器就会按照你的配置启动了,这是启动服务器也需要在命令行启动,redis-cli.exe -h (ip) -p (port),是你电脑的ip,和端口。如果设置了密码,需加上-a passworld。

修改配置文件的方法,见附件。

下面介绍主从负责的配置。
你需要2个redis服务器,我在从服务器上做了如下修改,
port 6553,修改端口号,别与占用其他使用中的端口
masterauth <master-password>,主服务器的密码
slaveof <masterip> <masterport>,该服务器从属于那个主服务器
slave-serve-stale-data yes:在master服务器挂掉或者同步失败时,从服务器是否继续提供服务。
requirepass admin,设置密码。
在主服务器起上,只设置了密码,
requirepass admin


在cmd中启动主从redis服务器,然后使用下面的代码即可跑起来了。




package com.redis;

import java.util.ArrayList;
import java.util.List;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

/***
*
* @author Administrator
*
* 主从设置,需要在主服务器中设置密码;
* 使用cmd 命令行来启动服务器,按照配置启动;
* 客户端需要添加密码:redis-cli.exe -h 192.168.8.145 -p 6553 -a admin;
* redis主从复制,如果我在主服务器上添加一个数据,在从服务器上看得到,但是在主服务器上就看不到从服务器上的数据;
*
*/
public class Test {
/**
     * 非切片客户端链接
     */
    private Jedis jedis;

    /**
     * 非切片链接池
     */
    private JedisPool jedisPool;

    /**
     * 切片客户端链接
     */
    private ShardedJedis shardedJedis;

    /**
     * 切片链接池
     */
    private ShardedJedisPool shardedJedisPool;
   
    public Test(){
    initialPool();
    initialShardedPool();
    shardedJedis = shardedJedisPool.getResource();
        jedis = jedisPool.getResource();
    }
   
    private void initialPool()
    {
        // 池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(20);
        config.setMaxIdle(5);
        config.setMaxWait(10000);
        config.setTestOnBorrow(false);

        jedisPool = new JedisPool(config, "192.168.8.145", 6379, 10000, "admin");
       
    }
   
    /**
     * 初始化切片池
     */
    private void initialShardedPool()
    {
        // 池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(20);
        config.setMaxIdle(5);
        config.setMaxWait(10000);
        config.setTestOnBorrow(false);
        // slave链接
        List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
        JedisShardInfo info= new JedisShardInfo("192.168.8.145", 6553,"master");
        info.setPassword("admin");
        shards.add(info);

        // 构造池
        shardedJedisPool = new ShardedJedisPool(config, shards);
       
    }

   
    public void show()
    {
        // key检测
        testKey();
        // string检测
        testString();
        // list检测
        testList();
        // set检测
        testSet();
        // sortedSet检测
        testSortedSet();
        // hash检测
        testHash();
        shardedJedisPool.returnResource(shardedJedis);
    }
   
   
    private void testKey()
    {
        System.out.println("=============key==========================");
        // 清空数据
       // System.out.println(jedis.flushDB());
        System.out.println(jedis.echo("foo"));
        // 判断key否存在
        System.out.println(shardedJedis.exists("foo"));
        shardedJedis.set("key", "values");
        System.out.println(shardedJedis.exists("key"));
    }
   
   
    private void testString()
    {
        System.out.println("=============String==========================");
        // 清空数据
        System.out.println(jedis.flushDB());
        // 存储数据
        shardedJedis.set("foo", "bar");
        System.out.println(shardedJedis.get("foo"));
        // 若key不存在,则存储
        shardedJedis.setnx("foo", "foo not exits");
        System.out.println(shardedJedis.get("foo"));
        // 覆盖数据
        shardedJedis.set("foo", "foo update");
        System.out.println(shardedJedis.get("foo"));
        // 追加数据
        shardedJedis.append("foo", " hello, world");
        System.out.println(shardedJedis.get("foo"));
        // 设置key的有效期,并存储数据
        shardedJedis.setex("foo", 2, "foo not exits");
        System.out.println(shardedJedis.get("foo"));
        try
        {
            Thread.sleep(3000);
        }
        catch (InterruptedException e)
        {
        }
        System.out.println(shardedJedis.get("foo"));
        // 获取并更改数据
        shardedJedis.set("foo", "foo update");
        System.out.println(shardedJedis.getSet("foo", "foo modify"));
        // 截取value的值
        System.out.println(shardedJedis.getrange("foo", 1, 3));
        System.out.println(jedis.mset("mset1", "mvalue1", "mset2", "mvalue2", "mset3", "mvalue3", "mset4", "mvalue4"));
        System.out.println(jedis.mget("mset1", "mset2", "mset3", "mset4"));
        System.out.println(jedis.del(new String[]
        {
            "foo", "foo1", "foo3"
        }));
    }
   
    private void testList()
    {
        System.out.println("=============list==========================");
        // 清空数据
        System.out.println(jedis.flushDB());
        // 添加数据
        shardedJedis.lpush("lists", "vector");
        shardedJedis.lpush("lists", "ArrayList");
        shardedJedis.lpush("lists", "LinkedList");
        // 数组长度
        System.out.println(shardedJedis.llen("lists"));
        // 排序
        System.out.println(shardedJedis.sort("lists"));
        // 字串
        System.out.println(shardedJedis.lrange("lists", 0, 3));
        // 修改列表中单个值
        shardedJedis.lset("lists", 0, "hello list!");
        // 获取列表指定下标的值
        System.out.println(shardedJedis.lindex("lists", 1));
        // 删除列表指定下标的值
        System.out.println(shardedJedis.lrem("lists", 1, "vector"));
        // 删除区间以外的数据
        System.out.println(shardedJedis.ltrim("lists", 0, 1));
        // 列表出栈
        System.out.println(shardedJedis.lpop("lists"));
        // 整个列表值
        System.out.println(shardedJedis.lrange("lists", 0, -1));

    }
   
    private void testSet()
    {
        System.out.println("=============set==========================");
        // 清空数据
        System.out.println(jedis.flushDB());
        // 添加数据
        shardedJedis.sadd("sets", "HashSet");
        shardedJedis.sadd("sets", "SortedSet");
        shardedJedis.sadd("sets", "TreeSet");
        // 判断value是否在列表中
        System.out.println(shardedJedis.sismember("sets", "TreeSet"));;
        // 整个列表值
        System.out.println(shardedJedis.smembers("sets"));
        // 删除指定元素
        System.out.println(shardedJedis.srem("sets", "SortedSet"));
        // 出栈
        System.out.println(shardedJedis.spop("sets"));
        System.out.println(shardedJedis.smembers("sets"));
        //
        shardedJedis.sadd("sets1", "HashSet1");
        shardedJedis.sadd("sets1", "SortedSet1");
        shardedJedis.sadd("sets1", "TreeSet");
        shardedJedis.sadd("sets2", "HashSet2");
        shardedJedis.sadd("sets2", "SortedSet1");
        shardedJedis.sadd("sets2", "TreeSet1");
        // 交集
        System.out.println(jedis.sinter("sets1", "sets2"));
        // 并集
        System.out.println(jedis.sunion("sets1", "sets2"));
        // 差集
        System.out.println(jedis.sdiff("sets1", "sets2"));
    }

   
    private void testSortedSet()
    {
        System.out.println("=============zset==========================");
        // 清空数据
        System.out.println(jedis.flushDB());
        // 添加数据
        shardedJedis.zadd("zset", 10.1, "hello");
        shardedJedis.zadd("zset", 10.0, ":");
        shardedJedis.zadd("zset", 9.0, "zset");
        shardedJedis.zadd("zset", 11.0, "zset!");
        // 元素个数
        System.out.println(shardedJedis.zcard("zset"));
        // 元素下标
        System.out.println(shardedJedis.zscore("zset", "zset"));
        // 集合子集
        System.out.println(shardedJedis.zrange("zset", 0, -1));
        // 删除元素
        System.out.println(shardedJedis.zrem("zset", "zset!"));
        System.out.println(shardedJedis.zcount("zset", 9.5, 10.5));
        // 整个集合值
        System.out.println(shardedJedis.zrange("zset", 0, -1));
    }

    private void testHash()
    {
        System.out.println("=============hash==========================");
     // 清空数据
        System.out.println(jedis.flushDB());
        //添加数据
        shardedJedis.hset("hashs", "entryKey", "entryValue");
        shardedJedis.hset("hashs", "entryKey1", "entryValue1");
        shardedJedis.hset("hashs", "entryKey2", "entryValue2");
        // 判断某个值是否存在
        System.out.println(shardedJedis.hexists("hashs", "entryKey"));
        // 获取指定的值
        System.out.println(shardedJedis.hget("hashs", "entryKey"));
        // 批量获取指定的值
        System.out.println(shardedJedis.hmget("hashs", "entryKey", "entryKey1"));
        // 删除指定的值
        System.out.println(shardedJedis.hdel("hashs", "entryKey"));
        // 为key中的域 field 的值加上增量 increment
        System.out.println(shardedJedis.hincrBy("hashs", "entryKey", 123l));
        // 获取所有的keys
        System.out.println(shardedJedis.hkeys("hashs"));
        // 获取所有的values
        System.out.println(shardedJedis.hvals("hashs"));
    }
   
public static void main(String[] args) {
new Test().show();

}
}
分享到:
评论

相关推荐

    Redis主从复制和集群配置

    ### Redis主从复制和集群配置详解 #### 一、Redis主从复制原理及配置 **1.1 概述** Redis的主从复制机制是一种重要的数据同步方式,它支持一个或多个从数据库(slave)与主数据库(master)之间进行数据同步。其中,...

    Redis主从复制以及主从复制技术原理.docx

    Redis 主从复制技术原理 概述 Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。Redis 主从复制是指将一台 Redis 服务器的数据,复制到...

    redis主从复制集群

    ### Redis 主从复制集群知识点详解 #### 一、Redis 主从复制概述 Redis 主从复制是一种数据冗余机制,主要用于实现读写分离、负载均衡以及数据备份等目的。通过搭建主从复制集群,可以有效避免单点故障问题,并且...

    redis主从复制活动图

    描述redis主从复制的过程中的各种细节,包括各个阶段所使用的事件处理函数

    redis常用命令,redis配置文件,redis持久化,redis事务,redis主从复制,jedis的使用

    下面是对 Redis 的常用命令、配置文件、持久化、事务、主从复制、Jedis 使用的详细讲解。 Redis 常用命令 Redis 提供了很多有用的命令来管理和操作数据。下面是一些常用的 Redis 命令: * SET key value:设置...

    LAMP架构+Redis主从复制.docx

    LAMP架构+Redis主从复制 本文档主要介绍了LAMP架构的安装和配置,以及Redis主从复制的设置。LAMP架构是指Linux操作系统、Apache HTTP服务器、MySQL数据库和PHP编程语言的组合,而Redis则是一个开源的、基于内存的...

    Redis主从复制+哨兵配置手册.docx

    Redis 主从复制和哨兵配置手册 Redis 主从复制是一种高可用性解决方案,可以确保数据的安全和可靠性。在这个手册中,我们将详细介绍 Redis 主从复制的配置和哨兵的配置。 环境准备 在开始配置 Redis 主从复制之前...

    第02篇:Redis主从复制getshell1

    1、生成恶意.so文件,下载RedisModules-ExecuteCommand使用make编译即可生成 1、监听本地1234端口 2、将Redis服务器设置

    通过SSRF操作Redis主从复制写Webshell_R3start1

    1.使用 DICT 协议添加一条测试记录 2.设置保存路径 3.设置保存文件名 4.保存 1.连接远程主服务器 2.设置保存路径 3.设置保存文件名 4.保存

    深入剖析Redis主从复制.pdf

    本文将深入探讨Redis主从复制的机制,包括全同步和部分同步的过程,以及积压空间在主从复制中的作用。 在Redis主从复制中,有两种同步方式:全同步和部分同步。全同步发生在主从服务器初次建立连接或从服务器需要...

    windows下redis主从复制文件

    windows下redis主从复制。一个master,两个slave。附带博客介绍https://blog.csdn.net/xixiyuguang/article/details/105121660

    Redis主从复制教程与实战

    Redis主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且...

    redis 主从切换 实现HA 的方法和工具

    Redis主从复制是其HA的基础,它允许一个Redis实例(主节点)的数据被多个实例(从节点)实时同步。当主节点出现问题时,可以快速切换到一个从节点继续提供服务。以下是主从复制的基本步骤: 1. 配置主节点:在主...

    redis主从复制过程.rar

    本压缩包中的"redis主从复制过程.pdf"文件详细介绍了Redis的主从复制流程。以下是关于Redis主从复制的关键知识点: 1. **复制的角色**: - 主服务器(Master):负责接收并处理客户端的写请求,更新数据。 - 从...

    2、redis主从复制以及密码、配置文件启动1

    在本例中,我们将探讨如何设置Redis主从复制,配置密码保护,通过配置文件启动Redis,并引入Sentinel哨兵系统来实现故障切换。 首先,我们需要准备至少三个Redis实例,一个作为主节点(master),两个作为从节点...

    NoSQL之Redis主从复制集群部署.pdf

    NoSQL之Redis主从复制集群部署,即通过搭建Redis主从复制来形成高可用性、高可扩展性的集群系统。在Redis集群中,一个主服务器可以有多个从服务器,主服务器负责处理写操作并复制数据到从服务器,而从服务器则用于...

Global site tag (gtag.js) - Google Analytics