您的位置:首页 > 数据库 > Redis

【redis测试学习记录】搭建+集群配置+数据持久化验证丨过程与问题

2020-02-29 23:16 543 查看

丨完全菜鸟向学习记录丨-2019.2-Redis

上周整了zkclient,没有记录。你自己心里有B-树就可以

这周开整redis,主要是涉及到搭建环境,配置集群(不同策略)以及数据持久化的验证

环境搭建

——RUNOOB菜鸟教程上有教程的我一般就不会看其他的了。这边详细环境配置我是参考:菜鸟教程-Redis教程

       虽然也其实没啥好配的下载解压添加path就完事了

——环境搭建这块接下来就是简单的写入读取删除三连,整zkclient的时候也整过这个,写起来都有内置函数,就差不多

       话虽这么说但弱智错误还是好多

【Q1】does not contain a main type

maven web项目非console报错。主要就是run的时候run不出来,说找不到主类。

 

重新建项目勾选第一项create a simple project就好了

【Q2】Connection refused: connect

唉弱智问题记录,请确认IP地址和端口有无写对,一般的地址和端口见下面代码。

完整代码如下(pom文件里要配置redis的dependency,这里就不上配置代码了):

[code]package redis;

import redis.clients.jedis.Jedis;

public class RedisTesting {

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("尝试连接中...");
Jedis jedis = new Jedis("127.0.0.1",6379);
System.out.println();
System.out.println("连接成功!服务正在运行"+jedis.ping()+"\n");

jedis.set("name", "keyword");
String name = jedis.get("name");
System.out.println("name:"+name);
Long result = jedis.del("name");
System.out.println("del:"+result);
}

}

运行输出结果:

配置集群策略

更新:我开始了

关键词:我没有虚拟机,是windows端的配置

我突然发现之前写的草稿没了,现在只能凭记忆补补这样子

之前zkclient也碰到过集群的设置,意思就是要手动改改conf文件。第一步当然是配置环境。

如果有朋友看到这个,那啥,具体的配置教程你看看别人的,我这只有弱智错误集锦。如果我还搞得动我会把我主要参考的博文连接放在下边,但浏览博客总有潜规则,如果你没看到超链接就说明我懒得搞了反正没人看

【Q1】新版本的ruby自带包管理工具rubygem,不用下载,直接gem install redis

【Q2】有一些教程提到的redis-trib.rb文件,不知道是不是因为windows,总之我在官网下载下来的压缩包里是没得这个文件的,需要找找这个文件然后保存网页到安装目录

【Q3】Sorry, can't connect to node 192.168.x.x:7001

这破问题搞了我大概一整个下午吧,总之就是几个要素:

         1)要注释掉requirepass

         2)请ipconfig获取自己的ip地址使用,不要用120.0.0.1或者其他乱七八糟的,此时主conf文件里的bind可以注释掉

         3)搞事记得带鼠标,这种拼命右键的工作没鼠标太麻烦了

【Q4】无法启动服务

完 全 不 知 道 怎 么 解 决,这问题太恐怖了,先是全部无法启动,然后变成只能启动一个,然后slave不能启动,反正我是全部删掉服务再重新对比conf文件然后建立服务才整好,实在不行就重启吧是不是(我又不知道,我也不认字.jpg)

【Q5】删除服务需要以管理员身份打开cmd(弱智问题再次出现),命令是sc delete 服务名

【Q6】写好的博文记得及时保存(?

因为我主要是要验证集群策略,这边connect完毕之后似乎会自动创建主从。在conf文件里添加slave不知道为啥无法启动服务,放弃了,还是让它自己建吧。

再更新:这破题做了两三天

主从

昨天建的6节点集群,鼓捣大半天可以正常运行查询之类。放进java测试大概是这样:

[code]public class RedisTesting {

public static void main(String[] args){

System.out.println("尝试连接中...");
System.out.println();

Set<HostAndPort> nodes = new HashSet<HostAndPort>();
nodes.add(new HostAndPort("192.168.102.1",7101));
nodes.add(new HostAndPort("192.168.102.1",7300));

JedisCluster jedisCluster = new JedisCluster(nodes);
System.out.println("尝试连接中...");

jedisCluster.set("desc", "devotion");
String result = jedisCluster.get("desc");

System.out.println("尝试连接中...");
System.out.println(result);

}

}

大概意思就是当你把所有在集群内部的IP+端口加进hashset nodes中,然后利用jedisCluster集群操控整个集群,那么set与get都是集群范围内的。也就是集群的基本特征。但这种集群运作不好看主从的关系。于是有了如下代码:

[code]public class RedisTesting {

public static void main(String[] args) throws IOException{
System.out.println("尝试连接中...");
System.out.println();

Jedis mnode = new Jedis("127.0.0.1",6380);//主机
Jedis snode = new Jedis("127.0.0.1",6381);//从机
System.out.println("尝试连接中...");
//配从不配主
snode.slaveof("127.0.0.1",6380);
System.out.println("尝试连接中...");
mnode.set("desc", "devotion");//主机写

try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  //防止数据还未复制进从机

String result = snode.get("desc");//从机读
System.out.println("尝试连接中...");
System.out.println(result);
mnode.close();
snode.close();
}

}

两个代码块的结果都是能正常读到那句devotion。运行代码前都要先配置并启动好各个不同的端口配置。

哨兵

按照以下两篇博文更改了一下配置:

Redis集群主从复制(一主两从)搭建配置教程【Windows环境】

Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

在命令行中可以正常运行哨兵了,配置主6379,从6380/6381,当shundown6379之后,6380自动变为master与从节点6381相连。

这边还要编程配一下:

[code]public class RedisTesting {

    public static void main(String[] args) throws IOException{
        System.out.println("尝试连接中...")
        System.out.println();

  
        Jedis mnode = new Jedis("127.0.0.1",6379);//主机  
        Jedis snode = new Jedis("127.0.0.1",6380);//从机  
        Jedis pnode = new Jedis("127.0.0.1",6381);//从机  
        System.out.println("尝试连接中...");
        //配从不配主  
        mnode.slaveof("127.0.0.1",6380);
        pnode.slaveof("127.0.0.1",6380);
        System.out.println("尝试连接中...");
        snode.del("desc");
        snode.set("desc", "devotion");//主机写 
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
      
        String result = pnode.get("desc");//从机读  
        System.out.println("尝试连接中...");
        System.out.println(result); 
        snode.close();
        String result1 = pnode.get("desc");//从机读  
        System.out.println("尝试连接中...");
        System.out.println(result1);
    }

}

用clode函数模仿了node的shutdown,其实不知道标不标准...

数据持久化验证

这个地方没遇到什么问题,只是似乎只能cmd+客户端验证

过程参考redis学习(九)——数据持久化

以下是结果(RDB方式:定时持久化):

shundown之后重启redis,再次查询name还是能查到的

换另一种方法AOF,然后就出问题了,打脸

【Q1】很多博文都直接说更改config文件中的appendonly从no改为yes,再验证即可查看到结果,但我这边机器上改好了文件夹里连个appendonly.aof文件都没有。不知道是不是所有人都会出现这种问题。经过特殊姿势搜索为什么没有appendonly.aof,找到答案。即便已经修改了appendonly的属性也需要执行两行代码(在安装目录下的cmd中执行):

[code]redis-cli config set appendonly yes
redis-cli config set save “”

这之后我的文件夹中就出现了.aof文件了。另外顺便一提我这边没有叫redis.conf的文件,只有redis.windows.conf和redis.windows-service.conf,这两个里面都有appendonly的设置,我两个都改了(但好像不需要)。

以下是结果(AOF方式:随时持久):

aof文件的内容,也就是说你那边在redis-cli.exe里搞事,这边就把你搞的事全记下

重启redis依旧能够查到原有的keyvalue:

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Rurinta 发布了3 篇原创文章 · 获赞 1 · 访问量 241 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