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

Redis集群的搭建和Redis的使用

Redis集群的搭建和Redis的使用

一.Redis的简介和用途

简介
Redis是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

五种用途

1.全页面缓存

整页缓存。如果你正在使用服务器端呈现的内容,则不需要为每个单独的请求重新渲染每个页面。使用如Redis这样的缓存,你可以缓存经常请求的内容,从而大大减少请求最多的页面的延迟,并且大多数框架针对Redis缓存页面都有hooks。

// 设置全页面缓存1分钟
SET key “…” EX 60
// 获取全页面
GET key

2.顺序排列

由于Redis在内存中Set数据结构可以非常快速和高效进行递增和递减,性能远远高于SQL查询。比较这与Redis的排序集相结合意味着你可以以毫秒为单位抓取列表中评分最高的项目,而且实现起来非常容易。

// 向排序集合中添加值
ZADD sortedSet 1 “one”
// 从排序集合中获取所有值
ZRANGE sortedSet 0 -1
// 从排序集合中获取所有值与权重
ZRANGE sortedSet 0 -1 WITHSCORES

3.会话Session存储

我所见的Redis最常见的用途是会话存储。与其他会话存储(如Memcache)不同,Redis可以保留数据,以便在缓存停止的情况下,在重新启动时,所有数据仍然存在。即便不是需要严格持续的任务,此功能仍可以为你的用户省去大量的麻烦。没有人会乐于见到他们的会话被无缘无故随机删掉。

// 设置一分钟过期的session
SET randomHash “{userId}” EX 60
// 获取用户ID
GET randomHash

4.队列

使用Redis可以做的一个不太常见,但非常有用的事情是排队。无论是电子邮件队列还是其他应用程序使用的数据,你都可以在Redis中创建一个高效的队列。任何熟悉堆栈以及会push和pop项目的开发人员都可以轻松自然地使用此功能。

// 添加消息
HSET messages
ZADD due <due_timestamp>
// 接收消息
ZRANGEBYSCORE due -inf <current_timestamp> LIMIT 0 1
HGET messages <message_id>
// 删除消息
ZREM due <message_id>
HDEL messages <message_id>

5.pub/sub

Redis在真实世界的最终用法即我将在这篇文章中提出的pub / sub。这是Redis内置的最强大的功能之一;得到的可能是无限的。你可以创建一个实时聊天系统,在社交网络上触发好友请求的通知等等。这个功能是Redis提供的最被低估的功能之一,但功能非常强大,而且使用简单。

// 向通道中推送消息
PUBLISH channel message
// 从通道中获取消息
SUBSCRIBE channel

二.搭建Redis集群

注意:配置集群前需要先安装ruby,并且要求ruby语言版本大于2.0.0,集群至少需要6个节点

1.获取redis源码包
在这里插入图片描述
解压进入目录并安装

make && make install
在这里插入图片描述

cd /usr/local/

mkdir redis_cluster

cd redis_cluster

mkdir 7000 7001 7002 7003 7004 7005 //分别代表三个节点

其对应端口 7000 7001 7002

//创建7000节点为例,拷贝到7000目录

cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7000/   cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7001/   cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7002/cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7003/   cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7004/   cp /usr/local/redis-3.2.1/redis.conf  ./redis_cluster/7005/

在这里插入图片描述
修改配置文件

daemonize    yes                          //redis后台运行pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7002,7003port  7000                                //端口7000,7002,7003cluster-enabled  yes                      //开启集群  把注释#去掉cluster-config-file  nodes_7000.conf      //集群的配置  配置文件首次启动自动生成 7000,7001,7002cluster-node-timeout  5000                //请求超时  设置5秒够了appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志

在这里插入图片描述
cd /usr/local (启动Redis集群)

redis-server redis_cluster/7000/redis.confredis-server redis_cluster/7001/redis.conf redis-server redis_cluster/7002/redis.confredis-server redis_cluster/7003/redis.confredis-server redis_cluster/7004/redis.conf redis-server redis_cluster/7005/redis.conf

