Other

redis持久化

Redis有三种持久化方式: 快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的方式写入磁盘; 文件追加方式(AOF, Append Only File),记录所有的操作命令,并以文本的形式追加到文件中; 混合持久化方式,Redis 4.0 之后新增的方式,混合持久化是结合了 RDB 和 AOF 的优点,在写入的时候,先把当前的数据以 RDB 的形式写入文件的开头,再将后续的操作命令以 AOF 的格式存入文件,这样既能保证 Redis 重启时的速度,又能减低数据丢失的风险。 一、RDB  如何触发?  1.手工触发。save、bgsave命令。主要区别体现在:save阻塞 Redis 主线程的执行。而bgsave不阻塞。bgsave 会 fork() 一个子进程来执行持久化,整个过程中只有在 fork() 子进程时有短暂的阻塞,当子进程被创建之后,Redis 的主进程就可以响应其他客户端的请求了  2.自动触发save m n。  本质是 Redis 通过判断,如果满足设置的触发条件,自动执行一次 bgsave 命令。 注意:当设置多个 save m n 命令时,满足任意一个条件都会触发持久化。 例如,我们设置了以下两个 save m n 命令: save 60 10 save 600 1 当 60s 内如果有 10 次 Redis 键值发生改变,就会触发持久化;如果 60s 内 Redis 的键值改变次数少于 10 次,那么 Redis 就会判断 600s 内,Redis 的键值是否至少被修改了一次,如果满足则会触发持久化。

JAVA配置环境变量

