redis非关系型数据库,又名缓存型数据库。
数据库类型:关系型数据库和非关系型数据库
关系型数据库是一 个机构化的数据库,行和列。
列:声明对象。
行:记录对象属性。
表与表之间的的关联。
sql语句,对指定的表,库,进行增删查改。
在创建表时,我们是设计好了表的结构。按照表结构来存储数据。数据与表结构不匹配,存储数据,会失败。
非关系型数据库:nosql not only sql
不需要定义数据库,也不需要定义表的结构,直接记录即可,而且每条记录都可以有不同的数据类型,字段(字段个数)
redis key:values 键值对形式储存。每个键之间没有直接关联,库与库之间相互独立。
关系型和非关系区别:
1、数据的储存方式不同。
关系型数据库:库---------->表----------->行、列------------>存储数据 |
非关系型数据库:库--------->集合---------->键值 |
2、扩展方向:性能上的提升。关系型数据库靠的是提升本机性能。非关系型关系型数据库可以横向扩展,加入节点服务器的方式提高性能。
3、对事物的支持性,mysql支持事务。
关系型数据库:原子性、隔离性、一致性、持久性
非关系型数据库:也可以支持事务,redise也可以支持事务,但稳定性和处理能力都不如关系型数据库。
非关系型数据的主要场景: 1、操作的扩展
2、海量数据处理
纯动态网站的三高问题:
1、对数据库高并发读写的需求。
2、对海量数据高效存储与访问的需求。
3、对数据库的高扩展性与高可用的需求。
数据库缓存:
redis服务器程序是一个单进程模式,即只有一个主进程工作。也就是说在一台服务器上启多个redis(端口号不能冲突)
redis的实际处理速度是完全依靠主进程的执行效率。
服务器只部署了一个redis进程,多个客户端访问,可能会导致redis的处理能力下降
如果部署了多个redis进程,虽然能提高redis的并发处理能力, 但是会给服务器的cpu带来很大的压力。
一台服务器,一般部署3个redis进程。(更具情况来看,高并发要部署多个。)一般的情况,单进程足够)
1、具有极高的读写速度,数据读取每秒110000次,写入数据每秒81000次写入。
2、支持丰富的数据类型。
3、支持持久化。平常的数据保存在内存中,持久化可以写入磁盘中,既可以保存在本地,也可以实现备份。
4、原子性,所有的操作都是原子性
5、支持数据主从模式------master slave模式
1、redis纯内存结构,避免了磁盘I/O的耗时
2、核心模块是一个单进程,减少了线程切换和回收线程的时间。
3、redis采用的是I/O多路复用的机制,一条执行线路可以执行读也可以执行写,高并发。
***特殊说明:redis的读写,依旧是单进程处理。
yum install -y gcc gcc-c++ make
cd /opt/
将包拖到opt下
tar -xf redis-5.0.7.tar.gz
cd redis-5.0.7/
make -j 4
make PREFIX=/usr/local/redis install
cd utils/
./install_server.sh
---第四个回车后---
/usr/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/
vim /etc/redis/6379.conf
70行 加本机ip
redis的服务控制命令:
/etc/init.d/redis_6379 restart
/etc/init.d/redis_6379 status
/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start
查看端口是否启动成功
ss -antp | grep redis
redis-server:直接启动redis,只能启动
redis-benchmark: 检测redis在本机的运行效率
redis-cli:命令行工具
redis-check-aof: 检测AOF文件是否正常
redis-check-rdb: 检测rdb文件是否正常
redis-benchmark
-h | 指定服务器的主机名 ip地址 |
-p | 指定服务器的端口号 |
-c | 指定并发连接数 |
-n | 指定请求数 |
-a | 指定登陆密码 |
进入redis命令
1、redis-cil -h 192.168.10.80 -p6379
2、redis-cli 仅限制本地使用,远程访问需要指定ip和端口
string是redis最基本的类型,最大能存储512MB的数据,可以存储任何数据
格式:
创建 set 键名 键的值
删除 del 键名
查看键值对的值 get 键名
查看所有键值对 keys *
模糊查询:?(表示单个字符) *(多个字符)
查看键名生命周期:ttl 键名(秒)
APPEND 有则拼接,无则创建输入
APPEND 键名 键值
EXISTS
STRLEN 标记长度
STRLEN 键名
INCR 自增一 INCR 键名(只针对数字类型)
DECR 自减一 DECR 键名(只针对数字类型)
incrby 键值对 数值
EXPIRE 对已有键值对设置生命周期
EXPIRE 键值对名 周期时间
(integer) -1 表示永不过期
(integer) -2 表示已过期
新建时声明键值对的声明周期
setex 键名 生命周期时间 内容
mset 键名1 值 键名2 值
mset key1 hello key2 world
#批量设置键
keys *
#查看键
mget 键名1 键名2
mget key1 key2
#同时打印多个键的值
正序查看:RPUSH test1 a b c 1 2 3
倒叙查看:LPUSH test a b c 1 2 3
#创建列表 后面时内容,但是当中的元素还是string类型
192.168.10.80:6379> LPUSH test a b c 1 2 3
(integer) 6
192.168.10.80:6379> lrange test 0 -1
1) "3"
2) "2"
3) "1"
4) "c"
5) "b"
6) "a"
192.168.10.80:6379> LINDEX test 0
"3"
192.168.10.80:6379> LINDEX test 1
"2"
192.168.10.80:6379> RPUSH test1 a b c 1 2 3
(integer) 6
192.168.10.80:6379> lrange test1 0 -1
1) "a"
2) "b"
3) "c"
4) "1"
5) "2"
6) "3"
192.168.10.80:6379> LINDEX test 0
"3"
192.168.10.80:6379> LINDEX test1 0
"a"
192.168.10.80:6379> LPUSH test 1 2 3 4 5 6
(integer) 6
192.168.10.80:6379> LINDEX test -1
"1"
192.168.10.80:6379> LINDEX test 0
"6"
192.168.10.80:6379> LINDEX test 1
"5"
192.168.10.80:6379> LINDEX test 2
"4"
192.168.10.80:6379> LINDEX test 3
"3"
192.168.10.80:6379> LINDEX test 4
"2"
192.168.10.80:6379>
list操作命令
lpush quoqi a b c d 12 13
#创建列表 后面时内容,但是当中的元素还是
lrange 键名 0 -1
#查看列表中的数据(倒叙)
lindex 键名 0
#根据索引下标打印数据
lindex 键名 索引号
#根据索引下标打印数据
rpush 键名 1 2 3 4
#创建列表正序查看 从右到左 从右-1开始自增
lrange 键名 0 -1
#正序查看
lrange 键名 1 2
#指定范围查看
RPUSHX test 值
#在test其右侧加入一个值
LPUSH test 值
#在test其左侧加入一个值
lpop 键名
lpop guoqi1
#从左边开始删
lrange guoqi1 0 -1
#范围查看键值对内部的值
rpop 键名
rpop guoqi1
#从右边开始删
lrange guoqi1 0 -1
llen 键名
llen guoqi1
#查询列表内的元素
lindex 键名 索引下标
lindex guoqi1 3
#指定索引下标查询
lrange guoqi1 0 -1
linsert 键名 before 索引下标范围
linsert guoqi1 before 3 10
#在指定位置前插入数据
hash类型用于存储对象,采用hash格式来进行操作。占用磁盘少,而且占用一个hash可以占用4294967295个键值对
创建:HSET 键名 字段 值
查看:HGET 键名 字段
创建多个:HSET 键名1 字段1 值2 字段2 值 字段3 值3
查看多个:HMGET 键名 字段1 字段2
查看所有字段:HGETALL 键名
删除:HDEL 键名 字段1 字段2
192.168.10.80:6379> HSET test tall 150
(integer) 1
192.168.10.80:6379> HGET test tall
"150"
192.168.10.80:6379> HMSET test age yes sex nan
OK
192.168.10.80:6379> HMGET test tall age sex
1) "150"
2) "yes"
3) "nan"
192.168.10.80:6379> HGETALL test
1) "tall"
2) "150"
3) "age"
4) "yes"
5) "sex"
6) "nan"
192.168.10.80:6379> HDEL test age
(integer) 1
192.168.10.80:6379> HGETALL test
1) "tall"
2) "150"
3) "sex"
4) "nan"
192.168.10.80:6379>
无序集合元素类型也是string,元素是唯一的,不允许重复。多个集合类型可以进行并集。交集和差集运算.
set 元素类型是唯一的,可以跟踪一些唯一性的数据。只要把对应名称redis,set 可以
创建:SADD 集合名
查看:SMEMBERS 集合名
随机给出一个元素:SRANDMEMBER 集合名
随机移除一个元素:SPOP 集合名
指定移除:SREM 集合名
有序集合,元素类型也是string,元素唯一,不能重复,每个元素都会关联一个double (小数点)的分数(score,表示权重)可以通过权重的大小,进行排序。元素的权重可以相同。
zset:可以应用到在线积分的排行榜,可以实时更新用户的分数。
创建:
ZADD 集合名 权重1 元素1 权重2 元素2 权重3 元素3
ZADD test1 1 one 2 two 3 three
查看+权重:
ZRANGE 集合名 0 -1 WITHSCORES WITHSCORES安照权重来排序
ZRANGE test1 0 -1 withscores
查看不加权重:
ZRANGE 集合名 0 -1
ZRANGE test1 0 -1
获取成员数量:
ZCARD 集合名
ZCARD test1
获取成员数量权重范围
ZCOUNT 集合名 权重范围
ZCOUNT test1 2 3
删除集合元素
ZREM 集合名 元素
ZREM test1 three
查看元素权重
ZSCORE 集合名 元素
ZSCORE test1 two
操作过程
192.168.10.80:6379> ZADD test1 1 one 2 two 3 three
(integer) 3
192.168.10.80:6379> ZRANGE test1 0 -1
1) "one"
2) "two"
3) "three"
192.168.10.80:6379> ZRANGE test1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
192.168.10.80:6379> ZCARD test1
(integer) 3
192.168.10.80:6379> ZCOUNT test1 2 3
(integer) 2
192.168.10.80:6379> ZREM test1 three
(integer) 1
192.168.10.80:6379> ZRANGE test1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
192.168.10.80:6379> ZSCORE test1 two
"2"
192.168.10.80:6379>
redis的库都是创建好的,有16个库
数字排名:0-15
每个数据库之间互相独立,互不干扰
select [0-15]
#切换库
dbsize
#查看当前库中键的数量
keys *
查看键
move 键名 库的序号
MOVE test1 1
查看键的类型
type 键名
192.168.10.80:6379> KEYS *
1) "test"
2) "test1"
192.168.10.80:6379> KEYS *
1) "test"
192.168.10.80:6379> SELECT 1
OK
192.168.10.80:6379[1]> KEYS *
1) "test1"
192.168.10.80:6379[1]>
设置密码
config set requirepass 密码
config set requirepass 123456
在内声明密码
auth 密码
auth 123456
在外生声明密码
redis-cli -h ip -p 6379 -a 密码
redis-cli -h 192.168.10.80 -p 6379 -a 123456
FLUSHDB
#清除当前库
FLUSHALL
#清空所有库
redis读写速度快
数据类型:
1、string
2、list
3、hash 对一个键进行多字段操作用于hash 节省内存空间
4、set 元素不能重复,可以定义唯一值
5、zset 元素不能重复,单权重可以重复
rdis为什么这么快?
1、redis纯内存结构,避免了磁盘I/O的耗时
2、核心模块是一个单进程,减少了线程切换和回收线程的时间。
3、redis采用的是I/O多路复用的机制,一条执行线路可以执行读也可以执行写,高并发。
***特殊说明:redis的读写,依旧是单进程处理。