在这里插入图片描述
安装yum仓库

yum install centos-release-scl-rh

在这里插入图片描述

安装高版本的ruby

yum install rh-ruby23  -y

在这里插入图片描述

scl  enable  rh-ruby23 bash

在这里插入图片描述
安装gem

gem install redis

在这里插入图片描述

启动集群(刚开始搭建集群时,需要执行,下次再启动集群则只需要 redis-server redis_cluster/7000/redis.conf)

/usr/local/redis-3.2.1/src/redis-trib.rb create --replicas 1 192.168.122.204:7000 192.168.122.204:7001 192.168.122.204:7002 192.168.122.204:7003 192.168.122.204:7004 192.168.122.204:7005
在这里插入图片描述
测试,在7000上set,在7002上get
在这里插入图片描述

三.使用Java实现对Redis集群的数据操作

springboot整合Redis实现对Redis数据库的操作

1.springboot中application.yml配置文件,节点信息(或者是properties.yml)

spring:redis:cluster:#设置key的生存时间,当key过期时,它会被自动删除;expire-seconds: 120#设置命令的执行时间,如果超过这个时间,则报错;command-timeout: 101000#设置redis集群的节点信息,其中namenode为域名解析,通过解析域名来获取相应的地址;nodes: 192.168.58.130:7000,192.168.58.130:7001,192.168.58.130:7002,192.168.58.130:7003,192.168.58.130:7004,192.168.58.130:7005

2.controller中的具体实现(测试)

@RestController
public class RedisController {@Autowiredprivate RedisProperties redisProperties;@Autowiredprivate RedisConfig redisConfig;@Autowiredprivate JedisClientCluster jedisClientCluster;@RequestMapping(value = "getRedisValue")public String getRedisValue(){List<Person> list = new ArrayList<>();for (int i=0;i<10;i++){Person person = new Person();person.setId(UUID.randomUUID().toString());person.setAge(30+i);person.setName("张三");person.setPassword("123456789");System.out.println("哈哈哈:" + redisProperties.toString());System.out.println("哈哈哈:" + redisConfig.getJedisCluster().getClusterNodes());System.out.println(jedisClientCluster.set("yp", "123456"));System.out.println(jedisClientCluster.get("yp"));System.out.println(jedisClientCluster.get("12"));list.add(person);}String string = JSONObject.toJSONString(list);jedisClientCluster.set("person集合",string);jedisClientCluster.set("嘿嘿嘿", "<html lang=\"en\">\n" +"<head>\n" +"    <meta charset=\"UTF-8\">\n" +"    <title>Title</title>\n" +"</head>\n" +"<body style=\"color: #666; font-size: 14px; font-family: 'Open Sans',Helvetica,Arial,sans-serif;\">\n" +"<div class=\"box-content\" style=\"width: 80%; margin: 20px auto; max-width: 1500px; min-width: 600px;\">\n" +"    <div class=\"header-tip\" style=\"font-size: 12px;\n" +"                                   color: #aaa;\n" +"                                   text-align: right;\n" +"                                   padding-right: 25px;\n" +"                                   padding-bottom: 10px;\">\n" +"    </div>\n" +"    <div class=\"info-top\" style=\"padding: 15px 25px;\n" +"                                 border-top-left-radius: 10px;\n" +"                                 border-top-right-radius: 10px;\n" +"                                 background: {0};\n" +"                                 color: #fff;\n" +"                                 overflow: hidden;\n" +"                                 line-height: 32px;\">\n" +"        <div style=\"color:#010e07\"><strong>分销平台产品列表通知</strong></div>\n" +"    </div>\n" +"    <div class=\"info-wrap\" style=\"border-bottom-left-radius: 10px;\n" +"                                  border-bottom-right-radius: 10px;\n" +"                                  border:1px solid #ddd;\n" +"                                  overflow: hidden;\n" +"                                  padding: 15px 15px 20px;\">\n" +"        <div class=\"tips\" style=\"padding:15px;\">\n" +"            <p style=\" list-style: 160%; margin: 10px 0;\">Hi,</p>\n" +"            <p style=\" list-style: 160%; margin: 10px 0;\">{1}</p>\n" +"        </div>\n" +"        <div class=\"time\" style=\"text-align: right; color: #999; padding: 0 15px 15px;\">{2}</div>\n" +"        <br>\n" +"        <table class=\"list\" style=\"width: 100%; border-collapse: collapse; border-top:1px solid #eee; font-size:12px; table-layout: fixed;\">\n" +"            <thead>\n" +"            <tr style=\" background: #fafafa; color: #333; border-bottom: 1px solid #eee;\">\n" +"                {3}\n" +"            </tr>\n" +"            </thead>\n" +"            <tbody>\n" +"            {4}\n" +"            </tbody>\n" +"        </table>\n" +"    </div>\n" +"</div>\n" +"</body>\n" +"</html>");return jedisClientCluster.get("嘿嘿嘿");}}

