Redis持久化说明及其单台Linux服务器搭建Redis集群架构

这篇具有很好参考价值的文章主要介绍了Redis持久化说明及其单台Linux服务器搭建Redis集群架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.Redis持久化方式

1.1 RDB快照

说明:RDB快照主要以二进制文件的形式进行存储数据,主要以文件名dump.rdb进行存储,主要设置redis.conf里面设置’save 60 1000’命令可以开启, 表示在60秒内操作1000次进行一次备份数据。在客户端执行save(同步)和bgsave(异步操作)。
Redis持久化说明及其单台Linux服务器搭建Redis集群架构

redis.conf

#修改持久化文件存放的位置
dir /usr/local/redis-5.0.3/data/
#开启RDB快照存储
save 900 1  #表示在900秒中操作1次
save 30 10   #表示在30秒中操作10次
save 60 1000   #表示在60秒中操作100次

Redis持久化说明及其单台Linux服务器搭建Redis集群架构
启动redis相关命令

#RDB存放的文件名修改
dbfilename dump.db

#启动redis服务
src/redis-server  redis.conf

#查看redis服务进程号id
ps  -ef | grep redis

#结束redis服务
kill 2889(进程号id)

#启动redis编辑命令
src/redis-cli  -p 6379

Redis持久化说明及其单台Linux服务器搭建Redis集群架构
Redis持久化说明及其单台Linux服务器搭建Redis集群架构
Redis持久化说明及其单台Linux服务器搭建Redis集群架构

1.2 AOF重写

说明:主要把文件生成为.aof文件,里面主要是<key,value>形式存储。
开启AOF在redis.conf配置

#开启AOF
appendonly yes
#下面三项开启一项
appendfsync always:每次有新命令追加到 AOF 文件时就执行一次 fsync ,非常慢,也非常安全。
appendfsync everysec:每秒 fsync 一次,足够快,并且在故障时只会丢失 1 秒钟的数据。
appendfsync no:从不 fsync ,将数据交给操作系统来处理。更快,也更不安全的选择。

#满足60m后进行从写,下一次是这一次的一倍
auto‐aof‐rewrite‐min‐size 64mb 
auto‐aof‐rewrite‐percentage 100

Redis持久化说明及其单台Linux服务器搭建Redis集群架构
Redis持久化说明及其单台Linux服务器搭建Redis集群架构
Redis持久化说明及其单台Linux服务器搭建Redis集群架构
Redis持久化说明及其单台Linux服务器搭建Redis集群架构

1.3 Redis 4.0混合持久化

说明:在AOF文件开启的情况下,当文件开始备份的时候将会在AOF备份文件中以二进制文件形式进行备份,当时备份之后的值,还是以AOF<key,value>形式进行备份。
开启AOF在redis.conf配置

aof‐use‐rdb‐preamble yes

启动redis混合模式重写

#开启混合模式存储
bgrewriteaof

Redis持久化说明及其单台Linux服务器搭建Redis集群架构
Redis持久化说明及其单台Linux服务器搭建Redis集群架构

二.Redis搭建主从与哨兵架构

Redis持久化说明及其单台Linux服务器搭建Redis集群架构

2.配置主从架构

Redis持久化说明及其单台Linux服务器搭建Redis集群架构

1、复制一份redis.conf文件

2、将相关配置修改为如下值:
port 6380
pidfile /var/run/redis_6380.pid  # 把pid进程号写入pidfile配置的文件
logfile "6380.log"
dir /usr/local/redis-5.0.3/data/6380  # 指定数据存放目录
# 需要注释掉bind
# bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)

3、配置主从复制
replicaof 192.168.0.60 6379   # 从本机6379的redis实例复制数据,Redis 5.0之前使用slaveof
replica-read-only yes  # 配置从节点只读

4、启动从节点
redis-server redis.conf

5、连接从节点
redis-cli -p 6380

6、测试在6379实例上写数据,6380实例是否能及时同步新修改数据

7、可以自己再配置一个6381的从节点

注意:在相关redis文件夹启动,查看配置的文件夹是否存在,不存在,需要手工建立相关的文件夹

2.1 配置6380redis从服务器

1.在conf下复制redis6379改名为redis6380.conf
Redis持久化说明及其单台Linux服务器搭建Redis集群架构
2.修改redis6380.conf配置文件

