目录
一、Redis介绍
1.关系数据库与非关系型数据库
2.Redis基础
3.Redis命令工具
4.Redis数据库常用命令
二、Redis持久化
1.RDB和AOF的区别
2.RDB和AOF的优缺点
3.Redis持久化配置
4.AOF重写
三、性能管理
1.内存碎片率
2.内存使用率
一、Redis介绍
1.关系数据库与非关系型数据库
a.关系型数据库
关系型数据库是一个结构化的数据库,创建在关系模型基础上,一般面向与记录
它借助集合代数等数学概念和方法来处理数据库中的数据
关系模型是指二位表格模式,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织
SQL语句是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作
主流的关系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等
b.非关系型数据库
NoSQL是非关系型数据库的总称
主流的NoSQL数据库有Redis、MongBD、Hbase、CouhDB等
NoSQL数据库凭借着非关系型、分布式、开源及横向扩展等优势,被认为是下一代数据库产品
c.非关系型数据库产生背景
High performance-对数据库高并发读写需求
Huge Storage-对海量数据高效存储与访问需求
High Scalability && High Availablity-对数据库高可扩展性和高可用性
2.Redis基础
a.Redis简介
Redis(远程字典型)是一个开源的、使用C语言编写的NoSQL数据库
Redis基于内存运行并支持持久化,采用key-value(键对值)的存储方式
Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程,而redis的实际处理速度则是完全依靠与主进程的执行效率
Redis的优点:
具有极高的数据读写速度
支持丰富的数据类型
支持数据的持久化
原子性
支持数据备份
Redis常见场景:除了缓存,还包括获取N个数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录
b.Redis安装部署
#编译安装
dnf install -y tar gcc make
tar zxf redis-4.0.9.tar.gz
cd redis-4.0.9
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/local/bin/cd utils/
./install_server.sh #一直按enter,保持默认#启动服务
/etc/init.d/redis_6379 start
c.配置参数
参数 | 作用 |
timeout 300 | 当客户端闲置多长时间后关闭连接,如果指定为0, 表示关闭该功能 |
dbfilename dump.rdb | 指定本地数据库文件名,默认值为dump.rdb |
dir /var/lib/redis/6379 | 指定本地数据库存放目录 |
maxclients 10000 | 设置同一时间最大客户端连接数,默认为10000。 Redis 可以同时打开的客户端连接数为Redis进程可 以打开的最大文件描述符数,如果设置 maxclients 0,表示不限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息 |
rdbcompression yes | 指定存储至本地数据库时是否压缩数据,默认为yes,Redis 采用LZF压缩,如果为了节省CPU资源,可以关闭该选项,但会导致数据库文件变的巨大 |
slaveof | 当本机为从服务器时,设置主服务的IP地址及端口。在Redis启动时,从服务器会自动从主服务进行数据 同步 |
masterauth | 当主服务设置了密码保护时,从服务连接主服务的密 码 |
requirepass foobared | 设置Redis连接密码,如果配置了连接密码,客户端 在连接Redis时需要通过AUTH命令提 供密码,默认关闭 |
maxmemory | 指定Redis最大内存限制。Redis在启动时会把数据 加载到内存中,达到最大内存后,Redis会先尝试清 除已到期或即将到期的Key,当此方处理后,仍然 到达最大内存设置,将无法再进行写入操作,但仍然 可以进行读取操作。Redis新VM机制,会把Key存 放内存,Value会存放在Swap分区 |
appendonly no | 指定是否在每次更新操作后进行日志记录,Redis在 默认情况下是异步地把数据写入磁盘,如果不开启, 可能会在断电时导致一段时间内的数据丢失。因为 Redis 本身同步数据文件是按上面save条件来同步 的,所以有的数据会在一段时间内只存在于内存中。默认为no |
appendfilename appendonly.aof | 指定更新日志文件名,默认为appendonly.aof |
appendfsync everysec | 指定更新日志条件,共有3个可选值: no:表示等操作系统进行数据缓存同步到磁盘(快) always:表示每次更新操作后手动调用fsync()将数据 写到磁盘(慢,安全) everysec:表示每秒同步一次(折衷,默认值) |
activerehashing yes | 指定是否激活重置哈希,默认为开启 |
include /path/to/local.conf | 指定包含其它的配置文件,可以在同一主机上多个 Redis实例之间使用同一份配置文件,而同时各个实 例又拥有自己的特定配置文件 |
3.Redis命令工具
a.redis-cli命令行工具:redis-cli
b.修复AOF持久化文件:redis-check-aof
c.用于启动Redis工具:redis-server
d.修复RDB持久化文件:redis-check-rdb
e.测试工具:redis-benchmark
redis-benchmark -h 127.0.0.1 -p 6379 -n 100000#-h :指定 Redis 服务器主机地址
#-p:指定 Redis 服务器端口
# -n:总请求数
# -s:指定服务器socket
# -c:指定请求数
# -d:以字节形式指定SET/GET值的数据大小
# -P:通过管道传输<numreq>请求
#-q:强制退出redis
# --csv:以CSV格式输出
# -l:生成循环,永久执行测试
# -t:缙云县以逗号封的测试命令列表
# -I:Idle模式
4.Redis数据库常用命令
a.常用命令
keys *:查询所有数据
set :添加/修改 数据
get :获取数据
b.key相关命令
keys:取符合规则的键值列表
exists:可以判断键值是否存在
del:可以删除当前数据库的指定key
type:可以获取key对应的value值类型
rename:对已有key进行重命名
renamenx:对已有key进行重命名,并检测新名是否存在
dbsize:查看当前数据库中key的数目
c.多数据库常用命令
多数据库之间切换:select
多数据库移动数据:move
查看当前数据库目标键:key
查看目标数据库的序号:dbindex
清除当前数据库内数据:flushdb
清除所有数据库的数据:flushall
二、Redis持久化
1.RDB和AOF的区别
a.RDB持久化是指在指定时间间隔内将内存中的数据及快照写入磁盘。实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储
b.AOF持久化以日志形式记录服务器所出来的每一个写、删除操作、查询操作不会记录,以文本方式记录,可以打开看到详细的操作记录
2.RDB和AOF的优缺点
a.RDB优缺点
RDB优点:
一旦采用该方式,那么整个Redis数据库将只包含一个文件,对于文件备份是完美的
对于灾难恢复而言,RDB可以将一个单独的文件压缩后再转移到其它存储介质上
性能最大化
相比于AOF机制,RDB启动效率高
RDB缺点:
系统在持久化之前出现宕机现象,没有写入的数据会丢失
当数据集较大时,可能会导致整个服务器停止几百毫秒,甚至1秒
b.AOF优缺点
AOF优点:
数据持久性
由于机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果本次操作只是写入了一半,数据就会出现问题,那么Redis下一次启动之前,可以通过redis-check-aof工具来解决一致性问题
如果日志过大,Redis可以自动启用rewrite机制
AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作
AOF缺点:
对于相同数量的数据集而言,AOF文件通常大于RDB文件,RDB文件恢复速度比AOF快
根据同步策略不同,AOF在运行效率上慢于RDB
3.Redis持久化配置
a.RDB持久化配置(vi /etc/redis/6379.conf)
save 900 1:在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照
save 300 10:在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照
save60 10000:在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照
备份与恢复:
redis-cli127.0.0.1:6379> keys *127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> save127.0.0.1:6379> exit/etc/init.d/redis_6379 stop
mv /var/lib/redis/6379/dump.rdb /root/
/etc/init.d/redis_6379 startredis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> exitls /var/lib/redis/6379/
/etc/init.d/redis_6379 stopmv dump.rdb /var/lib/redis/6379/mv: 是否覆盖 '/var/lib/redis/6379/dump.rdb'?y
/etc/init.d/redis_6379 startredis-cli
127.0.0.1:6379> keys *
1) "name"
b.AOF持久化配置
appendfsync always:每次有数据修改发生变化时都会写入AOF文件
appendfsynceversec:每秒钟同步一次,该策略为AOF的缺省策略
appenfsync no:从不同步,高效但是数据不会被持久化
备份与恢复
/etc/init.d/redis_6379 stop
vi /etc/redis/6379.confappendonly yes #673行/etc/init.d/redis_6379 startredis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name1 zs
OK
127.0.0.1:6379> set name2 ls
OK
127.0.0.1:6379> set name3 ww
OK
127.0.0.1:6379> exit/etc/init.d/redis_6379 stop
ls /var/lib/redis/6379/
mv /var/lib/redis/6379/appendonly.aof /root/
/etc/init.d/redis_6379 startredis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> exit/etc/init.d/redis_6379 stop
cp appendonly.aof /var/lib/redis/6379/
cp: 是否覆盖 '/var/lib/redis/6379/appendonly.aof'?y/etc/init.d/redis_6379 startredis-cli
127.0.0.1:6379> keys *
1) "name2"
2) "name3"
3) "name1"
4.AOF重写
a.为了解决AOF文件体积不断增大问题,用户可以向Redis发送BGREWRITEAOF命令,它会通过移除AOF文件的冗余命令来重写AOF文件
b.BGREWRITEAOF的工作原理和BGSAVE创建快照的工作原理相似:Redis会创建一个子进程,然后由子进程负载对AOF文件进行重写。因为AOF文件重写也要用到子进程,所以快照持久化因为创建子进程而导致的性能问题和内存占用问题
c.AOF持久化也可以设置auto-aof-rewrite-percentage选项和auto-aof-rewrite-min-size选项自动执行BGREWRITEAOF
三、性能管理
1.内存碎片率
操作系统分配的内存值used_memory_rss / Redis使用的内存中used_memory = 内存碎片率
2.内存使用率
a.针对缓存数据大小选择
如果缓存数据小于4GB,使用32位的Redis实例
b.使用Hash数据结构
Hash结构的操作命令HSET(key、fields、value)和HGET(key、field)
c.设置key的过期时间
使用Redis过期时间命令(expire,expireat,pexire,pexpireat)