一、NoSQL Redis 概述
- NoSQL 概述
RDBMS (Relational Database Management System) 关系数据库管理系统
依照事后设置的组织构造,将数据存储在物理介质上
数据之间能够做关联操作 - RDBMS 软件
支流的 RDBMS 软件
MySQL
MariaDB
Oracle
DB2
SQL Server - NoSQL (NoSQL = Not Only SQL)意思是“不仅仅是 SQL”
泛指非关系型数据库
不须要事后定义数据存储构造
每条记录能够有不同的数据类型和字段个数 - NoSQL 软件
支流软件
Memcached
Redis
MongoDB
CouchDB-Neo4j
FlockDB - Redis 介绍
Remote Dictionary Server (近程字典服务器)
是一款高性能的(Key/Values)分布式内存数据库
反对数据长久化 (定期把内存里数据存储到硬盘)
反对多种数据类型 string.list、hash …..
反对 master-salve 模式数据备份
中文网站 www.redis.cn - 初始配置
配置服务运行参数
]# ./utils/install_server.sh // 初始化
默认端口 6379
主配置文件 /etc/redis/6379.conf
日志文件 /var/log/redis_6379.log
数据库目录 /var/lib/redis/6379
服务启动程序 /usr/local/bin/redis-server
命令行连贯命令 /usr/local/bin/redis-cli - 治理服务
]# /etc/init.d/redis_6379 stop // 进行服务
]# /etc/init.d/redis_6379 start // 启动服务
]# ps -C redis-server // 查看过程
]# netstat -utnlp | grep :6379 // 查看端口 - 连贯服务
拜访 redis 服务
redis-cli 默认连贯本机的 redis 服务
Redis Desktop Manager(RDM)罕用可视化管理工具
二、Redis 装置部署
案例 1: 搭建 Redis 服务器
具体要求如下∶
- 在主机 192.168.4.155 上装置并启动 redis 服务
- 设置变量 school,值为 tarena
- 查看变量 school 值
软件装置
1)装置源码 redis 软件
[root@redis ~]# yum -y install gcc
[root@redis ~]# tar -xf redis-5.0.10.tar.gz // 先从官网下载 redis 安装包
[root@redis ~]# cd redis-5.0.10/
[root@redis redis-5.0.10]# ls
00-RELEASENOTES COPYING Makefile redis.conf runtest-moduleapi src
BUGS deps MANIFESTO runtest runtest-sentinel tests
CONTRIBUTING INSTALL README.md runtest-cluster sentinel.conf utils
[root@redis redis-5.0.10]# make
[root@redis redis-5.0.10]# make install
[root@redis redis-5.0.10]# cd utils/
[root@redis 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/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 // 命令行的连贯工具
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! // 提醒装置胜利
2)查看服务状态 监听的端口
[root@redis utils]# /etc/init.d/redis_6379 status
Redis is running (5541)
[root@redis utils]# ss -anput|grep :6379 // 查看端口 默认 6379
tcp LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=5541,fd=6))
[root@redis utils]# ps -aux|grep redis // 查看过程
root 5541 0.1 0.5 153888 7652 ? Ssl 15:52 0:03 /usr/local/bin/redis-server 127.0.0.1:6379
3)进行服务
[root@redis utils]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
4)连贯 redis
[root@redis utils]# /etc/init.d/redis_6379 start
/var/run/redis_6379.pid exists, process is already running or crashed
[root@redis utils]# redis-cli
127.0.0.1:6379> ping // 提醒 PONG 示意连贯胜利
PONG
127.0.0.1:6379>
5)存储变量 school,值为 tarena,查看变量 school 的值
127.0.0.1:6379> set school tarena
OK
127.0.0.1:6379> get school
"tarena"
三、常用命令
- set key 名 key 值 // 存储 1 个 key 值
- mset key 名列表 // 存储多个 key 值
- get key 名 // 获取 key 值
- mget // 获取多个 key 值
- select 数据库编号 0 -15 // 切换库
- keys * // 显示所有 key 名
- keys a? // 显示指定 key 名
- exists key 名 // 测试 key 名是否存在
- ttl key 名 // 查看 key 生存工夫
- type key 名 // 查看 key 类型
Redis 默认有 16 个库;默认应用的是 0 号库;
- move key 名库编号 // 挪动 key 到指定库
- expire key 名数字 // 设置 key 无效工夫
- del key 名 // 删除指定的 key
- flushall // 删除内存里所有 key
- flushdb // 删除所在库的所有 key
- save // 保留所有 key 到硬盘
- shutdown // 进行服务
案例 2∶常用命令练习
练习如下命令的应用:
set mset get mget keys type
exists ttl expire move、select
del flushdb flushall save shutdown
1)命令 set、mset、get、mget
127.0.0.1:6379> set name bob
OK
127.0.0.1:6379> mset age 19 sex boy
OK
127.0.0.1:6379> get name
"bob"
127.0.0.1:6379> get sex
"boy"
127.0.0.1:6379> mget age sex
1) "19"
2) "boy"
2)命令 keys、type、exists、del
127.0.0.1:6379> keys *
1) "age"
2) "name"
3) "sex"
4) "school"
127.0.0.1:6379> keys ???
1) "age"
2) "sex"
127.0.0.1:6379> keys a*
1) "age"
127.0.0.1:6379> type age // 应用 set 命令存储的变量都是字符类型
string
127.0.0.1:6379> del age
(integer) 1
127.0.0.1:6379> exists age // 变量不存储返回值 0
(integer) 0
127.0.0.1:6379> exists sex // 变量存在 返回值 1
(integer) 1
127.0.0.1:6379>
3)命令 ttl、expire、move、flushdb、flushall、save、shutdown、select
127.0.0.1:6379> ttl sex // 返回值 -1 示意变量永不过期
(integer) -1
127.0.0.1:6379> expire sex 20 // 设置变量过期工夫为 20 秒
(integer) 1
127.0.0.1:6379> ttl sex // 还剩 7 秒过期
(integer) 7
127.0.0.1:6379> ttl sex // 返回值 -2 示意曾经过期
(integer) -2
127.0.0.1:6379> exists sex // 变量曾经不存在
(integer) 0
127.0.0.1:6379> move name 1 // 把变量 name 挪动到 1 号库里
(integer) 1
127.0.0.1:6379> select 1 // 切换到 1 号库
OK
127.0.0.1:6379[1]> keys * // 查看
1) "name"
127.0.0.1:6379[1]> select 0 // 切换到 0 号库
OK
127.0.0.1:6379> keys * // 查看
1) "school"
127.0.0.1:6379> select 1 // 切换到 1 号库
OK
127.0.0.1:6379[1]> keys *
1) "name"
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> flushall
OK
127.0.0.1:6379[1]> save
OK
127.0.0.1:6379[1]> shutdown // 提醒连贯断开
not connected> exit
[root@redis utils]#
[root@redis utils]# ps aux|grep redis // 没有过程信息
[root@redis utils]# /etc/init.d/redis_6379 start // 启动服务
Starting Redis server...
[root@redis utils]# ps aux|grep redis
root 5625 0.0 0.5 153888 7688 ? Ssl 17:06 0:00 /usr/local/bin/redis-server 127.0.0.1:6379
四、罕用配置及内存治理
- 6379.conf 配置文件解析 模块分类
NETWORK 网络
GENERAL 惯例
SNAPSHOTTING 快照
REPLICATION 复制
SECURITY 平安
CLIENTS 客户端
MEMORY MANAGEMENT 内存治理 - 罕用配置
port 6379 // 端口
bind 127.0.0.1 //IP 地址
daemonize yes // 守护过程形式运行
databases 16 // 数据库个数
logfile /var/log/redis_6379.log // 日志文件
maxclients 10000 // 并发连贯数量
dir /var/lib/redis/6379 // 数据库目录
内存治理
- 内存革除策略
volatile-Iru // 最近起码应用(针对设置了 TTL 的 key )
allkeys-lru // 删除起码应用的 key(针对所有的 key)
alkeys-lfu // 从所有 key 中革除应用频率起码的 key
volatile-lfu // 从所有配置了过期工夫的 key 中革除应用频率起码的 key
volatile-random // 在设置了 TTL 的 key 里随机移除
allkeys-random // 随机移除 key
volatile-ttl (minor TTL) // 移除最近过期的 key
noeviction // 不删除,写满时报错 - 优化设置
maxmemory // 最大内存
maxmemory-policy // 定义应用策略
maxmemory-samples // 选取 key 模板的个数(针对 lru 和 ttl 策略)
连贯明码
设置明码、ip 地址、端口
]# vim /etc/redis/6379.conf
requirepass 123456bind 192.168.4.50port 6350
:wq
]# redis-cli -h192.168.4.50 -p6350// 连贯服务 192.168.4.50:6350> ping
(error) NOAUTH Authentication required.192.168.4.50:6350> auth 123456// 输出明码 OK
192.168.4.50:6350> pingPONG
]# redis-cli -h 192.168.4.50 -p 6350 -a 123456// 连贯时加明码
]# redis-cli -h 192.168.4.64 -p 6364 -a 123456 shutdown// 进行服务
案例 3∶批改 Redis 服务运行参数
对 Redis 服务器 192.168.4.155 做如下配置:
-. 端口号 6350
-.IP 地址 192.168.4.155- 连贯明码 123456- 测试配置
1)批改配置文件
[root@redis utils]# cp /etc/redis/6379.conf /root/6379.conf // 能够先备份一份,避免批改谬误没法还原
[root@redis utils]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@redis utils]# vim /etc/redis/6379.conf
bind 192.168.4.155 // 设置服务应用的 ip
port 6360 // 更改端口号
requirepass 123456 // 设置明码
2)批改启动脚本
[root@redis utils]# vim +43 /etc/init.d/redis_6379
43 $CLIEXEC -h 192.168.4.50 -p 6360 -a 123456 shutdown
3)启动服务
[root@redis utils]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@redis utils]# ps aux|grep redis
root 5712 0.0 0.5 153888 7688 ? Ssl 17:13 0:00 /usr/local/bin/redis-server 192.168.4.155:6360
root 5717 0.0 0.0 112720 984 pts/1 S+ 17:13 0:00 grep --color=auto redis
4)测试配置 拜访服务存取数据
[root@redis utils]# redis-cli -h 192.168.4.155 -p 6360 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.4.155:6360> ping
PONG
五、长久化 RDB、AOF
RDB 介绍
Redis 数据库文件,全称 Redis DataBase
- 数据长久化形式之一
- 数据长久化默认形式
- 依照指定工夫距离,将内存中的数据集快照写入硬盘
- 快照术语叫 Snapshot
- 复原时,将快照文件间接读入内存
定义 RDB 文件名
vim /etc/redis/6379.conf
dbfilename “dump.rdb”// 文件名
应用 RDB 文件复原数据
·备份数据
- 备份 dump.rdb 文件到其余地位
]# cp 数据库目录 /dump.rdb 备份目录
·复原数据
- 拷贝备份文件到数据库目录,重启 redis 服务
]#cp 备份目录 /dump.rdb 数据库目录 /
优化设置
数据从内存保留到硬盘的频率
- save 900 1 //15 分钟且有 1 个 key 扭转
- save 300 10 // 5 分钟且有 10 个 key 扭转
- save 60 10000 // 1 分钟且有 10000 个 key 扭转
·手动存盘
- save // 阻塞写存盘
save 命令是同步形式生成快照,会造成 Redis 阻塞,所有后续达到的命令要期待 save 实现当前能力执行。 - bgsave // 不阻塞写存盘
bgsave 命令采纳异步形式生成快照,Redis 会 fork 出一个子过程进行 RDB 文件的生成。
Redis 只有在 fork 子过程时被阻塞,子过程实现快照生成的同时,Redis 能够失常工作。
RDB 长处与毛病
·RDB 长处
- 高性能的长久化实现 创立一个子过程来执行长久化,先将数据写入临时文件,长久化过程完结后,再用这个临时文件替换上次长久化好的文件; 过程中主过程不做任何 IO 操作
- 比拟适宜大规模数据恢复,且对数据完整性要求不是十分高的场合
RDB 的毛病
- 意外宕机时,失落最初一次长久化的所有数据
案例 4∶应用 RDB 文件复原数据
要求如下︰
- 启用 RDB
- 设置存盘距离为 120 秒且 10 个 key 扭转数据主动存盘
- 备份 RDB 文件
- 删除数据
- 应用 RDB 文件复原数据
[root@redis ~]# vim /etc/redis/6379.conf
save 900 1
#save 300 10 // 正文原有设置
save 120 10 // 工夫批改为 120 秒
save 60 10000
[root@redis ~]# /etc/init.d/redis_6379 stop // 进行服务
[root@redis ~]# rm -fr /var/lib/redis/6379/* // 清空数据库目录
[root@redis ~]# ll /var/lib/redis/6379/ // 此时,查看数据库目录下没有
dump.rdb 文件
总用量 0
[root@redis ~]# /etc/init.d/redis_6379 start // 启动服务
[root@redis ~]# redis-cli -h 192.168.4.155 -p 6360 -a 123456 // 连贯服
务,在 200 秒内存储 10 个变量,就会主动在数据库目录下创立 dump.rdb 文件
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.4.155:6360> ping
PONG
192.168.4.155:6360> set v1 k1
OK
192.168.4.155:6360> set v2 k2
OK
192.168.4.155:6360> set v3 k3
OK
192.168.4.155:6360> set v4 k4
OK
192.168.4.155:6360> set v5 k5
OK
192.168.4.155:6360> set v6 k6
OK
192.168.4.155:6360> set v7 k7
OK
192.168.4.155:6360> set v8 k8
OK
192.168.4.155:6360> set v9 k9
OK
192.168.4.155:6360> set v10 k10
OK
192.168.4.155:6360> set v11 k11
OK
192.168.4.155:6360> keys *
1) "v5"
2) "v1"
3) "v10"
4) "v3"
5) "v7"
6) "v8"
7) "v2"
8) "v11"
9) "v9"
10) "v4"
11) "v6"
192.168.4.155:6360> exit
[root@redis ~]# ls /var/lib/redis/6379/ // 此时,查看数据库目录下有
dump.rdb 文件
dump.rdb
[root@redis ~]# cp /var/lib/redis/6379/dump.rdb /tmp/ // 备份 dump.rdb
[root@redis ~]# redis-cli -h 192.168.4.155 -p 6360 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.4.155:6360> flushall
OK
192.168.4.155:6360> keys *
(empty list or set)
192.168.4.155:6360> exit
[root@redis ~]# /etc/init.d/redis_6379 stop
Stopping ...
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
Redis stopped
[root@redis ~]# rm -fr /var/lib/redis/6379/* // 确保数据库被精空
[root@redis ~]# cp /tmp/dump.rdb /var/lib/redis/6379/ // 拷贝备份文件到数据库目录下
[root@redis ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@redis ~]# redis-cli -h 192.168.4.155 -p 6360 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.4.155:6360> keys * // 查看数据
1) "v6"
2) "v2"
3) "v10"
4) "v4"
5) "v11"
6) "v9"
7) "v8"
8) "v3"
9) "v5"
10) "v1"
11) "v7"
192.168.4.155:6360>
AOF 介绍
Append Only File
追加形式记录写操作的文件
记录 redis 服务所有写操作
一直的将新的写操作,追加到文件的开端
默认没有启用
应用 cat 命令能够查看文件内容
启用 AOF
> config set appendonly yes // 启用
> config rewrite // 写进配置文件
应用 AOF 文件复原数据
备份数据
备份 appendonly.aof 文件到其余地位
]# cp 数据库目录 /applendonly.aof 备份目录
复原数据
拷贝备份文件到数据库目录
重启 redis 服务
]# cp 备份目录 /appendonly.aof 数据库目录
]#/etc/redis/redis_端口 start
通过配置启动 AOF
定义文件名
appendonly yes // 启用 aof 默认 no
appendfilename “appendonly.aof” // 指定文件名
AOF 文件记录写操作的形式
appendfsync always // 时时记录,并实现磁盘同步
appendfsync everysec // 每秒记录一次,并实现磁盘同步
appendfsync no // 写入 aof,不执行磁盘同步
日志文件会一直增大,何时触发日志重写?
auto-aof-rewrite-min-size 64mb // 首次重写触发值
auto-aof-rewrite-percentage 100 // 再次重写,增长百分比
修复 AOF 文件
一把文件复原到最初一次的正确操作
[root@redis ~]# redis-check-aof --fix appendonly.aofox83: Expected rln, got: 6166
AOF analyzed: size=160, ok_up_to=123, diff=37
This will shrink the AOF from i60 bytes, with 37 bytes, to 123bytes
Continue? [y/N]: y
Successfully truncated AOF
AOF 长处与毛病
AOF 长处
能够灵便设置长久化形式
出现意外宕机时,仅可能失落 1 秒的数据
AOF 毛病
长久化文件的体积通常会大于 RDB 形式
执行 fsync 策略时的速度可能会比 RDB 形式慢
案例 5︰应用 AOF 文件复原数据
要求如下:
- 启用 AOF
- 备份 AOF 文件
- 删除数据
- 应用 AOF 文件复原数据
1)批改配置文件
[root@redis ~]# redis-cli -h 192.168.4.155 -p 6360 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.4.155:6360> config set appendonly yes // 启用 aof,默认 no
OK
192.168.4.155:6360> config rewrite // 写进配置文件
OK
192.168.4.155:6360> save
OK
192.168.4.155:6360> exit
2)备份 AOF 文件
[root@redis ~]# cd /var/lib/redis/6379/
[root@redis 6379]# ls
appendonly.aof dump.rdb
[root@redis 6379]# cp appendonly.aof /tmp/
[root@redis 6379]# redis-cli -h 192.168.4.155 -p 6360 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.4.155:6360> flushall
OK
192.168.4.155:6360> keys *
(empty list or set)
192.168.4.155:6360> exit
3)删除数据
[root@redis 6379]# /etc/init.d/redis_6379 stop
Stopping ...
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
Redis stopped
[root@redis 6379]# rm -fr /var/lib/redis/6379/* // 确定数据库被清空
4) 应用 AOF 文件复原数据
[root@redis 6379]# cp /tmp/appendonly.aof /var/lib/redis/6379/ // 拷贝备份文件到目录
[root@redis 6379]# ls
appendonly.aof
[root@redis 6379]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@redis 6379]# redis-cli -h 192.168.4.155 -p 6360 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.4.155:6360> keys * // 查看数据
1) "v9"
2) "v3"
3) "v4"
4) "v5"
5) "v2"
6) "v7"
7) "v1"
8) "v6"
9) "v8"
10) "v11"
11) "v10"
192.168.4.155:6360>