02.NOSql介绍与好处【理解】
疑问
-
mysql这种关系型数据库(磁盘数据库)在处理大数据量存储和大量用户并发访问获取数据方面,性能如何?
非常慢,对磁盘操作需要使用IO流,一个字节一个字节存取操作。所有数据读取到内存中后才可以操作。
使用内存数据库优化磁盘数据库,内存数据库就是非关系型数据库NOSQL
NOSql介绍
NOSql,全称 not only sql ,不仅仅是sql,泛指非关系型数据库。
非关系与关系型数据库的区别
为什么需要NOSql?
因为是内存操作数据,非常快,会让系统性能大大提高。(解决了3高问题,高并发,高海量,高可用)
高并发:同一个时间点并发访问量非常大。
高海量:一个人访问的数据非常大,查询一个表,表中的数据有上亿条。
高可用:服务器崩溃了,服务器需要立刻重启后数据依然可用。
以后到底用关系型数据库还是非关系型数据库?
2个都用
小结
-
非关系数据库的性能为什么高于关系型数据库?
因为内存存取远远大于磁盘读写的速度
03.NOSql数据库产品-Redis与Redis安装【理解】
非关系型数据库的产品
java领域主要使用redis
redis存储数据特点
使用键值对进行存取
redis安装与目录介绍
-
下载
windows版本,https://github.com/MSOpenTech/redis/tags 微软提供的
linux版本,官方提供的http://redis.io/download
大家不需要下载,因为软件目录中提供了
-
解压完成安装
-
介绍redis的目录结构
使用redis存储数据体验步骤
-
双击运行redis服务器端redis-server.exe
-
双击运行redis客户端redis-cli.exe
-
在客户端上进行存取数据
小结
-
redis是以什么方式存储数据的?
键值对
-
redis客户端与服务器端软件的名字是什么?
redis-cli.exe
redis-server.exe
-
redis服务器使用的端口号是?
6379
04.redis存储数据的五种数据类型结构介绍【理解】
目标
redis常见可以存储5种数据类型
类型介绍
key的使用原则
-
不建议key名字太长,通常不超过1024字节,如果太长会影响查询的速度。
-
不建议太短,太短会降低可读性。
-
一般在公司,都有统一命名规范。
见名知意,与java变量的命名规范一致
小结
-
redis支持常用五种数据类型都有哪些?
string
hash
list
setsorted set(zset)
-
以后最常用使用哪种数据类型?
string
05.redis数据类型命令1—String类型【应用】
介绍
字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中以二进制保存,没有编码和解码的过程。无论存入的是字符串、整数、浮点类型都会以字符串写入。在 Redis 中字符串类型的 Value 最多可以容纳的数据长度是 512M。这是以后最常用的数据类型。
操作命令语法
String操作命令
小结
-
以后java应用开发主要使用redis什么类型存储数据数据?
string类型
06.redis数据类型命令2—hash类型【应用】
介绍
Redis 中的 Hash 类型可以看成具 String 的键和 String 的值 Map 容器,每一个 Hash 可以存储 40(42 亿 9千多个)亿个键值对。
操作命令语法
操作
小结
-
使用hash类型添加存储数据的语法?
hset key field1 value1
hmset key field1 value1 field2 value2 …
07.redis数据类型命令3—list类型【应用】
list介绍
在 Redis 中,List 类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其左部(left)和右部(right)添加新的元素。在插入时,如果该键并不存在,Redis 将为该键创建一个新的链表,如果这个键已经存在,则是向 list 添加元素。与此相反,如果链表中所有的元素均被移除,那么该键也将会被从数据库中删除。List 中可以包含的最大元素数量是 40 亿个。
添加元素语法
操作
效果
读取数据的语法
效果
删除元素
效果
查看列表的长度
list应用场景
以后对于高并发的下单数据,先写入redis的list类型数据(链表,有序的),再通过链表一个一个有序删除获取删除的数据(下单数据),再写入数据库。
小结
-
list类型数据特点?
链表,有序,可重复
08.redis数据类型命令4—set类型【应用】
介绍
在 Redis 中,我们可以将 Set 类型看作为没有排序的字符集合,和 List 类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。Set 可包含的最大元素数量是 40 亿,和 List 类型不同的是,Set 集合中不允许出现重复的元素。
操作命令语法
存储数据特点:不可重复,无序
效果
小结
-
set类型数据特点?
无序,不可重复
09.redis数据类型命令5—zset类型【应用】
介绍
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复,每个集合可存储40多亿个成员。
常用命令
命令演示
-
添加键country,分数是10,值是Japan
-
添加键country,分数是5,值是USA
-
添加键country,分数是1,值是China,分数是120,值是Korea
-
查询country中所有的元素
-
查询Japan的索引号(从0开始)
-
删除值为USA的元素
-
查询country中还有多少个元素
效果
小结
如果希望了解其他类型,怎么办?
http://www.runoob.com/redis/redis-sorted-sets.html
10.客户端工具使用与redis通用命令【应用】
客户端软件
直接安装提供的客户端软件即可,双击桌面图标执行。
启动后出现如下登录界面:
操作命令语法
效果
11.redis持久化方式1-RDB策略【理解】
疑问
-
redis服务器关闭所有内存数据都会丢失吗?
不会全部丢失,默认只会丢失一部分,因为redis有持久化机制,redis会将内存数据符合条件时进行持久化,在redis重启的时候会恢复持久化的数据,这就是内存数据不会全部丢失。
RDB策略介绍(快照策略)
rdb(redis data base)持久化策略就是在符合一定条件下将内存所有数据持久化到磁盘中dump.rdb文件中。RDB策略是redis默认持久化策略。也叫快照策略。
为什么叫快照策略? 因为磁盘持久化的数据为某一个时间点的内存所有数据。
RDB策略的配置
rdb持久化内存的数据到dump.rdb文件,文件中会存储键值对数据。
rdb持久化的时候是将当时内存中所有的键值对一次性的持久化到dump.rdb
案例演示-采用RDB策略持久化数据测试
-
需求
修改rdb持久化策略方案,设置20秒内修改3个键进行持久化数据到dump.rdb文件中
-
实现步骤
-
修改配置文件redis.windows.conf,增加输入性配置
save 20 3
-
关闭redis客户端、服务器端,重启redis服务器,注意重启时必须指明配置文件启动
-
启动客户端,观察redis服务器是否存储3个键值对,是否进行持久化操作
-
注意
如果修改了配置文件redis.windows.conf,下次重启服务器端必须启动dos命令指定配置文件启动服务器。否则服务器无法识别配置文件的修改。
reids-server.exe redis.windows.conf
小结
-
rdb策略的优点?
持久化的频率不高,意味着redis提供给用户操作数据性能更高
-
rdb策略的缺点?
持久化的频率不高,意味着丢失数据严重,数据安全性低
12.redis持久化方式2-AOF策略【理解】
AOF(append only file)策略介绍
默认没有开启的策略,它的特点持久化的频率更高了,默认每秒持久化1次。每一秒内将最新的写入与删除的命令进行持久化。
需要修改配置文件redis.windows.conf进行开启AOF策略,如下操作
开启AOF后,持久化策略有3个
AOF默认是采用的策略是每秒持久化一次,会导致持久化文件随着时间不断增大,AOF会记录每一个key所有修改操作的过程。
案例演示-采用AOF策略持久化数据测试
-
需求
开启AOF策略进行持久化数据测试,观察其持久化数据的过程
-
实现步骤
-
修改配置文件redi.windows.conf,开启aof
-
关闭客户端、服务器端,重启服务器端并指定配置文件启动
-
观察持久化的数据
-
疑问:每秒都持久化会导致日志文件过大,那么文件过大怎么办?需要开发人员做什么优化吗?
答:不需要开发人员做任何事情,redis对于aof策略有日志过大有重写机制(如下信息都在配置文件中)
小结
-
AOF策略的优点?
每秒持久化,具有更高的数据安全,如果服务器崩溃只会丢1秒内的数据
-
AOF缺点?
由于持久化频率高,redis的性能会变低。
13.redis持久化RDB与AOF实践总结【理解】
疑问
-
RDB和AOF以后到底推荐使用哪一个呢?
官方推荐2个都使用,因为可以保证数据高可用。
如果希望高可用,才开AOF,否则只建议使用RDB,因为AOF会降低redis的性能(cpu超过60%都会选择关闭AOF)。
官方建议
通常,如果你要想提供很高的数据保障性,那么建议你同时使用两种持久化方式。
如果你可以接受灾难带来的几分钟的数据丢失,那么你可以仅使用RDB。
很多用户仅使用了AOF,但是我们建议,既然RDB可以时不时的给数据做个完整的快照,并且提供更快的重启,所以最好还是也使用RDB。
因此,我们希望可以在未来(长远计划)统一AOF和RDB成一种持久化模式。(redis.3.0版本以后默认RDB和AOF都开启了)