MySQL关系数据库管理系统 按照预先设置的组织结构,将数据存储在物理介质上
- 主流的RDBMS软件
- MySQL
- MariaDB
- Oracle
- DB2
- SQL Server-----微软Windows
- PostgreSQL----红帽
nosql 非关系型数据库 不需要预先设置的组织结构,
主流软件
- Redis
- Memcached
- MongoDB
- CouchDB
- Neo4j
- FlockDB
哈希表 键值对 查询快 (恒定)
程序执行两种方式
1.解释执行:源码可以直接执行,需要解释器
2.编译执行:源码不能直接执行,需要编译成二进制可执行文件(go, gcc 编译器)
## 部署Redis服务
1、安装GCC
[root@nginx ~]# yum install -y gcc
2、解压Redis,编译安装
将源码包传到虚拟机家目录下
[root@nginx ~]# tar -xf redis-4.0.8.tar.gz
[root@nginx ~]# cd redis-4.0.8
[root@nginx redis-4.0.8]# ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests
BUGS deps MANIFESTO runtest sentinel.conf utils
CONTRIBUTING INSTALL README.md runtest-cluster src
[root@nginx redis-4.0.8]# vim +27 src/Makefile
```
PREFIX?=/usr/local/redis
```
[root@nginx redis-4.0.8]# make & make install
将Redis命令目录添加到path环境变量
[root@nginx redis-4.0.8]# vim /etc/bashr
cexport PATH=$PATH:/usr/local/redis/bin # 最后一行添加
[root@nginx redis-4.0.8]# source /etc/bashrc # 让文件生效
3、初始化服务
默认端口号 6379
配置文件默认 /etc/redis_6379
错误日志默认
数据目录默认
运行Redis服务时服务启动默认
[root@nginx redis-4.0.8]# ./utils/install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [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/redis/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/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
4、查看服务状态
**<u>七版本之前服务控制命令 server**</u>
[root@nginx redis-4.0.8]# /etc/init.d/redis_6379 status
Redis is running (5134)
[root@nginx redis-4.0.8]# **<u>service</u>** redis_6379 status
Redis is running (5134)
[root@nginx redis-4.0.8]# ss -tlnp | grep :6379
LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=5134,fd=6))
**cli: command line interface 命令行接口**
**tui: text user interface 文本用户接口**
**gui: graphical user interface 图形用户接口**
测试连接服务
[root@nginx redis-4.0.8]# redis-cli
127.0.0.1:6379> PING
PONG #连接成功
**Redis数据类型**
##### 1 、字符串 - 最基本数据类型 存储任何形式的字符串,包括二进制数据
赋值 SET key vlaue
nil #表示空
INCR # 增加后的值 一次加1 INCRBY 增加多个值
`127.0.0.1:6379> INCR num`
`(integer) 1`
`127.0.0.1:6379> get num`
`"1"`
`127.0.0.1:6379> INCR num`
`(integer) 2`
`127.0.0.1:6379> INCR num`
`(integer) 3`
127.0.0.1:6379> INCRBY num 3
(integer) 6
DECR # 减少后的值 DECRBY 减少多个值
127.0.0.1:6379> DECR num
(integer) 5
127.0.0.1:6379> DECRBY num 3
(integer) 2
向尾部追加值 APPEND
127.0.0.1:6379> set hi HELLO
OK
127.0.0.1:6379> APPEND hi 'World'
(integer) 10
127.0.0.1:6379> get hi
"HELLOWorld"
<u>字节长度 STRLEN</u>
127.0.0.1:6379> STRLEN hi
(integer) 16
同时设置多个值 MSET
127.0.0.1:6379> MSET username tom password tedu.cn
OK
127.0.0.1:6379> MGET username password
1) "tom"
2) "tedu.cn"
判断值是否存在 EXISTS
127.0.0.1:6379> EXISTSnum
(integer) 1
127.0.0.1:6379> EXISTS number
(integer) 0
存在不赋值。不存在赋值****SETNX
127.0.0.1:6379> SETNX number 100
(integer) 1
127.0.0.1:6379> GET number
"100"
127.0.0.1:6379> SETNX number 200
(integer) 0
127.0.0.1:6379> GET number
"100"
查看所有key
127.0.0.1:6379> KEYS *
1) "num"
2) "password"
3) "hi"
4) "number"
5) "username"
删除key
127.0.0.1:6379> DEL number
(integer) 1
查看key类型 type
127.0.0.1:6379> TYPE username
string
2、 散列类型
设置单个字段
127.0.0.1:6379> HSET user1 name tom
(integer) 1
127.0.0.1:6379> HSET user1 gender male
(integer) 1
127.0.0.1:6379> HGET user1 name
"tom"
127.0.0.1:6379> Hget user1 gender
"male"
设置多个值
127.0.0.1:6379> HMSET user1 email bob@tedu.cn phone 12212132345
OK
127.0.0.1:6379> HGETALL user1
1) "name"
2) "tom"
3) "gender"
4) "male"
5) "email"
6) "bob@tedu.cn"
7) "phone"
8) "12212132345"
判断字段是否存在
127.0.0.1:6379> HEXISTS user1 address
(integer) 0
127.0.0.1:6379> HEXISTS user1 name
(integer) 1
字段不存在赋值 第一次赋值生效
127.0.0.1:6379> HSETNX user1 address beijing
(integer) 1
127.0.0.1:6379> hsetnx user1 address shanghai
(integer) 0
127.0.0.1:6379> hget user1 address
"beijing"
数字递增HINCRBY
127.0.0.1:6379> HINCRBY user1 age 20
(integer) 20
127.0.0.1:6379> hincrby user1 age 1
(integer) 21
127.0.0.1:6379> hincrby user1 age 2
(integer) 23
删除字段hdel
127.0.0.1:6379> hdel user1 age
(integer) 1
只获取字段名hkeys
127.0.0.1:6379> hkeys user1
1) "name"
2) "gender"
3) "email"
4) "phone"
5) "address"
获取值hvals
127.0.0.1:6379> hvals user1
1) "tom"
2) "male"
3) "bob@tedu.cn"
4) "12212132345"
5) "beijing"
获取字段数量 hlen
127.0.0.1:6379> hlen user1
(integer) 5
https://www.runoob.com/redis/redis-hashes.html #Redis哈希
3、列表类型
使用双向链表
LPUSH向列表左边增加元素
127.0.0.1:6379> lpush numbers 1
(integer) 1
127.0.0.1:6379> LPUSH numbers 234
(integer) 2
取出所有元素
127.0.0.1:6379> LRANGE numbers 0 -1
1) "234"
2) "1"
向右边增加元素
127.0.0.1:6379> RPUSH numbers 0 -1 -2
(integer) 4
127.0.0.1:6379> LRANGE numbers 0 -1
1) "1"
2) "0"
3) "-1"
4) "-2"
列表两端弹出元素
127.0.0.1:6379> LPOP numbers
"234"
127.0.0.1:6379> RPOP numbers
"-2"
删除列表指定值
127.0.0.1:6379> LPUSH numbers 0 1 2 0 1 2
(integer) 9
127.0.0.1:6379> RPUSH numbers 2 1 0 2 1 0
(integer) 15
127.0.0.1:6379> LRANGE numbers 0 -1
1) "2"
2) "1"
3) "0"
4) "2"
5) "1"
6) "0"
7) "1"
8) "0"
9) "-1"
10) "2"
11) "1"
12) "0"
13) "2"
14) "1"
15) "0"
127.0.0.1:6379> LREM numbers 2 1 #从左侧删
(integer) 2
127.0.0.1:6379> LRANGE numbers 0 -1
1) "2"
2) "0"
3) "2"
4) "0"
5) "1"
6) "0"
7) "2"
8) "1"
9) "0"
10) "2"
11) "1"
12) "0"
127.0.0.1:6379> LREM numbers -2 0 #从右侧删
(integer) 2
127.0.0.1:6379> LRANGE numbers 0 -1
1) "2"
2) "0"
3) "2"
4) "0"
5) "1"
6) "0"
7) "2"
8) "1"
9) "2"
10) "1"
127.0.0.1:6379> LREM numbers 0 0 #删除所有0
(integer) 3
127.0.0.1:6379> LRANGE numbers 0 -1
1) "2"
2) "2"
3) "1"
4) "2"
5) "1"
6) "2"
7) "1"
获取下标为0的值
127.0.0.1:6379> LINDEX numbers 0
"2"
<u># 获取下标为1 的值为10</u>
127.0.0.1:6379> LSET numbers 1 10
OK
127.0.0.1:6379> LRANGE numbers 0 -1
1) "2"
2) "10"
3) "1"
4) "2"
5) "1"
6) "2"
7) "1"
4、集合类型
无序,每个元素都不相同
增加/删除元素
127.0.0.1:6379> SADD letters a b c
(integer) 3
127.0.0.1:6379> SADD lettets b c d
(integer) 3
127.0.0.1:6379> SMEMBERS letters
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> SREM letters a c
(integer) 2
127.0.0.1:6379> SMEMBERS letters
1) "b"
交集、并集、差补
127.0.0.1:6379> SADD s1 a b c
(integer) 3
127.0.0.1:6379> SADD s2 b c d
(integer) 3
127.0.0.1:6379> SINTER s1 s2
1) "c"
2) "b"
127.0.0.1:6379> SUNION s1 s2
1) "c"
2) "d"
3) "b"
4) "a"
127.0.0.1:6379>
127.0.0.1:6379> sdiff s1 s2
1) "a"
127.0.0.1:6379>
127.0.0.1:6379> sdiff s2 s1
1) "d"
获取集合中元素个数
127.0.0.1:6379> SCARD letters
(integer) 1
127.0.0.1:6379> SCARD s1
(integer) 3
随机取值
127.0.0.1:6379> SRANDMEMBER s1 3
1) "c"
2) "b"
3) "a"
随机弹出
```
127.0.0.1:6379> SPOP s1
"a"
```
5、有序集合类型
集合元素不能重复
ZADD 增加元素个数
127.0.0.1:6379> zadd scores 88 tom 90 jerry 75 bob 92 alice
(integer) 4
127.0.0.1:6379> ZRANGE scores 0 -1
1) "bob"
2) "tom"
3) "jerry"
4) "alice"
127.0.0.1:6379> ZRANGE scores 0 -1 withscores
1) "bob"
2) "75"
3) "tom"<u></u>
4) "88"
5) "jerry"
6) "90"
7) "alice"
8) "92"
修改某个元素值
127.0.0.1:6379> zadd scores 85 jerry
(integer) 0
获取元素分数
获取指定范围的值
127.0.0.1:6379> zrangebyscore scores 80 90 withscores
1) "jerry"
2) "85"
3) "tom"
4) "88"
获取元素数量
```
127.0.0.1:6379> ZCARD scores
(integer) 4
```
获取指定范围元素个数
127.0.0.1:6379> zcount scores 80 90
(integer) 2
增加某个元素分数
127.0.0.1:6379> zincrby scores 3 bob
"78"
获取元素排名 默认升序
127.0.0.1:6379> zrank scores tom
(integer) 2 #升序
127.0.0.1:6379> zrevrank scorces alice
(nil) # 降序
6、其他操作
查看key过期时间
127.0.0.1:6379> ttl name
(integer) -2 #-1表示永不过期
127.0.0.1:6379> set user1:login 122234 ex 60
OK
设置超时时间
127.0.0.1:6379> expire password 20
(integer) 1
127.0.0.1:6379> ttl password
(integer) 12
127.0.0.1:6379> ttl password
(integer) -2 #-2表示已过期
查看key是否存在
127.0.0.1:6379> exists password
(integer) 0
数据库操作命令
16个库,默认在第1个
127.0.0.1:6379> move name 1
(integer) 0
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
- 清除库
```
# 清除当前库
127.0.0.1:6379[1]> FLUSHDB
OK
```
127.0.0.1:6379[1]> select 0 #切换0号库
OK
127.0.0.1:6379> keys *
1) "s2"
2) "s1"
3) "hi"
4) "letters"
5) "username"
6) "user1"
7) "scores"
8) "num"
9) "post:10"
10) "numbers"
11) "lettets"
关闭Redis
127.0.0.1:6379> shutdown
not connected> exit