一、关系数据库与非关系型数据库:
1、关系型数据库
- 一个结构化的数据库,创建在关系模型基础上,一般面向于记录。
- 包括:Oracle、MySQL、SQL Server、Microsoft Access、DB2等
2、非关系型数据库
- 除了主流的关系型数据库外的数据库,都认为是非关系型。
- 包括 Redis、MongBD、Hbase、CouhDB等
3、非关系型数据库产生背景(对象存储oss,RDS关系型数据库)
- High performance——对数据库高并发读写需求
- Huge Storage——对海量数据高效存储与访问需求
- High Scalability && High Availability———对数据库高可扩展性与高可用性需求
二、Redis简介:
- Redis基于内存运行并支持持久化
- 采用key-value(键值对)的存储形式
- 优点:
- 具有极高的数据读写速度
- 支持丰富的数据类型
- 支持数据的持久化
- 原子性
- 支持数据备份
三、Redis配置文件:
配置参数(/etc/redis/6379.conf)
- bind:监听的主机地址
- port:端口
- daemonize yes:启用守护进程
- pidfile:指定PID文件
- loglevel notice:日志级别
- logfile:指定日志文件
四、redis-cli命令行工具:
-
获取命令帮助
- help @:获取中的命令列表
- help :获取某个命令的帮助
- help :获取可能帮助的主题列表
- eg:help @list
help set
- eg:help @list
-
key相关命令:
- keys:获取符合规则的键值列表
- exists:判断键值是否存在
- del:删除当前数据库的指定key
- type:获取key对应的value值类型
- rename(覆盖)l renamenx(不覆盖):对已有的key进行重命名
- dbsize:查看当前数据库中key的数目
-
redis-benchmark测试工具
- -h:指定服务器主机名
- -p:指定服务器端口
- -c:指定并发连接数
- -n:指定请求数
- -d: 以字节的形式指定SET/GET值的数据大小
- -q:强制退出Redis,仅显示query/sec值
五、Redis多数据库操作
Redis支持多数据库,默认支持16个数据库,0-15命名
多数据库相互独立,互不干扰
多数据库常用命令
- 多数据库间切换
- 多数据库间移动数据
- 清除数据库内数据
六、Redis持久化
-
持久化概述
- Redis是运行在内存中,内存中的数据断电丢失
- 为了能够重用Redis数据,或者防止系统故障,需要将Redis中的数据写入到磁盘空间中即持久化
-
持久化分类
- RDB方式:创建快照的方式获取某一时刻Redis中所有数据的副本
- AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
-
Redis的默认持久化方式
-
默认文件名dump.rdb
-
触发条件
- 在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
- 执行save或者是bgsave(异步)命令
- 执行flushall命令,清空数据库所有数据
- 执行shutdown命令,保证服务器正常关闭且不丢失任何数据
-
通过RDB文件恢复数据:
- 将dump.rdb文件拷贝到redis的安装目录的bin目录下,重新启动redis服务即可。
-
-
AOF持久化
- Redis默认不开启
- 弥补RDB的不足(数据的不一致性)
- 采用日志的形式来记录每个写操作,并追加到文件中
- Redis 重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
- 通过AOF文件恢复数据:
- 将appendononly.aof文件拷贝到redis的安装目录的bin目录下,重新启动redis服务即可。
-
AOF的重写机制
- AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多
- 当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩
-
AOF重写的原理
- Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到一个临时文件中,最后替换旧的aof文件
七、redis性能管理:
1、内存碎片率
- 操作系统分配的内存值used_memory_rss除以Redis使用的内存值used_memory计算得出
- 内存碎片是由操作系统低效的分配/回收物理内存导致的,不连续的物理内存分配
- 跟踪内存碎片率对理解Redis实例的资源性能是非常重要的
- 内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低
- 内存碎片率超过1.5,说明Redis消耗了实际需要物理内存的150%,其中50%是内存碎片率
- 内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。
2、内存使用率
- redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换
- 避免内存交换
- 针对缓存数据大小选择
- 尽可能的使用Hash数据结构
- 设置key的过期时间
3、回收key
- 保证合理分配redis有限的内存资源
- 当达到设置的最大阀值时,需选择一种key的回收策略
- 默认情况下回收策略是禁止删除
- redis.conf配置文件中修改maxmemory-policy属性值
- volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据
- volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰
- volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰
- allkeys-lru:使用LRU算法从所有数据集合中淘汰数据
- allkeys-random:从数据集合中任意选择数据淘汰
- no-enviction:禁止淘汰数据