2.获取节点配置信息配置类 RedisProperties

//读取application.yml配置文件中的属性信息到bean中,并注入到spring容器;
/*** @Description: 使用ConfigurationProperties注解读取yml文件中的字段值,并使用Component注入到spring容器中;*/
//依赖注入
@Component
//该注解用于读取配置文件中的属性,其中prefix表示前缀;  获取配置文件的配置信息
@ConfigurationProperties(prefix = "spring.redis.cluster")public class RedisProperties {private int expireSeconds;private String nodes;private int commandTimeout;public int getExpireSeconds() {return expireSeconds;}public void setExpireSeconds(int expireSeconds) {this.expireSeconds = expireSeconds;}public String getNodes() {return nodes;}public void setNodes(String nodes) {this.nodes = nodes;}public int getCommandTimeout() {return commandTimeout;}public void setCommandTimeout(int commandTimeout) {this.commandTimeout = commandTimeout;}@Overridepublic String toString() {return "RedisProperties{" +"expireSeconds=" + expireSeconds +", nodes='" + nodes + '\'' +", commandTimeout=" + commandTimeout +'}';}}

3.获取redis集群的ip及端口号等相关信息类 RedisConfig从RedisProperties中获取节点并分割得到想要的数据节点信息

	@Component//@Configurationpublic class RedisConfig {@Autowiredprivate RedisProperties redisProperties;@Beanpublic JedisCluster getJedisCluster(){//获取redis集群的ip及端口号等相关信息;String[] serverArray = redisProperties.getNodes().split(",");Set<HostAndPort> nodes = new HashSet<>();//遍历add到HostAndPort中;for (String ipPort : serverArray) {String[] ipPortPair = ipPort.split(":");System.out.println("ipPort = " + ipPortPair[0].trim()+Integer.valueOf(ipPortPair[1].trim()));nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.valueOf(ipPortPair[1].trim())));}//构建对象并返回;System.out.println("nodes.toString() = " + nodes.toString());return new JedisCluster(nodes, redisProperties.getCommandTimeout());}}

4.Redis操作方法接口JedisClient(含有对Redis数据库操作的一系列方法)

public interface JedisClient {String set(String key, String value);String get(String key);Boolean exists(String key);Long expire(String key, int seconds);Long ttl(String key);Long incr(String key);Long hset(String key, String field, String value);String hget(String key, String field);Long hdel(String key, String... field);}

5.接口JedisClient的实现类

@Component
public class JedisClientCluster  implements JedisClient {@Autowiredprivate JedisCluster jedisCluster;@Overridepublic String set(String key, String value) {return jedisCluster.set(key, value);}@Overridepublic String get(String key) {return jedisCluster.get(key);}@Overridepublic Boolean exists(String key) {return jedisCluster.exists(key);}@Overridepublic Long expire(String key, int seconds) {return jedisCluster.expire(key, seconds);}@Overridepublic Long ttl(String key) {return jedisCluster.ttl(key);}@Overridepublic Long incr(String key) {return jedisCluster.incr(key);}@Overridepublic Long hset(String key, String field, String value) {return jedisCluster.hset(key, field, value);}@Overridepublic String hget(String key, String field) {return jedisCluster.hget(key, field);}@Overridepublic Long hdel(String key, String... field) {return jedisCluster.hdel(key, field);}
}

