转至:https://blog.csdn.net/weixin_43480802/article/details/86233669
#ifconfig 找到左上角 ens33
编辑# vi /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR= #ip地址GATEWAY= #网关NETMASK= #子网掩码
添加一行加粗部分:DNS1= #与网关一致
重启 service network restartRestarting network (via systemctl): [ 确定 ]
ok
虚拟机网关:
转至:https://zhuanlan.zhihu.com/p/471715025
centos8 解决ping: www.baidu.com: Name or service not known 绝大部分原因是由于dns服务器没有配置导致的问题。 1。修改配置文件添加DNS vi /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=8.8.8.8
DNS2=114.114.114.114
运行命令:cat /etc/resolv.conf出现
2。添加DNS服务器 vi /etc/resolv.conf
添加如下两行:
nameserver 8.8.8.8
nameserver 8.8.4.4
保存退出。
3。重启网络: sudo nmcli c reload
成功
4、如果没有成功 sudo route add default gw 192.168.11.1(你的网关)
在sql语句中,not in是经常会⽤到的⼀种写法,因为这种写法很直观,容易理解。
但如果不注意的话,很容易写出错误的sql,⽽且性能存在严重问题,所以,不建议使⽤not in,要尽量把 not in写法,改为left join。下面给个例子
CREATE TABLE emp ( empid INT NOT NULL PRIMARY KEY CLUSTERED, empname VARCHAR(20) NOT NULL, tel VARCHAR(20) null ) INSERT INTO dbo.emp VALUES (1, '张三','12'), (2, '李四','34'), (3, '王五','56'), (4, '孙六','78'), (5, '李二','90'); CREATE TABLE org ( orgid INT NOT NULL PRIMARY KEY CLUSTERED, orgname VARCHAR(30) NOT NULL, parentid INT NULL, empid INT NULL ) INSERT INTO org(orgid,orgname,parentid,empid) VALUES (1, '部长', NULL,1), (2, '副部长', 1,2), (3, '组长', 1,3), (5, '员工', 4,null) 如上sql创建两个表,一个组织表,一个雇员表。现在要查询,emp表中有,但是在org中不存在的empid,用not in 写法自然而然的写出如下的sql
事务 什么是事务 本部分参考文章链接为 :(1条消息) 事务ACID理解_dengjili的博客-CSDN博客_acid
仅用作个人学习,特此声明
要么都成功,要么都失败
比如说两个sql同时执行
———————————
SQL1执行:A给B转账
SQL2执行:B收账A
———————————
这个过程中钱是不能少的,也就是说A+B总数必须是不变的
所谓的事务其实就是将一组SQL放到一个批次中去执行
原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency) 事务前后数据的完整性必须保持一致。 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响 下面举几个简单的例子来理解事务的四个特点
1、原子性(Atomicity) 针对同一个事务
这个过程包含两个步骤
A: 800 - 200 = 600 B: 200 + 200 = 400
原子性表示,这两个步骤一起成功,或者一起失败,不能只发生其中一个动作
就像是银行转账一样
2、一致性(Consistency) 针对一个事务操作前与操作后的状态一致
操作前A:800,B:200 操作后A:600,B:400
一致性表示事务完成后,符合逻辑运算
无论怎么转账,A+B=1000是不变的
3、持久性(Durability) 表示事务结束后的数据不随着外界原因导致数据丢失
操作前A:800,B:200 操作后A:600,B:400 如果在操作前(事务还没有提交)服务器宕机或者断电,那么重启数据库以后,数据状态应该为 A:800,B:200 如果在操作后(事务已经提交)服务器宕机或者断电,那么重启数据库以后,数据状态应该为 A:600,B:400
4、隔离性(Isolation) 针对多个用户同时操作,主要是排除其他事务对本次事务的影响
mysqldump 说明 逻辑备份工具:
mysqldump, mydumper, phpMyAdmin Schema和数据存储在一起、巨大的SQL语句、单个巨大的备份文件 mysqldump是MySQL的客户端命令,通过mysql协议连接至mysql服务器进行备份 命令格式:
mysqldump [OPTIONS] database [tables] #支持指定数据库和指定多表的备份,但数据库本身定义 不备份 mysqldump [OPTIONS] -B DB1 [DB2 DB3...] #支持指定数据库备份,包含数据库本身定义也会备份 mysqldump [OPTIONS] -A [OPTIONS] #备份所有数据库,包含数据库本身定义也会备份 mysqldump参考:
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html mysqldump 常见通用选项:-A, --all-databases #备份所有数据库,含create database
-B, --databases db_name… #指定备份的数据库,包括create database语句 -E, --events: #备份相关的所有event scheduler -R, --routines: #备份所有存储过程和自定义函数 --triggers: #备份表相关触发器,默认启用,用--skip-triggers,不备份触发器 --default-character-set=utf8 #指定字符集 --master-data[=#]: #此选项须启用二进制日志 #1:所备份的数据之前加一条记录为CHANGE MASTER TO语句,非注释,不指定#,默认为1,适合于主从复 制多机使用 #2:记录为被注释的#CHANGE MASTER TO语句,适合于单机使用,适用于备份还原 #此选项会自动关闭--lock-tables功能,自动打开-x | --lock-all-tables功能(除非开启-- single-transaction) -F, --flush-logs #备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文件,配合-A 或 -B 选项时,会导致刷新多次数据库。 建议在同一时刻执行转储和日志刷新,可通过和--singletransaction或-x,--master-data 一起使用实现,此时只刷新一次二进制日志 --compact #去掉注释,适合调试,节约备份占用的空间,生产不使用 -d, --no-data #只备份表结构,不备份数据,即只备份create table -t, --no-create-info #只备份数据,不备份表结构,即不备份create table -n,--no-create-db #不备份create database,可被-A或-B覆盖 --flush-privileges #备份mysql或相关时需要使用 -f, --force #忽略SQL错误,继续执行 --hex-blob #使用十六进制符号转储二进制列,当有包括BINARY, VARBINARY,BLOB,BIT的数据类型的列时使用,避免乱码 -q, --quick #不缓存查询,直接输出,加快备份速度 mysqldump的MyISAM存储引擎相关的备份选项:
主主复制 主主复制:两个节点,都可以更新数据,并且互为主从
容易产生的问题:数据不一致;因此慎用
考虑要点:自动增长id
配置一个节点使用奇数id
auto_increment_offset=1 #开始点 auto_increment_increment=2 #增长幅度 另一个节点使用偶数id
auto_increment_offset=2 auto_increment_increment=2 主主复制的配置步骤:
各节点使用一个惟一server_id 都启动binary log和relay log 创建拥有复制权限的用户账号 定义自动增长id字段的数值范围各为奇偶 均把对方指定为主节点,并启动复制线程 实现两个节点主主复制模型 实验环境
机器
centos7 地址10.0.0.7 centso7 地址10.0.0.77 已安装MySQL5.7数据库
第一个master1主节点 创建日志路径
[root@centos7-liyj ~]#mkdir -p /data/mysql/logbin [root@centos7-liyj ~]#chown -R mysql.mysql /data/mysql/ 配置文件添加
[root@centos7-liyj ~]#vim /etc/my.cnf [root@centos7-liyj ~]#cat /etc/my.cnf [mysqld] datadir=/data/mysql skip_name_resolve=1 socket=/data/mysql/mysql.sock log-error=/data/mysql/mysql.log pid-file=/data/mysql/mysql.pid server-id=7 #全局唯一ID编号 log-bin=/data/mysql/logbin/mysql-bin #二进制日志路径 auto_increment_offset=1 #开始点 auto_increment_increment=2 #增长幅度 [client] socket=/data/mysql/mysql.sock 重启数据库服务
[root@centos7-liyj ~]#systemctl restart mysqld 记录二进制日志位置
实验环境
机器
centos7 地址10.0.0.7 主机名master.org
centso7 地址10.0.0.77 主机名slave.org
已安装MySQL5.7数据库
主从配置 修改主机名区分主次
[root@centos7-liyj ~]#hostnamectl set-hostname master.org [root@centos7-liyj ~]#exit logout Connection closed. Disconnected from remote host(10.0.0.7) at 15:18:26. Type `help' to learn how to use Xshell prompt. [C:\~]$ Reconnecting in 1 seconds. Press any key to exit local shell. . Connecting to 10.0.0.7:22... Connection established. To escape to local shell, press 'Ctrl+Alt+]'. Last login: Sat May 14 15:08:21 2022 from 10.0.0.1 [root@master ~]# 从节点
一、环境准备工作
# 1、JDK 安装与环境变量# 下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-8u102-linux-x64.tar.gz [root@localhost data]# tar -zxvf jdk-8u102-linux-x64.tar.gz -C /usr/local/ # 然后配置环境变量,这样可以任何地方引用jdk,如下配置: # vi /etc/profile 最后面加入以下语句: export JAVA_HOME=/usr/local/jdk1.8.0_102 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin # source /etc/profile #使环境变量马上生效 # java --version #查看java版本 java version 1.8.0_102 Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode) 二、数据库的准备
# 1、登录mysql数据库[root@localhost ~]# mysql -uroot -p123456 mysql> create database if not exists redis_goods default character set utf8; # db_shop 是数据库的名称 mysql> use redis_goods; # 切换到redis_goods数据库 mysql> set names utf8; mysql> GRANT ALL PRIVILEGES ON *.
一、诞生背景: 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小不超过4KB,且每次请求都会发送回服务器;LocalStorage 在 2.5MB 到 10MB 之间(各家浏览器不同),而且不提供搜索功能,不能建立自定义的索引。所以,需要一种新的解决方案,这就是 IndexedDB 诞生的背景。
IndexedDB是浏览器提供的本地数据库, 允许储存大量数据,提供查找接口,还能建立索引。这些都是 LocalStorage 所不具备的。就数据库类型而言,IndexedDB 不属于关系型数据库(不支持 SQL 查询语句),更接近 NoSQL 数据库。
IndexedDB里数据以对象的形式存储,每个对象都有一个key值索引。IndexedDB里的操作都是事务性的。一种对象存储在一个objectStore里,objectStore就相当于关系数据库里的表。IndexedDB可以有很多objectStore,objectStore里可以有很多对象。每个对象可以用key值获取。
二、特点: 键值对储存。 IndexedDB 内部采用对象仓库(object store)存放数据。所有类型的数据都可以直接存入,包括 JavaScript 对象。对象仓库中,数据以键值对的形式保存,每一个数据记录都有对应的主键,主键是独一无二的,不能有重复,否则会抛出一个错误。 异步。 IndexedDB 操作时不会锁死浏览器,用户依然可以进行其他操作,这与 LocalStorage 形成对比,后者的操作是同步的。异步设计是为了防止大量数据的读写,拖慢网页的表现。 支持事务。 IndexedDB 支持事务(transaction),这意味着一系列操作步骤之中,只要有一步失败,整个事务就都取消,数据库回滚到事务发生之前的状态,不存在只改写一部分数据的情况。 同源限制。 IndexedDB 受到同源限制,每一个数据库对应创建它的域名。网页只能访问自身域名下的数据库,而不能访问跨域的数据库。 储存空间大。 IndexedDB 的储存空间比 LocalStorage 大得多,一般来说不少于 250MB,甚至没有上限。 支持二进制储存。 IndexedDB 不仅可以储存字符串,还可以储存二进制数据(ArrayBuffer 对象和 Blob 对象)。 三、基本概念: 数据库。IDBDatabase 对象 数据库是一系列相关数据的容器。每个域名(严格的说,是协议 + 域名 + 端口)都可以新建任意多个数据库。 IndexedDB 数据库有版本的概念。同一个时刻,只能有一个版本的数据库存在。如果要修改数据库结构(新增或删除表、索引或者主键),只能通过升级数据库版本完成。
对象仓库。IDBObjectStore 对象 每个数据库包含若干个对象仓库(object store)。它类似于关系型数据库的表格。
Linux 根目录(/) /bin/ 存放系统命令,普通用户和 root 都可以执行。放在 /bin 下的命令在单用户模式下也可以执行 /boot/ 系统启动目录,保存与系统启动相关的文件,如内核文件和启动引导程序(grub)文件等 /dev/ 设备文件保存位置 /etc/ 配置文件保存位置。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全部保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等 /home/ 普通用户的主目录(也称为家目录)。在创建用户时,每个用户要有一个默认登录和保存自己数据的位置,就是用户的主目录,所有普通用户的主目录是在 /home/ 下建立一个和用户名相同的目录。如用户 liming 的主目录就是 /home/liming /lib/ 系统调用的函数库保存位置 /media/ 挂载目录。系统建议用来挂载媒体设备,如软盘和光盘 /mnt/ 挂载目录。早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区 /misc/ 挂载目录。系统建议用来挂载 NFS 服务的共享目录。虽然系统准备了三个默认挂载目录 /media/、/mnt/、/misc/,但是到底在哪个目录中挂载什么设备可以由管理员自己决定。例如,笔者在接触 Linux 的时候,默认挂载目录只有 /mnt/,所以养成了在 /mnt/ 下建立不同目录挂载不同设备的习惯,如 /mnt/cdrom/ 挂载光盘、/mnt/usb/ 挂载 U 盘,都是可以的 /opt/ 第三方安装的软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到 /usr/local/ 目录中,也就是说,/usr/local/ 目录也可以用来安装软件 /root/ root 的主目录。普通用户主目录在 /home/ 下,root 主目录直接在“/”下 /sbin/ 保存与系统环境设置相关的命令,只有 root 可以使用这些命令进行系统环境设置,但也有些命令可以允许普通用户查看 /srv/ 服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据 /tmp/ 临时目录。系统存放临时文件的目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清空 /lost+found/ 当系统意外崩溃或意外关机时,产生的一些文件碎片会存放在这里。在系统启动的过程中,fsck 工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如,/lost+found 就是根分区的备份恢复目录,/boot/lost+found 就是 /boot 分区的备份恢复目录 /proc/ 虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存设备驱动的列表的,/proc/filesystems 是保存文件系统列表的,/proc/net 是保存网络协议信息的.
一、前言:
有序集合Sorted Set:底层数据结构跳表+哈希表
typedef struct zset { dict *dict; 哈希表 --哈希表高效支持单点查询 zskiplist *zsl; 跳表 --跳表高效支持范围查询 } zset; 源码文件:t_zset.c-各种操作实现 sercver.h-相关的结构定义
可阅读上一文章讲述了哈希表的数据结构,了解哈希表的相关内容
四、Redis源码数据结构之哈希表Hash - chch213 - 博客园 (cnblogs.com)
接下来我们重点了解下跳表数据结构。
二、跳表分析
源码跳表定义:
/* ZSETs use a specialized version of Skiplists */ typedef struct zskiplistNode { sds ele; // 元素 double score; // 权重 struct zskiplistNode *backward; // 后向指针 struct zskiplistLevel { struct zskiplistNode *forward; // 前向指针 unsigned long span; // 跨度 } level[]; // 节点的level数组 } zskiplistNode; typedef struct zskiplist { struct zskiplistNode *header, *tail; // 头节点 尾节点 unsigned long length; // 跳表长度 int level; // 跳表最大层数 } zskiplist; 在理解上面定义的时候我一般就把当成一个父子节点树信息来记忆理解:父节点(父元素 父元素级别 祖父节点指向 子节点信息。。-多个子节点 跳表的查询和层级数重点源码分析: