ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis进阶

2021-05-15 22:05:21  阅读:205  来源: 互联网

标签:进阶 redis Redis 192.168 sentinel Starting 节点


1.事务管理 (Redis事务并不是真正意义上的事务 原理只是队列(没有隔离性))

DB			Redis
begin		multi		事务开启
commit		exec		事务提交
rollback	discard		事务回滚

watch 事务锁 -> 事务提交时如果事务锁关联key发生变化 则事务操作取消

注意:事务管理配合分布式锁实现批量更新

2.主从复制 Master-Slave Replication ->

Master 主节点(1)	-> 写 (可以读)
	
	192.168.158.11 : 6371	
	
	关闭持久化


Slave 从节点(N)		-> 读 (不能写)  持久化

	192.168.158.11 : 6372
	192.168.158.11 : 6373
	
	主从配置
		slaveof 192.168.158.11 6371
	
	开启持久化 RDB
		 dump6372.rdb
		 dump6373.rdb
		

优势:
	读写分离 
	从节点 负载均衡 高可用性 
	
缺点:
	主节点 发生故障 数据丢失

3.哨兵模式 Sentinel -> HA (随机选举)

sentinel.conf 配置解析

//端口号
5 port 26379	

//默认安排和选举规则
//	 哨兵     监控	  主节点        ip    端口号      法定人数(超过法定人数完成选举 一般为参加选举人数的一半)
36 # sentinel monitor <master-name> <ip> <redis-port> <quorum>
53 sentinel monitor mymaster 192.168.158.11 6371 1

//心跳监控频率 
74 # sentinel down-after-milliseconds <master-name> <milliseconds>
//默认30秒  哨兵30秒内没有获取主节点的心跳 则主节点宕机 开启选举模式
82 sentinel down-after-milliseconds mymaster 30000

92 # sentinel failover-timeout <master-name> <milliseconds>
//3分钟之内完成选举
115 sentinel failover-timeout mymaster 180000

优势:
	主从复制 Master-Slave Replication 有力补充 实现主节点高可用性

4.集群模式 Cluster -> HA (区块链去中心化)

检查光驱  -> 光盘是否设置并连接成功

(1)准备工作
			挂载光盘:mount /dev/cdrom /mnt
			配置yum的源 /etc/yum.repos.d
			cd /etc/yum.repos.d
			rm -rf *
			vi my.repo
				[media]
				name=Red Hat Enterprise Linux 7.4
				baseurl=file:///mnt
				enabled=1
				gpgcheck=1
				gpgkey=file:///mnt/RPM-GPG-KEY-redhat-release
	
(2)安装ruby环境---> 部署Redis Cluster
		    Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言
			yum install ruby
			 
(3)安装Ruby访问Redis的接口
			gem install ~/tools/redis-3.0.5.gem
			 

(4)自动部署(6个节点)
			
			拷贝到安装目录的bin目录下
				/root/envs/redis_3.0.5/utils/create-cluster/create-cluster
				/root/envs/redis_3.0.5/src/redis-trib.rb

			修改create-cluster命令的路径 
				/root/envs/redis/bin/
			
			bin/create-cluster start   ----> 启动6个Redis的实例
					Starting 30001
					Starting 30002
					Starting 30003
					Starting 30004
					Starting 30005
					Starting 30006

			bin/create-cluster create ---->  创建Redis Cluster
			
			bin/redis-trib.rb check 192.168.11.12:30001 ----> 检查Redis Cluster

	
Hash槽 默认大小16MB = 16384KB -> 集群分割槽位独立存储 信息共享
Redis集群添加数据 对key进行Hash运算 结果 0-16384 -> 555

Jedis应用

1.事务管理

public void test2() {
	JedisPoolConfig poolConfig = new JedisPoolConfig();
	JedisPool jedisPool = new JedisPool(poolConfig, host, port);
	Jedis jedis= jedisPool.getResource();
	String k1 = "zhangsan";
	String k2 = "lisi";
	int money = 1000;
	
	//分布式锁 -> 隔离性 独占
	if("OK".equals(jedis.set("LOCK", "1234", "NX", "EX", 3))){
		//事务管理
		Transaction tx = jedis.multi();
		try {
			tx.decrBy(k1, money);
			tx.incrBy(k2, money);
			//System.out.println(1/0);
			List<Object> results = tx.exec();
			if(results!=null){
				for(Object result:results){
					System.out.println(result);
				}
			}				
		} catch (Exception e) {
			tx.discard();
			e.printStackTrace();
		}finally{
			if("1234".equals(jedis.get("LOCK"))){
				jedis.del("LOCK");
			}
			jedis.close();
		}
	}		
}

2.集群模式

Set<HostAndPort> nodes = new HashSet<>();
for(int i=30001;i<=30006;i++){
	nodes.add(new HostAndPort(host, i));
}
JedisPoolConfig poolConfig = new JedisPoolConfig();
JedisCluster cluster = new JedisCluster(nodes, poolConfig);

//不能使用事务  (宕机回滚 不太现实)

//自动匹配获取数据   去中心化
System.out.println(cluster.get("k1"));

cluster.close();

大数据 BigData -> 铺垫 (分布式系统)

1.why
数据存储 -> Google GFS -> HDFS 分布式文件存储系统
数据运算 -> MapReduce -> 分步运算合成统计 变量矩阵

2.how
对业务和数据之间相互关系 非常清晰的理解和概念

案例解析 - 电商平台中的购物车模块

标签:进阶,redis,Redis,192.168,sentinel,Starting,节点
来源: https://blog.csdn.net/zhangzhanbin/article/details/116864361

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有