port 6380
pidfile /var/run/redis_6380.pid  # 把pid进程号写入pidfile配置的文件
logfile "6380.log"
dir /usr/local/redis-5.0.3/data/6380  # 指定数据存放目录
# 需要注释掉bind
# bind 127.0.0.1

replicaof 192.168.2.66 6379   # 从本机6379的redis实例复制数据,Redis 5.0之前使用slaveof
replica-read-only yes  # 配置从节点只读

2.2 配置6381redis从服务器

1.在conf下复制redis6379改名为redis6381.conf
Redis持久化说明及其单台Linux服务器搭建Redis集群架构
2.修改redis6381.conf配置文件

port 6381
pidfile /var/run/redis_6381.pid  # 把pid进程号写入pidfile配置的文件
logfile "6381.log"
dir /usr/local/redis-5.0.3/data/6381  # 指定数据存放目录
# 需要注释掉bind
# bind 127.0.0.1

replicaof 192.168.2.66 6379   # 从本机6379的redis实例复制数据,Redis 5.0之前使用slaveof
replica-read-only yes  # 配置从节点只读

2.3 启动6379、6380、6381服务,看看是否配置成功

src/redis-service conf/redis6379.conf

src/redis-service conf/redis6380.conf

src/redis-service conf/redis6380.conf

src/redis-cli  -p 6379

info

Redis持久化说明及其单台Linux服务器搭建Redis集群架构

2.4 java代码连接redis

2.4.1 关闭linux防火墙(在linux环境进行操作)

systemctl stop firewalld # 临时关闭防火墙
systemctl disable firewalld # 禁止开机启动

2.4.2 导入相关的redis pomjar包

  <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
</dependency>

2.4.3 建立jave连接

package com.tuling.jedis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Pipeline;

import java.util.List;

public class redisTest {

    public static void main(String[] args) {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(20);
        jedisPoolConfig.setMaxIdle(10);
        jedisPoolConfig.setMinIdle(5);

        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "192.168.1.66", 6379, 10000, null);

        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();

            //单挑数据导入
            System.out.println(jedis.set("single","Nickel"));
            System.out.println(jedis.get("single"));

            //******* 管道示例 ********
            Pipeline pl = jedis.pipelined();
            for(int i=0;i<10;i++){
                pl.incr("pipeline");
                pl.set("n"+i,"nickel");
                //模拟管道报错
                //pl.setbit("nickel", -1, true);
            }
            List<Object> results=pl.syncAndReturnAll();
            System.out.println(results);

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if (jedis != null)
                jedis.close();
        }
    }
}

Redis持久化说明及其单台Linux服务器搭建Redis集群架构

2.4 配置哨兵

2.4.1复制sentinel.conf到config下,分别名字叫sentinel-26379.conf、sentinel-26380.conf、sentinel-26381.conf

2.4.2配置26379哨兵

port 26379
daemonize yes
pidfile "/var/run/redis-sentinel-26379.pid"
logfile "26379.log"
dir "/usr/local/redis-5.0.3/data"
# sentinel monitor <master-redis-name> <master-redis-ip> <master-redis-port> <quorum>
# quorum是一个数字,指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2 + 1),master才算真正失效
sentinel monitor mymaster 192.168.0.60 6379 2   # mymaster这个名字随便取,客户端访问时会用到

2.4.3配置26380哨兵

port 26380

daemonize yes

pidfile /var/run/redis-sentinel-26380.pid

logfile "log/26380.log"

dir /usr/local/redis-5.0.3/data/26380

sentinel monitor mymaster 192.168.1.66 6379 2   # mymaster这个名字随便取,客户端访问时会用到

2.4.4配置26381哨兵

port 26381

daemonize yes

pidfile /var/run/redis-sentinel-26381.pid

logfile "log/26381.log"

dir /usr/local/redis-5.0.3/data/26381

sentinel monitor mymaster 192.168.1.66 6379 2   # mymaster这个名字随便取,客户端访问时会用到

Redis持久化说明及其单台Linux服务器搭建Redis集群架构

2.4.5启动哨兵

src/redis-sentinel   conf/company/sentinel-26379.conf 
src/redis-sentinel   conf/company/sentinel-26380.conf 
src/redis-sentinel   conf/company/sentinel-26381.conf 

src/redis‐cli ‐p 26379