6.主类如下

/*
*spring Data redis整合操作数据
**/
@SpringBootApplication
public class RedistApplication {public static void main(String[] args) {SpringApplication.run(RedistApplication.class, args);}@Beanpublic RedisTemplate<Object, Person> personRedisTemplate(RedisConnectionFactory redisConnectionFactory){RedisTemplate<Object, Person> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);Jackson2JsonRedisSerializer<Person> serializer = new Jackson2JsonRedisSerializer<>(Person.class);template.setDefaultSerializer(serializer);return template;}
}

7.实现效果图大致如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35130.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

51单片机入门之按键

对于单片机&#xff0c;单片机上电后默认为高电平&#xff0c;所以对于按键&#xff0c;按下去之后变为低电平&#xff08;因为按键接地了&#xff09;&#xff0c;未按下去则为高电平&#xff0c;而因为单片机不仅可以改变引脚电平&#xff0c;也可以读取引脚电平&#xff0c;…...

秃头程序员必备Java面试手册!带你跳槽涨薪走上人生巅峰,迎娶白富美

都说程序员工资高、待遇好&#xff0c;改变无数程序员职业生涯的金九银十快来了&#xff0c;你的小目标是什么 30K、40K&#xff0c;还是 16 新的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的奖励 Offer 并不算…...

rsync+sersync实现两台web服务器的实时同步

rsyncsersync实现两台web服务器的实时同步一.环境准备主服务器:从服务器:二.分别安装配置rsync,并测试手动免密备份这里大概讲一下rsync的工作方式和原理从服务器(备份端):主服务器(数据端)三.sersync的安装和配置主web端(数据端)从web服务器(备份端)附件--编辑监控脚本主服务器…...

C++中指针前还加是什么意思

C中指针前还加&是什么意思 区分使用位置&#xff0c;有两种可能&#xff1a; 1 在定义时使用&#xff0c;如 int *a; int * &p a; 这种是C中的引用&#xff0c;p本身不占用内存空间&#xff0c;只是a的一个别名&#xff0c;对p的访问完全等同于对a的访问。 2 在非定义…...

CSS 基础教程:CSS 语法

CSS 语法 CSS 规则集&#xff08;rule-set&#xff09;由选择器和声明块组成&#xff1a; 选择器指向您需要设置样式的 HTML 元素。声明块包含一条或多条用分号分隔的声明。每条声明都包含一个 CSS 属性名称和一个值&#xff0c;以冒号分隔。多条 CSS 声明用分号分隔&#xff0…...

如何快速搭建自己的人脸识别系统

文章目录前言一、原理介绍1.mtcnnP-Net(Proposal Network)R-Net&#xff08;Refine Network&#xff09;O-Net (Output Network)2. facenetSVM(Support Vector Machine)二、人脸识别实现1.准备工作引入mtcnn下载facenet的权重文件&#xff1a;安装skleran2.训练和预测数据准备训…...

2021年5月程序员工资统计,属实惨不忍睹…你拖后腿了吗?

2021年5月全国招收程序员429056人。2021年5月全国程序员平均工资14926元&#xff0c;工资中位数13000元&#xff0c;其中96%的人的工资介于1750元到75000元。 城市 南京的工资已经连续两个月超过广州了&#xff0c;苏州也快赶上来了。 推荐算法工程师才是最赚钱的&#xff0c;…...

webpack学习2-常用loader

1. style-loader 作用&#xff1a;使得css样式写入html的head中 &#xff0c;缺点是js打包很大&#xff0c;常和css-loader配合使用 用法&#xff1a; {test: /\.css$/,use: [style-loader, css-loader]}2. css-loader 作用&#xff1a;css-loader会处理import / require&am…...