1.点击新建变量名设置为JAVA_HOME 变量值设置为当前jdk所在的安装目录    2、.点击新建变量名为CLASSPATH 变量值 .;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar (注意前面有一个点)   、3、在【系统变量中】我们可以看到path变量已经存在,那么我们只需要点击【编辑】,进入path变量的编辑配置环境变量(%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;)还有(%MAVEN_HOME%\bin;)  —————注意红框处变量值不能少  4、以上配置皆是系统变量中的配置,下面一个是用户变量中的配置   在用户变量中新建 一个JAVA_HOME 变量值为JKD的 安装目录,该目录如果配置有问题可能会出现不能使用cmd安装java包的情况    5、【开始】中搜索【cmd】,然后在键入【java】以及【javac】或者java -version,出现如图所示信息,说明配置成功。(如果报该命令不是内部或外部命令”的 解决方法,可以重启电脑后再次尝试(对于我来说是必须要重启电脑。。。))     6、(拓展知识--->cmd命令中jar包的安装命令 mvn install:install-file -Dfile=E:\java相关\apache-maven-3.5.3\apache-maven-3.5.3\lib\sdk-dysmsapi-1.0.1.jar -DgroupId=aliyun -DartifactId=sdk-dysmsapi -Dversion=1.0.1 -Dpackaging=jar (Dfile为jar包的所在目录,DgroupId、DartifactId和Dversion为pom文件中依赖对应位置 <groupId>aliyun</groupId><artifactId>sdk-dysmsapi</artifactId><version>1.0.1</version> )

Redis,定义、各数据类型增删改查

1. 定义 Redis 是一个高性能的key-value数据库,key是字符串类型。  2.核心特点: (1) 单进程: Redis的服务器程序采用的是单进程模型来处理客户端的请求。对读写时间的响 应是通过对epoll函数的包装来做到的。  3.数据类型: 键的类型是字符串   值的类型分为五种: 字符串string,哈希hash,列表list,无序集合set;有序集合zset  1. string类型 (1)简介 字符串(string)是Redis最基本的类型,可以存储String,Integer,Float型的数据,甚至是二进制数据,一个字符串最大容量是512M  (2)set命令 set 键值 》如果键不存在,就是添加 》如果键存在,就是修改 (1)设值取值 set name zs set name lisi (2)设置过期时间 setex name2 3 wangwu

UDP协议 操作系统的发展史 多道技术 进程理论

day34  UDP协议 简介: 用户数据报协议(User Datagram Protocol,UDP)是一种传输层协议。 在 TCP/IP 网络中,它与 TCP 协议一样用于处理数据包,是一种无连接的协议。 TCP 协议在进行数据传输时,需要建立连接,并且每次传输的数据都需要进行确认。 当不再进行传输数据时,还需要断开连接。这样做虽然安全,但是效率较低。而 UDP 协议正好避免了这些过程,它是一种没有复杂控制,提供面向无连接的通信服务协议。  UDP 协议具备以下特点: 1.没有各种连接:在传输数据前不需要建立连接,也避免了后续的断开连接。 2.不重新排序:对到达顺序混乱的数据包不进行重新排序。 3.没有确认:发送数据包无须等待对方确认。因此,使用 UDP 协议可以随时发送数据,但无法保证数据能否成功被目标主机接收。 4.不会出现黏包问题,主要适用于数据量比较小的数据交互。比如一些聊天软件  如何区分当前是UDP协议还是TCP协议: 如果代码中出现recvfrom 使用的是UDP协议 如果代码中出现recv 使用的是TCP协议 服务端: import socket server = socket.socket(type=socket.SOCK_DGRAM) # 自己指定UDP协议(默认是TCP协议) server.bind(('127.0.0.1', 8080)) # 固定地址 msg, addr = server.recvfrom(1024) # 接收1024KB数据 print('msg:', msg.decode('utf8')) print('addr:', addr) server.sendto(b'hello baby', addr) # 发送给对应地址的数据  客户段端: import socket client = socket.socket(type=socket.SOCK_DGRAM) server_addr = ('127.0.0.1', 8080) # 服务端的地址提前准备好 这里类似于查找通讯录 client.

MySQL8的安装与配置

一、Mysql下载安装包 ​ ​https://dev.mysql.com/downloads/mysql/​ 二、Mysql 配置1.解压zip包到安装目录 (我的解压在了​​D:\view\mysql​​) 2.在安装根目录下添加 ​​my.ini​​(新建文本文件,将文件类型改为​​.ini​​),写入如下基本配置[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录basedir=D:\\view\\mysql # 切记此处一定要用双斜杠# 设置mysql数据库的数据的存放目录datadir=D:\\view\\mysql\\data # 此处同上# 允许最大连接数max_connections=200# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=10# 服务端使用的字符集默认为UTF8character-set-server=utf8# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 默认使用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_password[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[client]# 设置mysql客户端连接服务端时默认使用的端口port=3306default-character-set=utf8 3.配置环境变量 三、Mysql 安装1.在安装时,必须以管理员身份运行cmd,否则在安装时会报错,会导致安装失败的情况 2.初始化数据库在MySQL安装目录的 bin 目录下执行命令:​​mysqld --initialize --console​​ 执行完成后,会打印 root 用户的初始默认密码,如下: C:\Users\Administrator>cd D:\view\mysql\bin> D:\view\mysql\bin>mysqld --initialize --console2018-04-28T15:57:17.087519Z 0 [System] [MY-013169] [Server] C:\Program Files\MySQL\bin\mysqld.exe (mysqld 8.0.11) initializing of server in progress as process 49842018-04-28T15:57:24.859249Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: rI5rvf5x5G,E2018-04-28T15:57:27.106660Z 0 [System] [MY-013170] [Server] C:\Program Files\MySQL\bin\mysqld.

排序算法(2)

排序算法(2) 排序算法1中,对于选择排序和插入排序进行了介绍,通过代码,可以看出,假设有一个给定的乱序数组,插入排序因为都只能通过交换相邻的元素,于是得到的时间复杂度是相对来说比较高的。从这也可以看出,在插入排序中,元素只能缓慢的从一端到另一端。从这就可以观察得到,这应该还有优化的空间,于是,基于插入排序的改进算法进一步提出。 希尔排序 既然插入排序对于乱序对象的处理能力比较差,也就是某个对象需要从一端到另外一端。基于这个思想,能不能不让对象只一个一个相邻交换。因此,希尔排序通过扩大每个对象的间隔交换值h,从而保证任意间隔值h都都是有序的;这样通过较大的将间隔值,从而保证对象不是一个一个相邻移动,从而提高效率。看代码,此代码还是基于排序算法1中的模板,以下只展示sort部分,其余部分可参见排序算法1: //目标:实现a[]按照升序排列 public static void sort(Comparable[] a){ int N = a.length; //数据间隔h时为有序。 int h = 1; //找到最大的间隔h,除以几可以根据需要进行调节 while(h < N/3){ h = 3*h + 1; } while(h >= 1){ for (int i = h; i < N ; i++) { for (int j = i; j >= h && less(a[j],a[j-h]); j-=h) { exch(a,j,j-h); } } show(a); h = h/3; }​ } 在此,可能体会不到希尔排序起到了什么作用,通过一个简单的小实验,体会下 希尔排序结果 原始数组:20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 第一次:7 6 5 4 3 2 1 13 12 11 10 9 8 20 19 18 17 16 15 14 第二次:3 2 1 4 7 6 5 9 8 11 10 13 12 16 15 14 17 20 19 18 第三次:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 通过观察可以得到,希尔排序很快就可以把乱序偏后的元素移动到另外一边,这就是希尔排序的强大之处。所以说,在此也会有很多疑问,如何进行选择间隔递增的h值呢。这个在很多论文都进行了研究,但是是一个比较难的问题,实际中,可以通过调节h值进行测试。也可以看出,希尔排序解决了插入排序在乱序情况下移动困难的问题。并且实践也证明,希尔排序对于中等大小的数组的运行时间是 可以接受的,并且也不需要额外的内存空间。

1. Springboot集成Redis

(1)创建springboot工程,勾选Nosql (2)配置连接参数 spring:  datasource:  url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai  username: root  password: ok  driver-class-name: com.mysql.jdbc.Driver  redis:  port: 6379  host: 127.0.0.1  (3) 创建测试方法Demo2ApplicationTests-测试字符串 @SpringBootTest class Demo2ApplicationTests {  @Autowired  private RedisTemplate redisTemplate;   @Test  void contextLoads() {  redisTemplate.opsForValue().set(name66,zs);  System.out.println(redisTemplate.opsForValue().get(name66));  } }  (4)创建实体类 @Component public class User implements Serializable {

处理机管理——进程通信

进程通信:指进程之间的信息交换 进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一个进程的地址空间。但是进程之间的信息交换又是必须实现的。 共享存储: 两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现)。操作系统只负责提供共享空间和同步互斥工具(如P、V操作) 基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式。 基于存储区的共享:在内存中画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。这种共享方式速度更快,是一种高级通信方式。 管道通信: “管道”是指在内存中开辟一个大小固定的缓冲区用于连接读写进程的一个共享文件 1.管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。 2.各进程要互斥地访问管道。 3.数据以字符流的形式与入管道,当管道写满时,写进程的write()系统调用将被阳塞,等待读进程将数据取。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被咀塞。 4.如果没写满,就不允许读。如果没读空,就不允许写。 5.数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。 消息传递: 进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。 消息头包括:发送进程ID、接受进程ID、消息类型、消息长度等格式化的信息(计算机网络中发送的“报文”其实就是一种格式化的消息) 直接通信方式:消息直接挂到接收进程的消息缓冲队列上 间接通信方式:消息要先发送到中间实体(信箱)中,因此也称“信箱通信方式。Eg:计网中的电子邮件系统

非关系型数据库redis部署及优化

非关系型数据库redis部署及优化 一,关系型数据库与非关系型数据库 1.关系型数据库 一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录 SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。主流的关系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等。 优点: 1、易于维护:都是使用表结构,格式一致; 2、使用方便:SQL语言通用,可用于复杂查询; 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。 缺点: 1、读写性能比较差,尤其是海量数据的高效率读写; 2、固定的表结构,灵活度稍欠; 3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。 2.非关系型数据库 NoSQL(Not Only SQL ),意思是不仅仅是SQL”,是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型。 非关系型数据库属于一种数据结构化存储方式的集合,可以是文档类型、图形类型、列存储类型,键值对等, 主流的NoSQL 数据库有Redis、MongBD、Hbase、CouhDB等。 优点: 1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。 2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘; 3、高扩展性; 4、成本低:nosql数据库部署简单,基本都是开源软件。 缺点: 1、不提供sql支持,学习和使用成本较高; 2、无事务处理; 3、数据结构相对复杂,复杂查询方面稍欠。 3.区别 1、数据存储方式不同: 关系数据库为表格形式; 非关系数据库为文档或图结构。 2、扩展方式不同: 关系数据库可纵向扩展,可提高处理能力; 非关系数据库为天然分布式,通过更多的数据服务器来分担负载。 3、事务处理支持不同: 关系数据库善于处理事务原子性细粒度控制,方便事务回滚; 非关系数据库着重于处理大数据。 4.成本: 关系型数据库成本高; Nosql数据库简单易部署,基本都是开源软。 5.数据一致性: 关系型数据库一样强调数据的一致 Nosql不提供对事务的处理。 二,redis 1.redis概述 redis是一个完全开源免费的key-value内存数据库。支持存储的value类型更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。同时,为了保证效率,数据都是缓存在内存中。并且redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 2.redis优缺点 优点: 具有极高的数据读写速度:数据读取的速度最高可达到110000次ls,数据写入速度最高可达到81000次/s; 支持丰富的数据类型:支持key-value、Strings、Lists、Hashes、Sets 及 Ordered Sets等数据类型操作; 支持数据的持久化:可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用; 原子性: Redis所有操作都是原子性的; 支持数据备份:master-salve模式的数据备份。 缺点: 1、redis是内存数据库,所以单台机器存储的数据量跟机器本身的内存大小有关。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据,定时删除和定期删除为主动删除,Redis会定期主动淘汰一批已过期的key。 2、如果进行完整重同步,由于需要生成rdb文件,并进行传输,会占用主机的CPU,并会消耗现网络带宽。 3、修改配置文件,进行重启,将硬盘中的数据加载进内存,时间比较久。在这个过程中,redis不能提供服务。 3.

Linux安装Mysql

1.安装wget yum install -y wget 2.备份 cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo_bak 3.更换阿里云yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 4. 清除YUM缓存并建立缓存 yum clean all yum makecache 5.查询mariadb并卸载 rpm -qa | grep mariadb rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64(复制当前环境的mysql) 6.下载mysql的repo源并安装rpm包 cd /opt/ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm 7. 安装mysql yum install mysql-server -y 8.授予权限 chown -R root:root /var/lib/mysql chown root /var/lib/mysql/ 9.重启mysql数据库 service mysqld restart 10.登录mysql数据库并授权 mysql -u root -p​use mysql​update user set Password = password('ok') where User='root';​GRANT ALL PRIVILEGES ON *.