一:关系型数据库和非关系型数据库
1.1:关系型数据库
- 一个结构化的数据库,创建在关系模型基础上
一般面向于记录
包括:oracle,MySQL,SQL server Microsoft Access,DB2等
1.2:非关系型数据库
- 除了主流的关系型数据库外的数据库,都认为是非关系型数据库
包括:Redis MongBD,Hbase,CouhDB等
1.3 非关系型数据库产生背景
- High performance—对数据库高并发读写要求
- Huge Storage—对海量数据高效存储与访问需求
- High Scalability && High Availability----对数据库高可扩展性与高可用性需求
二、Redis简介
Redis基于内存运行并支持持久化
采用key-value(键值对)的存储方式
它有着什么优点?
- 具有极高的数据读写读写速度
- 支持丰富的数据类型
- 支持数据的持久化
- 原子性
- 支持数据备份
三、Redis安装部署
流程解析
3.1 编译安装Redis
先关闭防火墙和核心防护
systemctl stop firewalld
setenforce 0
上次软件包redis-5.0.7.tar到目录下
[root@localhost ]# yum -y install gcc gcc-c++ make -y //安装gcc编译器,最小化安装需要进行安装,图型化安装默认已经安装
[root@localhost ]# tar zxvf redis-5.0.7.tar.gz //进行解压
[root@localhost ]# cd redis-5.0.7/
[root@localhost redis-5.0.7]#make
[root@localhost redis-5.0.7]# make prefix=/usr/local/redis install //指定到redis的目录下使它生效
[root@localhost redis-5.0.7]#ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh //执行
3.2 设置Redis相关配置文件
解释:
Please select the redis port for this instance: [6379] //选择你的端口,默认是6379
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] //配置文件
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] //日志文件
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] //数据文件
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] //服务端的执行文件
Selected config:
Port : 6379 //端口号
Config file : /etc/redis/6379.conf //配置文件路径
Log file : /var/log/redis_6379.log //日志文件路径
Data dir : /var/lib/redis/6379 //数据文件路径
Executable : /usr/local/bin/redis-server //执行脚本服务的路径
Cli Executable : /usr/local/bin/redis-cli //客户端工具的存放路径
[root@localhost utils]# netstat -ntap | grep redis //查看端口有没有启动
3.3 连接数据库
[root@localhost utils]# redis-cli -h 127.0.0.1 -p 6379 //本地地址可以直接连接
[root@localhost utils]# redis-cli -h 20.0.0.30 -p 6379 //连接redis,指定IP地址 -h:指定ip地址 -p:指定端口号
Could not connect to Redis at 192.168.247.206:6379: Connection refused //报错信息
//显示不可以连接,本地可以直接登陆(127.0.0.1),若是想要指定IP地址,就需要在配置文件内添加监听地址
[root@localhost utils]# vim /etc/redis/6379.conf //进去作修改
70行: bind 127.0.0.1 20.0.0.30 //后面添加
[root@localhost utils]# /etc/init.d/redis_6379 stop
[root@localhost utils]# /etc/init.d/redis_6379 start
[root@localhost utils]# redis-cli -h 20.0.0.30 -p 6379
20.0.0.30:6379> //成功连接
配置参数(/etc/redis/6379.conf)
bind:监听的主机地址
port:端口
daemonize yes:启用守护进程
pidfile:指定PID文件
loglevel notice :日志级别
logfile:指定日志文件
四:命令行工具的用法
4.1:redis-cli
获取命令帮助
help @<group>: 获取<group>中的命令列表
help <command>: 获取某个命令的帮助
help <tab>: 获取可能帮助的主题列表
例如:
连接本地数据库
[root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379>
连接远程数据库
[root@localhost utils]# redis-cli -h 192.168.10.1 -p 6379
192.168.10.1:6379>
set: 存放数据
get: 获取数据
keys: 获取符合规则的键值列表,
exists:可以判断键值是否存在。
del:表示删除当前数据库的指定 key
type:获取 key 对应的 value 值类型
rename:是对已有 key 进行重命名,使用rename 命令进行重命名时, 无论目标 key 是否存在都进行重命名, 且源 key 的值会覆盖目标 key 的值
renamenx:是对已有 key 进行重命名,不会覆盖key的值
dbsize:查看当前数据库中key的数目
4.2:redis-benchmark 测试工具
- redis-benchmark 是官方自带的 Redis 性能测试工具, 可以有效的测试 Redis 服务的性能。
- 基本的测试语法:redis-benchmark [option] [option value]
-h: 指定服务器主机名。
-p: 指定服务器端口。
-c: 指定并发连接数。
-n: 指定请求数。
-d: 以字节的形式指定 SET/GET 值的数据大小。
-q: 强制退出 redis。 仅显示 query/sec 值。
4.3:Redis多数据库操作
-
Redis支持多数据库,默认支持16个数据库,0-15命名
-
多数据库相互独立,互不干扰
-
数据库可以迁移数据库
多数据库常用命令
- 多数据库间切换
- 多数据库间移动数据
- 清除数据库内数据
为什么有这么多数据库?
因为在生产环境当中,这些数据库是为了不同场景而设立的
例如:
- 生产环境用到的数据放在1数据库当中
- 开发环境用到的数据放在2数据库当中
- 测试环境用到的数据放在3数据库当中
五:Redis数据类型(五种)
Redis支持五种数据类型:
string (字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
5.1: string(字符串)
- string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
- string类型是二进制安全的,redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
- string类型是Redis最基本的数据类型,string类型的值最大能存储512MB.
[root@localhost utils]# redis-cli -h 20.0.0.30 -p 6379
20.0.0.30:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
20.0.0.30:6379> type name
string
20.0.0.30:6379> keys *
"name"
5.2: Hash (哈希字典)
- hash是一个键值(key=>value)对集合
- hash是一个string类型的field 和 value的映射表,hash特别适合用于存储对象
- hash 可以存储2的32次方 -1键值对。
20.0.0.30:6379> hmset stu name lisi age 18 sex 男
OK
20.0.0.30:6379> hget stu name
"lisi"
20.0.0.30:6379> hget stu age
"18"
20.0.0.30:6379> hget stu sex
"\xe7\x94\xb7" //这里出现了乱码
20.0.0.30:6379> quit
//--raw 解决中文乱码问题
[root@localhost utils]# redis-cli -h 20.0.0.30 -p 6379 --raw
20.0.0.30:6379> hget stu set
男
5.3:list (列表)
- Redis 列表是简单的字符串列表,按照插入顺序排序,可以重复。可以添加一个元素到列表的头部(左部)或者尾部(右边)
- 列表最多可存储2的32次方 -1元素。
20.0.0.30:6379> lpush hobby play
1
20.0.0.30:6379> lpush hobby read
2
20.0.0.30:6379> lpush hobby sport
3
20.0.0.30:6379> lrange hobby 0 10 //把列表中的元素展现前3行
sport
read
play
20.0.0.30:6379> lpush hobby read //再存一个read,是可以重复的
4
20.0.0.30:6379> lrange hobby 0 10 //在10行以内都展现出来
read
sport
read
play
5.4: set (集合:无序集合)
- Redis的Set是string类型的无序集合
- 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是0(1)
add命令:添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中返回0。
20.0.0.30:6379> sadd color red green yellow
3
20.0.0.30:6379> smembers color
red
green
yellow
20.0.0.30:6379> sadd color red
0
5.5: zset(sorted set:有序集合)
- Redis zset和set 一样也是string类型元素的集合,并且不允许重复的成员
- 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序
zadd命令:添加元素到集合,元素在集合中存在则
20.0.0.30:6379> keys * //查看key的数量
hobby
hobby
stu
color
name
20.0.0.30:6379> del color //把元素color删除
1
20.0.0.30:6379> keys *
hobby
stu
name
20.0.0.30:6379> zadd color 0 red
1
20.0.0.30:6379> zadd color 0 blue
1
20.0.0.30:6379> zadd color 1 green
1
20.0.0.30:6379> zadd color 2 yellow
1
20.0.0.30:6379> zrangebyscore color 0 10
blue
red
green
yellow
20.0.0.30:6379> zrangebyscore color 0 0
blue
red
20.0.0.30:6379> zrangebyscore color 1 1
green
20.0.0.30:6379> zrangebyscore color 1 2
green
yellow
20.0.0.30:6379> zrangebyscore color 2 2
yellow
20.0.0.30:6379>
六:多数据库操作
6.1:切换数据库
20.0.0.30:6379> select 1 //切换到2数据库
OK
20.0.0.30:6379[1]> select 2 //切换到3数据库
OK
20.0.0.30:6379[2]> select 1
OK
20.0.0.30:6379[1]> keys * 查看,发现没有数据,因为redis默认支持16个数据库,子数据库之间不共享数据
20.0.0.30:6379[1]> select 0 重新回到1数据库
OK
6.2:数据迁移
20.0.0.30:6379> move stu 1 把1数据库的信息迁移到2数据库
1
20.0.0.30:6379> keys * //查看key,发现1数据库已经没有stu
hobby
color
name
20.0.0.30:6379> select 1 //切换到2数据库
OK
20.0.0.30:6379[1]> keys * //发现stu
"stu"
20.0.0.30:6379[1]> hget stu name
"lisi"
20.0.0.30:6379[1]> hget stu age
"18"
6.3: 清空所有数据库数据
高危命令:一定要慎用,直接把16个数据库的信息全部删除!
20.0.0.30:6379[1]> FLUSHALL
OK
20.0.0.30:6379[1]> get name
//空空如也
20.0.0.30:6379[1]> select 0
OK
20.0.0.30:6379[1]> get name
//空空如也
6.4:key常规管理
//验证key是否存在 exists
20.0.0.30:6379> set name zhangsan
OK
20.0.0.30:6379> exists name //执行成功为1,否则为0,说明name是存在的
1
20.0.0.30:6379> exists names
0
//重命名 rename
20.0.0.30:6379> rename name na
OK
20.0.0.30:6379> get na //get调用它
"zhangsan"
//设置超时时间 PEXPIRE(单位:毫秒)
20.0.0.30:6379> keys * //查看键值列表,key的数量
"hobby"
"color"
"na"
20.0.0.30:6379> PEXPIRE na 3000 //设置时间为3秒,单位为毫秒,1秒等于1000毫秒
20.0.0.30:6379> get na
//空空如也
20.0.0.30:6379> keys * 查看key,na已经消失
1) "hobby"
2) "color"
//查看剩余时间PTTL (单位:毫秒)
20.0.0.30:6379> set name zhangsan
OK
20.0.0.30:6379> PTTL name //查看生命周期,-1表示永不超时
-1
20.0.0.30:6379> PEXPIRE name 50000 //设置时间为50秒
1
20.0.0.30:6379> PTTL name
40499 //剩余时间
20.0.0.30:6379> PTTL name
32559
20.0.0.30:6379>
//取消超时时间
20.0.0.30:6379> PERSIST name
1
20.0.0.30:6379> PTTL name
-1
20.0.0.30:6379> get name
zhangsan
//随机返回key RANDOMKEY
20.0.0.30:6379> mset age 18 score 88 sex boy
OK
20.0.0.30:6379> RANDOMKEY
"age" //返回的是随机的
20.0.0.30:6379> RANDOMKEY
"sex"
20.0.0.30:6379> RANDOMKEY
"age"
20.0.0.30:6379> RANDOMKEY
"sex"
//查看所有key
20.0.0.30:6379> keys * //查看键值列表,key的数量
hobby
color
na