文章目录
- 第一章、NoSQL简介
- 第二章、Redis
- 2.1 Redis简介
- 2.2 Redis的特点
- 2.3 Linux上安装Redis
- 2.4 Redis的客户端
- 2.5 Redis基本知识
- 2.5.9 清空所有的数据库:flushall
- 2.6 Redis的5种数据结构
- 2.7 Redis的常用操作命令
- 2.8 Redis的配置文件
- 2.9 Redis的持久化
- 2.10 Redis的事务
- 2.11 Redis消息的发布与订阅(了解)
- 2.12 Redis的主从复制
- 2.12.1一主二从的Redis集群
- 2.12.1.1 一主二从原理
- 2.12.1.2 一主二从搭建
- 第一步:将redis.conf 拷贝三份,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf
- 第二步:分别打开三个窗口模拟三台服务器,通过各自的redis配置文件开启
- 第三步:查询三台redis服务在集群中的主从信息:info replication
- 第四步:先在6379进行写操作
- 第五步:设置主从关系:设从不设主
- 第六步::全量复制:
- 第七步:增量复制:
- 第八步:主写从读、读写分离:
- 第九步:主机宕机,从机原地待命
- 第十步:主机宕机后恢复,一切恢复正常
- 第十一步:从机宕机:主机少一个从机,其他从机不变
- 第十二步:从机宕机后恢复,需要重新设置主从关系
- 第十三步:从机上位:
- 第十四步:天堂变地狱
- 2.12.2 复制原理
- 2.13 哨兵模式
- 2.13.1哨兵模式原理
- 2.13.2 哨兵模式搭建
- 1—5步跟一主二从搭建一样:一台服务器模拟三台主机、查询主从信息、写操作6379、设置主从关系、全量复制、增量复制、主写从读、读写分离。
- 6、在redis安装目录下创建redis_sentinel.conf文件,并编辑里边的内容:sentinel monitor dc-redis 127.0.0.1 6379 1,表示:指定监控主机的ip地址,port端口,得到哨兵的投票数(当哨兵投票数大于或者等于此数时切换主从关系)。
- 7、新开窗口,启动哨兵:redis-sentinel redis_sentinel.conf
- 8、主机宕机
- 9、等待从机投票,在sentinel窗口中查看打印信息
- 10、查看6379和6381的redis信息:
- 11、原主机恢复,启动6379:
- 2.14 主从复制小结
- 2.15 Jedis操作Redis
- 2.16 Redis的可视化客户端
第一章、NoSQL简介
1.1 数据库应用的演变历程
单机数据库时代、Memcached时代、读写分离时代、分表分库时代(集群)、nosql时代。
1.2 NoSQL数据库
彻底改变底层存储机制。不再采用关系数据模型,而是采用聚合数据结构存储数据
有Redis、MongoDB、HBASE…
1.3 当前NoSQL的使用
NoSQL和传统的关系型数据库不是排斥和取代的关系,在一个分布式应用中往往是结合使用的。复杂的互联网应用通常都是多数据源、多数据类型,应该根据数据的使用情况和特点,存放在合适的数据库中。
1.4 NoSQL数据模型
传统关系型数据库:表
NoSql数据库:聚合结构。把组相关联的数据作为一个整体进行存储和管理
BSON:数据保存到键值对中、数据和数据之间用逗号隔开,{}表示对象,[]表示数组。
k-v键值对、列簇、图标模型等。
Redis采用的是k-v模型存储数据
第二章、Redis
2.1 Redis简介
Redis中的数据大部分时间都是存储在内存中的,适合存储频繁访问、数据量比较小的数据。
缓存数据库
2.2 Redis的特点
2.3 Linux上安装Redis
第一步:下载redis
https://redis.io/
第二步:使用Xftp工具上传redis-5.0.2.tar.gz到linux 系统
第三步:解压redis-5.0.2.tar.gz到/opt目录
第四步:编译redis,进入解压目录,并且执行make命令
报错:gcc命令未找到
第五步:安装gcc
什么是 gcc ?
gcc是GNU compiler collection的缩写,它是Linux下一个编译器集合(相当于javac ),是c或c++程序的编译器。
1.怎么安装gcc ?
方式一:在有外网的情况下,使用yum进行安装。执行命令:yum -y install gcc。
2.执行gcc –v查看Linux内核版本
第六步:再次回到redis解压目录执行make命令进行编译
第七步:进行清理工作
第八步:再次执行make指令进行编译
第九步:执行make install安装redis
注意:在make执行之后再执行 make install,该操作则将 src下的许多可执行文件复制到/usr/local/bin 目录下,这样做可以在任意目录执行redis的软件的命令(例如启动,停止,客户端连接服务器等), make install 可以不用执行,看个人习惯。
查看make编译结果,cd src目录
第十步:启动Redis
启动方式:
① 前台启动 redis-server
使用配置文件中的默认参数启动
②后台启动 redis-server &
使用配置文件中的默认参数启动
③根据配置文件启动 启动命令 配置文件 &
注意:如果修改了redis的配置文件redis.conf,必须在启动时指定配置文件,否则还是使用默认参数启动!
第十一步:关闭Redis服务
关闭方式:
①使用redis客户端关闭,向服务器发出关闭命令
任意目录下执行 指令redis-cli shutdown
推荐使用这种方式, redis先完成数据操作,然后再关闭。
例如:
②kill pid 或者 kill -9 pid
这种不会考虑当前应用是否有数据正在执行操作,直接就关闭应用。
先使用 ps -ef | grep redis 查出进程号,在使用 kill pid
2.4 Redis的客户端
Redis客户端是一个程序,通过网络连接到Redis服务器,从而实现跟 Redis服务器的交互。
Redis客户端发送命令,同时显示Redis服务器的处理结果。
redis-cli(Redis Command Line Interface)是Redis自带的基于命令行的Redis客户端,用于与服务端交互,我们可以使用该客户端来执行redis的各种命令。
2.4.1 启动Redis客户端
先开启redis服务
一、直接连接
在任意目录执行 redis-cli:默认连接(本机)127.0.0.1 ,端口6379的redis服务
二、指定IP和端口连接redis
-h redis主机IP(可以指定任意的redis服务器)
-p端口号(不同的端口表示不同的redis应用)
在任意目录下执行 redis-cli -h 127.0.0.1 -p 6379
2.4.2 关闭Redis客户端
退出Redis客户端:exit或者quit指令。
2.5 Redis基本知识
2.5.1 测试Redis性能
2.5.2 查看Redis 服务是否正常运行
redis >ping 返回PONG
解释:输入ping,redis给我们返回PONG,表示redis服务运行正常
2.5.3 查看redis服务器的统计信息:info
语法:info [section]
作用:以一种易于解释且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。section 用来返回指定部分的统计信息。 section的值:server , clients ,memory等等。不加section 返回全部统计信息
返回值:指定section的统计信息或全部信息
例1:统计server的信息
例2:统计全部信息
2.5.4 redis默认使用16个库
库就相当于是MySQL中自己定义的数据库,比如CRM数据库…
Redis默认使用16个库,从0到15。 对数据库个数的修改,在redis.conf文件中databases 16,理论上可以配置无限多个。
Redis的库和关系型数据库中的数据库实例类似,但又有一些不同,比如redis中各个库不能自定义命名,只能用序号表示,redis中各个库不是完全独立的,使用时最好一个应用使用一个redis实例,不建议一个redis实例中保存多个应用的数据。Redis实例本身所占存储空间其实是非常小的,因此不会造成存储空间的浪费。
Redis中的数据库实例只能由redis服务来创建和维护,开发人员不能修改和自行创建数据库实例,但是MySQL可以
2.5.5切换库命令:select db
默认使用第0个,如果要使用其他数据库,命令是 select index
例子:切换到1数据库
2.5.6 查看当前数据库中key的数目:dbsize
语法:dbsize
作用:返回当前数据库的 key 的数量。
返回值:数字,key的数量
2.5.7 查看当前数据库中有哪些key:keys *
2.5.8 清空当前库:flushdb
2.5.9 清空所有的数据库:flushall
这也体现出redis中的库并不是完全无关的。
2.5.10 config get * 获得redis的所有配置值
语法:config get parameter
作用:获取运行中Redis服务器的配置参数, 获取全部配置可以使用*。参数信息来自redis.conf 文件的内容。
例1:获取数据库个数 config get databases
例2:获取端口号config get port
2.6 Redis的5种数据结构
2.6.1 字符串类型 string
字符串类型是Redis中最基本的数据结构,它能存储任何类型的数据,包括二进制数
据,序列化后的数据,JSON化的对象甚至是一张图片。最大512M。
单key:单value
2.6.2 列表类型 list
Redis列表是简单的字符串列表,按照插入顺序排序,元素可以重复。你可以添加一个元素到列表的头部(左边)或者尾部(右边),底层是个链表结构。
单key:多有序value
2.6.3 集合类型 set
Redis的Set是string类型的无序无重复集合。
单key:多无序value
2.6.4 哈希类型 hash
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
单key:对象(属性:值)
2.6.5 有序集合类型 zset (sorted set)
Redis 有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。
不同的是zset的每个元素都会关联一个分数(分数可以重复),redis通过分数来为集合中的成员进行从小到大的排序。
单key:多有序value:
你输入是Salary:5000 李四,3500 张三,8000 周丽
内部存储是Salary:3500 张三,5000 李四,8000 周丽
2.7 Redis的常用操作命令
2.7.1 Redis的Key的操作命令
2.7.1.1 keys
2.7.1.2 exists
2.7.1.3 move
2.7.1.4 ttl
2.7.1.5 expire
2.7.1.6 type
2.7.1.7 rename
2.7.1.8 del
2.7.2 字符串类型(string)的数据操作命令
2.7.2.1 set
2.7.2.2 get
2.7.2.3 append
2.7.2.4 strlen
2.7.2.5 incr
2.7.2.6 decr
2.7.2.7 incrby
2.7.2.8 decrby
2.7.2.9 getrange
依次往前的字符是-2…
Getrange address 0 -1: 就是整个value
2.7.2.10 setrange
能覆盖几个就覆盖几个
2.7.2.11 setex
2.7.2.12 setnx
和set指令不同,set可以覆盖
2.7.2.13 mset
2.7.2.14 mget
2.7.2.15 msetnx
2.7.3 列表(List)的数据操作命令
2.7.3.1 lpush
2.7.3.2 rpush
2.7.3.3 lrange
2.7.3.4 lpop
2.7.3.5 rpop
2.7.3.6 lindex
2.7.3.7 llen
2.7.3.8 lrem
2.7.3.9 ltrim
2.7.3.10 lset
2.7.3.11 linsert
2.7.4 集合类型(set)的数据操作命令
2.7.4.1 sadd
2.7.4.2 smembers
2.7.4.3 sismember
2.7.4.4 scard
2.7.4.5 srem
2.7.4.6 srandmember
2.7.4.7 spop
2.7.4.8 smove
2.7.4.9 sdiff
2.7.4.10 sinter
2.7.4.11 sunion
2.7.5 哈希类型(hash)数据的操作命令
2.7.5.1 hset
2.7.5.2 hget
2.7.5.3 hmset
2.7.5.4 hmget
2.7.5.5 hgetall
2.7.5.6 hdel
2.7.5.7 hlen
2.7.5.8 hexists
2.7.5.9 hkeys
2.7.5.10 hvals
2.7.5.11 hincrby
2.7.5.11 hincrbyfloat
2.7.5.12 hsetnx
2.7.6 有序集合类型(Zset)数据的操作命令
2.7.6.1 zadd
2.7.6.2 zrange
2.7.6.3 zrangebyscore
2.7.6.4 zrem
2.7.6.5 zcard
2.7.6.6 zcount
2.7.6.7 zrank
2.7.6.8 zscore
2.7.6.9 zrevrank
2.7.6.10 zrevrange
2.7.6.11 zrevrangebyscore
2.8 Redis的配置文件
2.8.1 redis.conf存放位置
2.8.2 Redis的网络相关配置
1.修改ip和端口
2.第三种服务启动方式,指定配置文件
3.客户端连接,指定ip和端口
4.关闭服务,也要指定ip和端口
2.8.3 Redis的常规配置
2.8.4 Redis的安全配置
2.8.5 Redis的RDB配置
2.8.6 Redis AOF配置
2.9 Redis的持久化
2.9.1 RDB策略
2.9.2 AOF策略
2.9.3 持久化小结
2.10 Redis的事务
2.10.1 Redis事务的常用命令
2.10.1.1 multi
2.10.1.2 exec
第三条执行失败了,但是其他的执行成功了,这显然不符合事务的标准,所以Redis的事务只能保证部分原子性
2.10.1.3 discard
2.10.1.4 watch
2.10.1.5 unwatch
2.10.1.6 Redis事务小结
2.11 Redis消息的发布与订阅(了解)
2.11.1 Redis发布订阅
2.11.2 Redis发布订阅示意图
2.11.3 Redis发布订阅的常用命令
2.11.3.1 subscribe
2.11.3.2 publish
2.11.3.3 psubscribe
2.12 Redis的主从复制
2.12.1一主二从的Redis集群
2.12.1.1 一主二从原理
2.12.1.2 一主二从搭建
1、一台服务器模拟三台主机:
第一步:将redis.conf 拷贝三份,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf
修改三份配置文件:以redis6379.conf为例
修改 port端口,pid文件名,日志文件名,rdb文件名
如:
port 6379
pidfile /var/run/redis_6379.pid
logfile “6379.log”
dbfilename dump6379.rdb
第二步:分别打开三个窗口模拟三台服务器,通过各自的redis配置文件开启
通过redis客户端分别连接三台redis服务
redis-cli –h 127.0.0.1 –p 6379
redis-cli –h 127.0.0.1 –p 6380
redis-cli –h 127.0.0.1 –p 6381
第三步:查询三台redis服务在集群中的主从信息:info replication
默认情况下,所有的redis服务都是主机,即都能写和读,但是都还没有从机。
第四步:先在6379进行写操作
6380服务器没有k1
说明三台redis服务器互相独立,互不影响
第五步:设置主从关系:设从不设主
在6380和6381主机上分别执行命令:slaveof 127.0.0.1 6379
让6380和6381从属于6379主机
这时看6379,已经有两个从机了
另一种方式,就是修改6380和6381的配置文件,在最后加上:
注意:如果主redis设置了密码,从库的redis.conf中还需要设置masterauth为主redis的密码。
第六步::全量复制:
在6380和6381分别执行命令get k1
第七步:增量复制:
6379执行命令:set k2 v2。
然后6380端口和6381端口,分别执行命令:get k2
第八步:主写从读、读写分离:
在6380和6381上执行写操作set k3 v3
第九步:主机宕机,从机原地待命
6379执行指令shutdown,
并查看6380和6381的redis信息
第十步:主机宕机后恢复,一切恢复正常
重启6379
第十一步:从机宕机:主机少一个从机,其他从机不变
6380执行指令shutdown,
并查看6379和6381的redis信息
第十二步:从机宕机后恢复,需要重新设置主从关系
重启6380
并查看6380、6379和6381的redis信息
注意:从机跟master断开联系,必须重新连接,除非写进配置文件。
第十三步:从机上位:
第一步:主机宕机,6379执行命令:shutdown
第二步:6380断开主从关系,执行命令:slaveof no one
第三步:重新搭建主从,6381执行命令:info replication,slaveof 127.0.0.1 6380
第四步:之前主机恢复,重启6379的Redis服务,并执行命令:info replication
在6379主机宕机后,6380从机断开主从关系,6381开始还在原地待命;后来6380从机上位,6381投靠6380,6379主机即使回来但它已是孤寡老人,空头司令。
第十四步:天堂变地狱
6379执行命令slaveof 127.0.0.1 6381,并在63796381执行info replication
一台主机配多台从机,一台从机再配多台从机,从而实现了庞大的集群架构。同时也减轻了一台主机的压力,缺点是增加了服务器间的延迟。
2.12.2 复制原理
2.12.2.1 全量复制
2.12.2.2 增量复制
Master将新的所有收集到的修改命令依次传给slave,完成同步
2.13 哨兵模式
2.13.1哨兵模式原理
2.13.2 哨兵模式搭建
1—5步跟一主二从搭建一样:一台服务器模拟三台主机、查询主从信息、写操作6379、设置主从关系、全量复制、增量复制、主写从读、读写分离。
6、在redis安装目录下创建redis_sentinel.conf文件,并编辑里边的内容:sentinel monitor dc-redis 127.0.0.1 6379 1,表示:指定监控主机的ip地址,port端口,得到哨兵的投票数(当哨兵投票数大于或者等于此数时切换主从关系)。
7、新开窗口,启动哨兵:redis-sentinel redis_sentinel.conf
8、主机宕机
9、等待从机投票,在sentinel窗口中查看打印信息
10、查看6379和6381的redis信息:
11、原主机恢复,启动6379:
2.14 主从复制小结
2.15 Jedis操作Redis
2.15.1 Jedis简介
使用Redis官方推荐的Jedis,在java应用中操作Redis。Jedis几乎涵盖了Redis的所有命令。操作Redis的命令在Jedis中以方法的形式出现。
方法名和命令行中的命令一样
2.15.2 Jedis的使用
2.15.2.1 在Linux中开启Redis服务
1.修改redis6379.conf中的bind为Linux的ip地址,因为我们要从外部连接,就不能用127.0.0.1了
2.开启redis服务
3.关闭Linux防火墙
2.15.2.2 在idea中创建maven项目,操作Jedis
添加Jedis的依赖
这里只是举例,所有redis中的指令,用Jedis都能实现
1.对key的操作举例
2.对String数据操作举例
在数据库中添加了
3.事务操作
数据库中有了数据
2.16 Redis的可视化客户端
2.16.1 安装
2.16.2 操作