Python基础知识(四)

Python函数 01、创建函数 # 创建函数语法 def funaction_name(parameters):"""docstring"""statements(s)02、调用函数 name "Tom" #定义函数 def greet(name):"""This function greets tothe person passed in as…...

目前最简多模态transformer:ViLT

facebook的文章&#xff0c;一句话概括&#xff1a;图像patch和文本embedding concat在一起过transformer&#xff0c;做图像-文本匹配任务 相比之前的多模态transformer&#xff0c;创新点在用Vit的patch方案作为visual embedding而不是先过CNN提取特征&#xff0c;或者更繁琐…...

Java入门视频教程!BAT大厂Java面试真题锦集干货整理

一面 一面就做了一道算法题&#xff0c;要求两小时内完成&#xff0c;给了长度为N的有重复元素的数组&#xff0c;要求输出第10大的数。典型的TopK问题&#xff0c;快排算法搞定。 算法题要注意的是合法性校验、边界条件以及异常的处理。另外&#xff0c;如果要写测试用例&am…...

疯狂涨知识!作为一名程序员我不忘初心

性能优化专栏 1.Tomcat性能优化整理 2.JVM性能优化专题 3.Mysql性能优化整理 微服务架构面试专栏 1.SpringCloud面试整理 2.SpringBoot面试整理 3.Dubbo面试整理 并发编程高级面试专栏 开源框架面试题专栏 1.Spring面试整理 2.SpringMVC面试整理 3.MyBatis面试整理 分布式面…...

18_Reinforcement Learning_CartPole_reduce_mean_Q-Value Iteration_Q-learning_DQN_get_weights

