Redis
1.认识NoSQL
补充:
一、sql什么是主从数据库
主从数据库就是把数据库架构分为主数据库和从数据库。从数据库是主数据库的备份,以提高数据的安全性,不至于一个数据库崩掉而导致整个项目也运行不起来。可以有效的防止财产的损失。一般从库只做查询操作,而主库则做更改操作,也就是所谓的读写分离。
二、sql什么是主主数据库
所谓的主主,其实也就是两个数据库互为主从。两个库都可以对数据库进行更改和读写操作,个人感觉是主从数据库的进化版,更加的实用,但是不足之处就是,如果有自增主键的话,很大可以会产生主键冲突,所以就需要一定的算法进行改进。
三、实现原理
第一步:master记录二进制日志
在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
第二步:slave将master的binary log拷贝到它自己的中继日志
首先,slave开始一个工作线程—I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经执行完master产生的所有文件,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
第三步:SQL slave thread(SQL从线程)处理该过程的最后一步
SQL线程从中继日志读取事件,并重新执行其中的事件而更新slave的数据,使其与master中的数据一致。
四、nosql扩展性方面使用hash列表属性
2.认识Redis
Redis诞生于2009年全称是Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库。
特征:
- 键值(key-value)型,value支持多种不同数据结构,功能丰富
- 单线程,每个命令具备原子性
- 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
- 支持数据持久化(定期将数据持久化到磁盘)
- 支持主从集群(备份)、分片集群(把数据的拆分,存储上限提高)
- 支持多语言客户端
3.安装Redis
-
windows安装
- 见其他csdn教程
-
Linux安装
这里先讲一下linux如何变为root权限
su
输入密码:
输入你的linux登录密码(注意这里是盲打,你打出来它不会显示,打完再按回车键,符号由$变为#就是变换成功啦)
或者在指令前输入sudo,就是对指令的root化
1.1.安装Redis依赖
Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:
yum install -y gcc tcl
1.2.上传安装包并解压
方法一:然后将课前资料提供的Redis安装包上传到虚拟机的任意目录:
例如,我放到了/usr/local/src 目录:
这里讲一下图形化界面怎么找到计算机文件目录
找到/usr/local/src/将压缩包拖入
然后使用解压缩:
tar -zxvf redis-6.2.6.tar.gz
这里有一个贴心提示
拖拽文件需要下载vmtool
(但是我的虚拟机只能拖到桌面,不能往计算机里的文件拖动,因此使用的cd、cp复制再进行解压网上搜好多了vmtool试了、ftp也连接上了可是还是不能拖拽,有没有大佬帮帮┭┮﹏┭┮)
解压后:
进入redis目录:
cd redis-6.2.6
运行编译命令:
make && make install
方法二:直接在usr/local/src打开终端进行下载
(推荐第二种方法,第一种方法从windows导入时总觉得缺了点东西,导致一直出现两种错误lua的cjson、zmalloc.h错误,查了两天了,最后卸载从终端直接下载的这个没有一点儿问题)
一、安装Redis :
Redis是c开发的,因此安装redis需要c语言的编译环境,
1、查看是否有安装gcc
gcc -v
2、如果没有gcc,则需要在线安装命令
yum install -y gcc
3、wget下载Redis
wget http://download.redis.io/releases/redis-6.2.6.tar.gz
4、解压
tar -zxvf redis-6.2.6.tar.gz
5、进入redis目录:
cd redis-6.2.6
6、编译
make && make install
如果没有出错,应该就安装成功了。
默认的安装路径是在 /usr/local/bin
目录下:
1.3 卸载redis
在当前文件目录下打开终端执行这两条指令
su
/输入数据库密码
rm -rf /usr/local/src/redis-6.2.6
rm -rf /usr/local/src/redis-6.2.6.tar.gz
补充笔记
MySQL 支持的整数类型所需的存储和范围
MySQL BIGINT
BIGINT 是 ab 字节或 64 位整数值,在存储大整数值时非常有用。
MySQL BIGINT 与任何其他 MySQL 整数数据类型一样,可以是有符号或无符号的。有符号数据类型表示该列可以存储正整数和负整数值。这是 MySQL 中大多数整数类型的默认类型。因此,除非明确指定,否则任何整数类型列都可以存储正整数和负整数。
另一方面,无符号数据类型表示该列只能存储正整数值。
签名 MySQL BIGINT 类型的范围在 -9223372036854775808 和 9223372036854775807 之间
对于无符号 BIGINT 类型,取值范围为 0 到 18446744073709551615。
BIGINT 类型的另一个属性是 ZEROFILL。在列上指定此属性后,该列将自动设置为 UNSIGNED。
zerofill 属性也用零填充空格。
例子
让我们看几个例子来说明如何使用 BIGINT 类型。
`CREATE DATABASE IF NOT EXISTS integers;`
`USE integers;`
我们创建一个表并用各种 BIGINT 列填充它,如下面的查询所示:
CREATE TABLE examples(x BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, y BIGINT UNSIGNED, z BIGINT ZEROFILL );
事务的四大特性:
1.原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
2.一致性(Consistency)
一致性是指事务必须使用数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行后都必须处于一致性的状态。
3.隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启一个事务,不能被其他的操作所干扰,多个并发事务之间要相互隔离。
4.持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即使是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
四种隔离级别
脏读:
脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成俩个事务得到的数据不一致,例如:用户A给用户B转账100元,对应SQL语句如下:
当只执行第一条SQL时,A通知B查看账户,B发现确实钱已到账(此时即发生了脏读),而之后无论第二条SQL是否执行,只要该事务不提交,则所有操作都将回滚,那么当B以后再次查看账户时就会发现钱其实并没有转。
不可重复读:
不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了
不可重复读和脏读的区别是,脏读是末一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据
虚读(幻读):
幻读是事务非独立执行时发生的一种现象,例如事务T1对一个表中所有的行的某个数据项做了从“1”修改到“2”的操作,这时事务T2又对这个表插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。
四种隔离级别:
1.Serializable(串行化):可避免脏读,不可重复读,幻读的发生。
2.Repeatable read(可重复读):可避免脏读,不可重复读发生。
3.read committed(读已提交):可避免脏读的发生。
4.read uncommitted(读未提交):最低级别,任何情况都无法保证。
以上四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低。