Redis持久化说明及其单台Linux服务器搭建Redis集群架构
Redis持久化说明及其单台Linux服务器搭建Redis集群架构

2.4.5启动哨兵

Redis持久化说明及其单台Linux服务器搭建Redis集群架构

2.4.6 java代码连接哨兵

package com.tuling.jedis;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

import java.util.HashSet;
import java.util.Set;

public class SentinelTest {
    public static void main(String[] args) {

        JedisPoolConfig config=new JedisPoolConfig();
        config.setMaxTotal(20);
        config.setMaxIdle(10);
        config.setMinIdle(5);

        String masterName="mymaster";
        Set<String> sentinels=new HashSet<String>();
        sentinels.add(new HostAndPort("192.168.1.66",26379).toString());
        sentinels.add(new HostAndPort("192.168.1.66",26380).toString());
        sentinels.add(new HostAndPort("192.168.1.66",26381).toString());

        JedisSentinelPool jedisSentinelPool=new JedisSentinelPool(masterName,sentinels,config,3000,null);
        Jedis jedis=null;
        try{
            jedis=jedisSentinelPool.getResource();
            System.out.println(jedis.set("age","18"));
            System.out.println(jedis.get("age"));
        }catch (Exception e){
            e.printStackTrace();
        }finally {
           if(jedis!=null){
               jedis.close();
           }
        }
    }
}

Redis持久化说明及其单台Linux服务器搭建Redis集群架构
Redis持久化说明及其单台Linux服务器搭建Redis集群架构

2.5 Spring Boot整合哨兵

2.5.1引入jar

      <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
		</dependency>

2.5.2配置application.yml文件

server:
  port: 8080

spring:
  redis:
    sentinel:
      master: mymaster
      nodes: 192.168.1.66:26379,192.168.1.66:26380,192.168.1.66:26381
    jedis:
      pool:
        max-idle: 50
        min-idle: 10
        max-active: 100
        max-wait: 1000
  datasource: 0
  timeout: 3000

2.5.3启动java代码访问

package com.redis;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController {

    private static final Logger logger = LoggerFactory.getLogger(IndexController.class);

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 测试节点挂了哨兵重新选举新的master节点,客户端是否能动态感知到
     *
     * @throws InterruptedException
     */
    @RequestMapping("/test_sentinel")
    public void testSentinel() throws InterruptedException {
        int i = 1;
        while (true){
            try {
                stringRedisTemplate.opsForValue().set("zhuge"+i, i+""); //jedis.set(key,value);
                System.out.println("设置key:"+ "zhuge" + i);
                i++;
                Thread.sleep(1000);
            }catch (Exception e){
                logger.error("错误:", e);
            }
        }
    }

}

Redis持久化说明及其单台Linux服务器搭建Redis集群架构

2.5.4 StringRedisTemplate与RedisTemplate详解

spring 封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api。在RedisTemplate中提供了几个常用的接口方法的使用,分别是:

  • private ValueOperations<K, V> valueOps;
  • private HashOperations<K, V> hashOps;
  • private ListOperations<K, V> listOps;
  • private SetOperations<K, V> setOps;
  • private ZSetOperations<K, V> zSetOps;

RedisTemplate中定义了对5种数据结构操作

  • redisTemplate.opsForValue();//操作字符串
  • redisTemplate.opsForHash();//操作hash
  • redisTemplate.opsForList();//操作list
  • redisTemplate.opsForSet();//操作set
  • redisTemplate.opsForZSet();//操作有序set
    Redis持久化说明及其单台Linux服务器搭建Redis集群架构
    Redis持久化说明及其单台Linux服务器搭建Redis集群架构
    Redis持久化说明及其单台Linux服务器搭建Redis集群架构

三.Redis队列与stream、Redis 6多线程

1.stream流程图

Redis持久化说明及其单台Linux服务器搭建Redis集群架构

2.redis中stream相关命令

1.生产端命令

xadd 追加消息
xdel 删除消息
xrange 获取消息列表,会自动过滤已经删除的消息
xlen 消息长度
//消息格式为
xadd streamtest * name mark age 18

**xadd表示stream流中的命令,streamtest表示流的名字,*表示自动生成唯一的ID号,name mark age 18表示消息内容。 **

//streamtest 流中增加三条数据
xadd streamtest * name mark age 18
xadd streamtest * name james age 23
xadd streamtest * name king age 19