Reinforcement Learning (RL) is one of the most exciting fields of Machine Learning today, and also one of the oldest. It has been around since the 1950s, producing many interesting applications over the years,(For more details, be sure to check out Richar...

Mybatis02-传参、代理

一、sqlsession的三种查询方式 test代码 //1.读取资源InputStream resource Resources.getResourceAsStream("mybatis.xml");//2.创建sessionFactorySqlSessionFactory build new SqlSessionFactoryBuilder().build(resource);//3.创建sessionSqlSession session …...

java连接redis密码,绝对干货

前言 关于技术人如何成长的问题&#xff0c;一直以来都备受关注&#xff0c;因为程序员职业发展很快&#xff0c;即使是相同起点的人&#xff0c;经过几年的工作或学习&#xff0c;会迅速拉开极大的差距&#xff0c;所以技术人保持学习&#xff0c;提升自己&#xff0c;才能够…...

JavaScript中进制之间转换方法

最近在刷面试题的时候看到一道进制转换题&#xff0c; 写完才发现可以用js的方法直接转换&#xff0c;这是自己总结的一些方法 1.其它进制转换为十进制数据&#xff1a; //可以直接用parseInt let num parseInt(n1,n2); //n1:是需要转换为10进制的数 //n2:是被转换数据的进制…...

vue实现PC端标签拖动

1.拖动需要监听鼠标按下、移动、抬起事件 2.一开始全部用methods绑定方法&#xff0c;后面发现用自定义指令directives比较方便&#xff0c;不用声明在data里声明变量&#xff0c;以及一个一个的绑定事件 <template><div class"ad" v-drag><el-badge…...

实际生产中:Hive 合并小文件(强烈建议此法)

背景&#xff1a; 实际项目中,小文件的产生会影响hadoop集群的性能;过度使用namenode的内存等;启动过多的map任务,拉低整体Job的运行效率等等弊端。 解决方案&#xff1a; 针对Hive表(下文统称表A)中,特别是历史分区,存在大量小文件的话,强烈建议对分区下的小文件进行归档处…...

汽车UDS诊断之输入输出控制服务(0x2F)深度剖析

InputOutputControlByIdentifier就是输入输入控制服务&#xff0c;从字面上说&#xff0c;就是通过ID控制输入输出&#xff08;这里的ID指DID&#xff09;&#xff0c;从功能上说&#xff0c;又被称为输入输出控制功能单元。 输入输出控制功能单元服务描述InputOutputControlBy…...

90%的人都以为计算机白学了

90%的人都以为计算机白学了 我发现90%的人&#xff0c;都以为别的专业是白学的~ 比如&#xff0c;心理学算命的&#xff0c;室内设计装潢的&#xff0c;土木工程搬砖的&#xff0c;每次暴雨过后&#xff0c;校园内一旦有积水&#xff0c;给排水专业的铁定会被全员骂哭…… 计算…...

redis加锁、解锁

在Java中&#xff0c;关于锁我想大家都很熟悉。在并发编程中&#xff0c;我们通过锁&#xff0c;来避免由于竞争而造成的数据不一致问题。通常&#xff0c;我们以synchronized 、Lock来使用它。 但是Java中的锁&#xff0c;只能保证在同一个JVM进程内中执行。如果在分布式集群…...

Vue 路由导航

...

浮动布局,定位布局,伸缩盒布局

布局 默认文档流 1.元素显示的顺序和代码的顺序是一致的 2.块级元素独占一行空间&#xff0c;默认宽度为父元素的100%&#xff0c;高度由内容或者子元素决定 3.行内元素共享一行空间&#xff0c;默认宽高都由内容决定 浮动布局 float&#xff08;如果一个元…...

齐发78EX重大事件|荣获美国加拿大双国MSB牌照

齐发78EX LTD在2021年7月已同时获得美国及加拿大MSB合规运营牌照&#xff0c;标志着齐发78EX全球合规化的布局已经进入了一个新阶段。未来&#xff0c;齐发78EX也将继续致力于全球和规划进程的推进&#xff0c;面对全球化唯一的道路就是进一步获得全球投资者的信任&#xff0c;…...

vue如何实现数据双向绑定,我的阿里手淘面试经历分享,看这篇文章准没错!

前言 全网唯一一份&#xff0c;对标阿里P7年薪60w的Android高级工程师学习进阶路线&#xff08;图未完全展开&#xff0c;怕大家看不清楚&#xff09;&#xff1a; 本篇文章都会围绕这份脑图来写&#xff0c;详细的介绍你处于哪个阶段该如何进阶&#xff0c;以及年薪层次高低对…...

leetcode 236. 二叉树的最近公共祖先

题目来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode-cn.com/problems 特别鸣谢&#xff1a;来自夸夸群的 醉笑陪公看落花知乎&#xff0c;王不懂不懂知乎&#xff0c;QFIUNEcsdn 感谢醉笑陪公看落花知乎 倾囊相授&#xff0c;感谢小伙…...

弘辽科技:成为拼多多商家要什么要求?收费吗?

现在也有不少人想要入驻拼多多&#xff0c;但是想要成为拼多多的商家也需要满足对应的要求&#xff0c;同时也想要了解成为拼多多商家是否需要收费&#xff0c;我马上就来给各位卖家们介绍。 拼多多商家入驻平台分四种店铺&#xff0c;这里小编介绍一下旗舰店、专营店入驻基本条…...

辗转相除求最大公约数

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a 0;int b 0;int tmp 0;scanf("%d %d", &a, &b);if (a < b){tmp a;a b;b tmp;}if (a%b ! 0){tmp a;a b;b tmp%b;}printf("%d\n", b);return 0; }...

K-means笔记

K-means算法 算法过程&#xff1a; 从N个样本数据中随机选取K个对象作为初始的聚类中心。分别计算每个样本到这各个聚类中心的距离&#xff0c;并将对象归于距离最短的聚类群中。所有样本计算完后&#xff0c;重新计算K个聚类中心。与前一次计算得到得聚类中心比较。如果聚类中…...

39.【Axure 10 】交元件(元件组)交互事件

