当前位置: 首页 > news >正文

Redis03

一、主从复制

一主二从

主机:master 读写

从机:slave 只读

redis.conf配置文件
requirepass 123456
masterauth 123456
​
​
​
docker run -id -p 6379:6379 --name redis7.2 -v  /opt/redis/redis.conf:/usr/local/bin/redis.conf -v  /usr/local/docker/data:/data  redis:7.0.2  redis-server /usr/local/bin/redis.conf
​
docker run -id -p 6380:6379 --name redis7.22 -v  /opt/redis/redis2.conf:/usr/local/bin/redis.conf -v  /usr/local/docker/data2:/data  redis:7.0.2  redis-server /usr/local/bin/redis.conf
​
docker run -id -p 6381:6379 --name redis7.23 -v  /opt/redis/redis3.conf:/usr/local/bin/redis.conf -v  /usr/local/docker/data3:/data  redis:7.0.2  redis-server /usr/local/bin/redis.conf
 

默认情况下,直接启动,三台服务,三台服务都是master主机。

实现主从复制、读写分离

选6379为master,

在6380 和 6381上,分别执行slaveof ip 6379 ,让当前主机为slave从机,让6379为master主机。

测试:

1、防火墙开放端口

firewall-cmd --zone=public --add-port=6379-6381/tcp --permanent

2、云服务器网络安全组放行(腾讯防火墙放行)

6379 6380 5381

3、重启docker容器

systemctl restart docker

4、依次启动三个容器,在从机上守护主机

docker start redis7.2

docker start redis7.22

docker start redis7.23

客户端连接:

redis-cli -h ip -p 6380 -a 123456
slaveof  ip 6379
info replication

主从切换(反客为主)

主机故障,从机变主机的过程。

手动切换

在从机上执行

slaveof no one   让自己变为master
其他服务器守护新的主机
slaveof ip port

哨兵模式

可以实现自动故障切换。

二、springboot整合redis

1、添加依赖

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

2、添加配置

spring:redis:host: 1.94.230.82port: 6381password: 123456database: 0

3、使用模版工具类完成redis的增删改查

package com.hl.mybatis03.web;
​
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
@RestController
@RequestMapping("/redis")
public class RedisTest {@Autowiredprivate RedisTemplate redisTemplate;
​@RequestMapping("/test1")public Object test1(){//新增redisTemplate.opsForValue().set("name", "zhangsan");//查询return redisTemplate.opsForValue().get("name");}
​
}

4、测试

5、redis 序列化及常用方法

@SpringBootApplication
public class Mybatis03Application {
​@Beanpublic RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, String> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // 必须为 String 序列化return template;}
package com.hl.mybatis03.web;
​
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
import java.util.ArrayList;
import java.util.List;
​
@RestController
@RequestMapping("/redis")
public class RedisTest {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate StringRedisTemplate stringRedisTemplate;
​@RequestMapping("/test1")public Object test1(){//新增 修改redisTemplate.opsForValue().set("name", "zhangsan");redisTemplate.opsForValue().set("age",20);List list = new ArrayList();list.add("beijing");list.add("nanjing");list.add("bianjing");redisTemplate.opsForValue().set("list",list);
​redisTemplate.opsForValue().increment("age");//自增加1redisTemplate.opsForValue().increment("age",10); //自增长度  自定义
​redisTemplate.opsForValue().append("name"," hello! "); //追加内容
​String name = (String)redisTemplate.opsForValue().get("name");System.out.println(name.length());
​redisTemplate.opsForValue().getAndDelete("list");
​
​return null;}
​
}

6、springboot+mysql+redis 业务整合

@Service
public class QueenServiceImpl implements QueenService{@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate QueenMapper queenMapper;@Overridepublic List<Queen> getQueens() {Object obj = redisTemplate.opsForValue().get("queen");List<Queen> list = null;if(obj !=null ){list = (List<Queen>)obj;}else{list = queenMapper.getQueens();redisTemplate.opsForValue().set("queen",list);}
​return list;}
}

相关文章:

  • WebGL图形学总结(二)
  • CSS3 2D 转换详解
  • 结构体解决冒泡排序
  • NDS 中文游戏全集下载 任天堂NDS简介NDS支持GBA游戏
  • 【LLM学习笔记4】使用LangChain开发应用程序(上)
  • PTA天梯赛L1 091-100题目解析
  • CSS知识补充 --- 控制继承
  • 阿里巴巴开源的 分布式事务解决方案Seata
  • 第六章 进阶24 小枫的学业
  • 软件测试题
  • DirectShowPlayerService::doRender: Unresolved error code 80040266
  • 【蓝牙】Qt4中向已配对的手机发送PDF文件
  • 《Go语言圣经》通过接口解耦包依赖
  • C++ 泛型编程利器:模板机制
  • OSCP备战-LordOfTheRoot靶机复现步骤
  • UniSAL:用于组织病理学图像分类的统一半监督主动学习方法|文献速递-深度学习医疗AI最新文献
  • 前端工程结构设计指南:如何让模块解耦、易维护、可拓展
  • 京东云 centos vim有操作混乱的问题
  • C/C++ 高频八股文面试题1000题(一)
  • AI 产品的“嵌点”(Embedded Touchpoints)
  • 泉州网站开发建设/软文发布平台哪个好
  • 无锡做公司网站/企业网站seo优化
  • 建筑网站可以ai绘画吗/企业网站seo推广
  • 电脑网站建设在哪里/seo公司外包
  • 有哪些网站程序/百度竞价开户哪家好
  • 做网编去网站还是工作室好/广告公司简介