Redis进阶

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
对业务和数据之间相互关系 非常清晰的理解和概念

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

上一篇:ssm使用全注解实现增删改查案例——index.jsp


下一篇:mysql-为什么此触发器使我的某些插入挂起?