鼠标相关交互事件 【高】单击时 元件(元件组)的是鼠标单击事件&#xff0c;可以实现鼠标单击的触发的交互事件。 【中】双击事件 元件(元件组)的是鼠标双击事件&#xff0c;作为触发条件。同时也是双击页面任何地方可触发。 【中】鼠标右击事件 元件(元件组)的鼠标右击是…...

dbc2000 注册机|dbc2000 注册码注册机下载

点击下载来源&#xff1a;dbc2000 注册机 dbc2000 注册机是同名源程序软件的注册机软件&#xff0c;该源程序软件是一款应用于数据库搭建以及数据写入的数据库架设工具&#xff0c;它拥有强大的数据写入功能&#xff0c;在作为应用程序使用时&#xff0c;它不仅可以充当数据属性…...

秋招面经第八弹:网易二面-数据开发工程师

秋招第八弹&#xff1a;网易二面-数据开发工程师 写在最前&#xff1a;秋招以来一直在冲&#xff0c;因为事情比较多&#xff0c;对于笔试面试一直没有复盘&#xff0c;现在靠仅存的记忆把面试的一些问题记录下来&#xff0c;尽可能记录出能回忆到的问题&#xff0c;但可能记的…...

安卓课程格子APP

https://download.csdn.net/download/weixin_57836618/73810452 功能演示&#xff1a; 查看所有课程 点击主页面空白处即可添加课程 添加课程之后查看课程 查看双周课程 查看单周课程 6.查看课程详情...

强化学习——格子世界

强化学习——格子世界 项目源码地址&#xff1a;https://gitee.com/infiniteStars/machine-learning-experiment 1. 实验内容 2. 实验代码 import numpy as np import matplotlib.pyplot as plt from matplotlib.table import Table from xml.dom.minidom import Document #手…...

华为机试 - 跳格子游戏

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 地上共有N个格子&#xff0c;你需要跳完地上所有的格子&#xff0c;但是格子间是有强依赖关系的&#xff0c;跳完前一个格子后&#xff0c;后续的格子才会被开启&#xff0c;格子间的依赖关系由多组st…...

php 爬课程表信息,Ruby爬取教务系统生成课程表

我为什么要虐自己最近觉得课程格子广告越来越多&#xff0c;乱七八糟的东西越来越多&#xff0c;完全失去了一开始的存在价值&#xff0c;并且没有电脑端app&#xff0c;想查看课程必须拿出手机&#xff0c;而我使用电脑频率要比手机高&#xff0c;所以才有了折腾的动力。于是我…...

android 课程表 ui,UICollectionViewLayout实现课程表布局

因为项目中有课程表的相关模块&#xff0c;第一时间想到用UICollectionView。然而后期的需求越来越复杂&#xff0c;每个格子需要展示的内容越来越多&#xff0c;所以不得不寻找合适的解决方案。最后发现自定义UICollectionViewLayout可以实现我的需求。先放效果图&#xff1a;…...

Android自定义View课程表,Android 自定义View课程表表格

自己闲下来时间写的一个课表控件使用的自定义LinearLayout 里面View都是用代码实现的 最终效果如下图 写的可能有问题希望多多指点创建一个自定义LinearLayout 控件用来装载课程的信息和课程的周数 和节数大概的布局三这样的根据上面的看来觉得总体布局我分了两个 上面的星期是…...

java课程设计设计_java课程设计

1. 团队课程设计博客链接https://www.cnblogs.com/choco1ate/p/12172223.html2.本组课题及本人任务本组课题&#xff1a;泡泡堂(炸弹人)游戏本人任务&#xff1a;Box类(游戏地图中的每个方格)Bomb类(游戏过程中的)游戏玩家输赢信息的文件储存3.需求分析Box类&#xff1a;该类为…...

《课程格子》的一个笔试题目

题目如下&#xff0c;感觉很适合喜欢琢磨的程序员&#xff0c;也是考验你编码风格的时候。 Lets make a tower defense game&#xff08;塔防游戏):1. You have 1 tower, with H health and D dps(damage per second).2. There are n attackers, each with h_i health and d_i …...