//获取streamtest 流中数据的长度
xlen streamtest

//获取streamtest 流中所有的数据
xrange streamtest - +

//获取streamtest 流中获取从开始到流ID的数据
xrange streamtest - 1700726396835-0

//获取streamtest 流中数据从某个位置到某个位置
xrange streamtest 1700726302998-0 1700726396835-0


Redis持久化说明及其单台Linux服务器搭建Redis集群架构
Redis持久化说明及其单台Linux服务器搭建Redis集群架构
Redis持久化说明及其单台Linux服务器搭建Redis集群架构文章来源地址https://www.toymoban.com/news/detail-497916.html

到了这里,关于Redis持久化说明及其单台Linux服务器搭建Redis集群架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Redis】Redis 持久化

    Redis有两种持久化方案: RDB持久化 AOF持久化 RDB 全称 Redis Database Backup file(Redis数据备份文件),也被叫做 Redis 数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为 RDB文件,默认是保存在当

    2024年02月05日
    浏览(97)
  • Redis进阶 - Redis持久化

    原文首更地址,阅读效果更佳! Redis进阶 - Redis持久化 | CoderMast编程桅杆 https://www.codermast.com/database/redis/redis-advance-persistence.html 单点Redis的问题 数据丢失问题:Redis 是内存存储,服务重启可能会丢失数据。通过 实现 Redis 数据持久化解决。 并发能力问题:单节点 Redis 并发能力

    2024年02月10日
    浏览(45)
  • 【Redis】Redis持久化方式

    Redis 中有两种持久化方式,分别为 RDB 和 AOF 。 RDB 全称 Redis Database Backup file ,也叫做 Redis 数据快照。简单来说就是把 Redis 中的数据记录到磁盘中。当 Redis 实例故障重启后,从磁盘读取快照文件,恢复数据。 RDB有两种备份方式,一种是主动备份,一种是Redis 内部执行备份 主

    2024年02月02日
    浏览(37)
  • Redis系列--redis持久化

    redis本身运行时数据保存在内存中,如果不进行持久化,那么在redis出现非正常原因宕机或者关闭redis的进程或者关闭计算机后数据肯定被会操作系统从内存中清掉。当然,redis本身默认采用了一种持久化方式,即RDB (Redis DataBase),可以在redis的目录中找到dump.rdb文件,这就是

    2024年02月05日
    浏览(47)
  • 【Redis】Redis持久化机制

    Redis是基于内存存储的数据库,如果遇到服务重启或者崩溃,内存中的数据将会被清空。所以为了确保数据安全性和可靠性,我们需要将内存中的数据持久化到磁盘上。 持久化不仅可以防止由于系统故障、重启或者其他原因导致的数据丢失。还可以用于备份、数据恢复和迁移

    2023年04月20日
    浏览(65)
  • Redis 持久化-RDB和 持久化-AOF 的详细介绍以及区别

    在线文档: https://redis.io/topics/persistence RDB(Redis DataBase) AOF(Append Of File) 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就Snapshot 快照,恢复时将快照文件读到内存 RDB 及其执行流程 对上图的解读 具体流程如下: redis 客户端执行bgsave 命令或者自动触发bgsave 命令;

    2024年02月09日
    浏览(70)
  • redis-持久化-1

    RDB(Redis DataBase) AOF(Append Of File) 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里 Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再

    2024年01月25日
    浏览(33)
  • Redis持久化

    Redis持久化 实现类似照片记录效果的方式,就是 把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照 。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。这个快照文件就称为RDB文件( dump.rdb ),其中,RDB就是Redis DataBase的缩写。 在指定

    2024年02月03日
    浏览(32)
  • 12.redis 持久化

    redis 是一个内存数据库,把数据存储在内存中的,内存中的数据是不持久的,要想做到持久,就需要让redis把数据存储到硬盘上。 为了保证速度块,数据肯定还是得在内存中,但是为了持久化,数据还得想办法存储在硬盘上。 RDB = Redis DataBase 定期备份 RDB 定期的把 Redis 内存中

    2024年02月09日
    浏览(34)
  • Redis的持久化!!!

    首先是如何使用Redis:cmd打开输入redis-server.exe redis.windows.conf即可启动。 持久化: Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。          Redis支持两种方式的持

    2024年01月24日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包