Android仿照超级课程表 or 课程格子 一键提取课表功能(方正系统)

参考文章http://blog.csdn.net/sbsujjbcy ,本文仿照‘ 安卓弟 提供的android 项目实战——打造超级课程表一键提取课表功能文章&#xff0c;对他的代码进行了修改和补充&#xff0c;为什么要修改呢&#xff1f;原因是安卓弟的那个源码版本过于老旧&#xff0c;很多方法已经过…...

Android 13运行时权限变更一览

本文同步发表于我的微信公众号&#xff0c;扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注&#xff0c;每个工作日都有文章更新。 要不了多久&#xff0c;Android 13正式版就要发布了。 其实就在几个月前&#xff0c;我写了一篇关于Android 13首个开发者体验版的全面介绍&…...

变更日志 批准的变更请求 收尾流程 原型法 名义小组 习题

变更日志 变更日志用于记录项目期间发生的变更&#xff0c;它包含了整个项目或阶段期间的所有变更请求的状态。同时它也用于向受影响的相关方传达变更&#xff0c;以及变更请求的批准、推迟和否决情况。 变更通常与具体相关方相关联&#xff0c;因为相关方可能是&#xff1a;…...

网络变更流程和步骤

本文从变更前&#xff0c;变更中&#xff0c;变更后三个阶段总结变更需要注意的地方。 变更原则 在编写变更方案&#xff0c;实施变更过程中&#xff0c;考虑如何将变更对业务的影响降到最低&#xff1b;涉及多个产品&#xff0c;业务的重大变更&#xff0c;考虑能否将重大变…...

网站服务器变更ip后更新域名,服务器变更后域名需要重新备案吗

服务器变更后域名需要重新备案吗 内容精选换一换可以的。SSL证书都是绑定域名的&#xff0c;和服务器更换IP地址没有任何关系。只要域名不变&#xff0c;重新解析到新的IP地址即可&#xff0c;原来的SSL证书照样可以用&#xff0c;不需要更换新的证书。可以的。SSL证书都是绑定…...

《系统集成项目管理》第十六章 变更管理

文章目录一、项目变更的基本概念1、项目变更的概述2、项目变更的分类3、项目变更产生的原因二、变更管理的基本原则三、变更管理角色职责与工作程序1、角色职责2、工作程序四、变更管理相关事项1、变更管理操作要点2、变更管理和整体管理及配置管理的关系一、项目变更的基本概念…...

03.整体管理+变更管理

文章目录Intro: ITO整体管理过程概述制定项目章程制订项目管理计划指导与管理项目执行监控项目工作实施整体变更控制结束项目或阶段收尾管理项目验收项目总结系统维护项目后评价变更管理基本概念项目变更管理原则变更管理组织机构与工作程序项目变更管理的工作内容版本发布和回…...

【学术】论文返修时,能否增加作者或变更作者顺序?

【先说结论】 初次投稿就确定所有作者分工和顺序&#xff0c;后续不要随意变动。 返修时候&#xff0c;如修改作者信息风险很大&#xff0c;甚至可能因此被拒稿。 第一&#xff0c;会另审稿人或者编辑有别的想法&#xff1b; 第二&#xff0c;有的期刊不允许变更、或者要求…...

数据库变更管理

数据库变更管理 1 目的 1 角色与职责 1 启动准则 1 输入 1 主要步骤 1 [Step1] 数据库设计变更申请 1 [Step2] 审批数据库设计变更申请 1 [Step3] 更改数据库设计文档 2 [Step4] 重新进行数据库设计确认 2 输出 2 结束准则 2 度量 2 数据库变更管理 目的  铁路客票安全系统的…...

需求变更管理

需求变更管理 ​ 需求变更的定义&#xff1a;根据软件工程思想定义&#xff0c;需求说明书一般需要经过论证&#xff0c;如果在开发说明书经过论证以后&#xff0c;需要在原有需求基础上追加和补充新的需求&#xff0c;对原有需求进行修改或削减&#xff0c;都属于需求变更 ​…...