文章目录
NoSQL之Redis配置与优化
一、概览
1、关系数据库与非关系型数据库
1、关系型数据库
- 一个结构化的数据库,创建在关系模型基础上
- 一般面向于记录
- 包括----Oracle、 MySQL、SQL Server. Microsoft Access. DB2等
2、非关系型数据库
- 除了主流的关系型数据库外的数据库,都认为是非关系型
- 包括----Redis、 MongBD、 Hbase、 CouhDB等
2、非关系型数据库产生背景
- High performance—对数据库高并发读写需求
- Huge Storage—对海量数据高效存储与访问需求
- High Scalability && High Availbility—对数据库高可扩展性与高可用性需求
3、Redis简介
1、Redis基于内存运行并支持持久化
2、采用key-value (键值对)的存储形式
3、优点
- 具有极高的数据读写速度
- 支持丰富的数据类型
- 支持数据的持久化
- 原子性
- 支持数据备份
4、配置参数(/etc/redis/6379.conf)
- bind:监听的主机地址
- port:端口
- daemonize yes:启用守护进程
- pidfile:指定PID文件
- loglevel notice:日志级别
- logfile:指定日志文件
5、redis-cli命令行工具
获取命令帮助
- help @<group>:获取<group>中的命令列表
- help <command>:获取某个命令的帮助
- help <tab>:获取可能帮助的主题列表
6、redis-benchmark测试工具
- -h:指定服务器主机名
- -p:指定服务器端口
- -c:指定并发连接数
- -n:指定请求数
- -d:以字节的形式指定SET/GET值的数据大小
- -q:强制退出Redis,仅显示query/sec值
7、redis-benchmark测试工具
- 向IP地址为192.168.10.161、端口为6379的Redis服务器发送100个并发连接与100000个请求测试性能
/usr/local/redis/bin/redis-benchmark -h 192.168.10.161 -p 6379 -C 100 -n 100000 - 测试存取大小为100字节的数据包的性能
/usr/local/redis/bin/redis-benchmark -h 192.168.10.161 -p 6379-q -d 100
8、Redis多数据库操作
1、Redis支持多数据库,默认支持16个数据库,0-15命名
2、多数据库相互独立,互不干扰
3、多数据库常用命令
- 多数据库间切换
- 多数据库间移动数据
- 清除数据库内数据
9、Redis持久化
1、持久化概述
- Redis是运行在内存中,内存中的数据断电丢失
- 为了能够重用Redis数据,或者防止系统故障,需要将Redis中的数据写入到磁盘空间中,即持久化
2、持久化分类
- RDB方式:创建快照的方式获取某-时刻Redis中所有数据的副本
- AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
10、RDB持久化
Redis的默认持久化方式
默认文件名dump.rdb
触发条件
优缺点
- 适合大规模的数据恢复
- 如果业务对数据完整性和一致性要求不高,RDB是很好的选择
- 数据的完整性和一致性不高
- 备份时占用内存
11、AOF持久化
- Redis默认不开启
- 弥补RDB的不足(数据的不一致性)
- 采用日志的形式来记录每个写操作,并追加到文件中
- Redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
12、AOF持久化原理
1、AOF的重写机制
- AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多
- 当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩
2、AOF重写的原理
- Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到一个临时文件中,最后替换旧的aof文件
13、Redis性能管理
1、内存碎片率
- 操系统分配的内存值used_ memory_ rss除以Redis使用的内存值used_ _memory计算得出
- 内存碎片是由操作系统低效的分配/回收物理内存导致的—不连续的物理内存分配
- 跟踪内存碎片率对理解Redis实例的资源性能是非常重要的
1、内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低
2、内存碎片率超过1.5,说明Redis消耗 了实际需要物理内存的150%,其中50%是内存碎片率
3、内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换
2、内存使用率
- redis实例的内存使用率超过可用最大内存,操作系统将开始进行内存与swap空间交换
- 避免内存交换
1、针对缓存数据大小选择
2、尽可能的使用Hash数据结构
3、设置key的过期时间
3、回收key
-
保证合理分配redis有限的内存资源
-
当达到设置的最大阀值时,需选择一种key的回收策略
1、默认情况下回收策略是禁止删除2、redis.conf配置文件中修改maxmemory-policy属性值
volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据
volatile-ttl: 从已设置过期时间的数据集合中挑选即将过期的数据淘汰
volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰
allkeys-lru: 使用LRU算法从所有数据集合中淘汰数据
allkeys-random:从数据集合中任意选择数据淘汰
no-enviction: 禁止淘汰数据
14、Redis数据库常用命令
key相关命令
keys:获取符合规则的键值列表
exists:判断键值是否存在
del:删除当前数据库的指定key
type:获取key对应的value值类型
rename(覆盖) /renamenx (不覆盖):对已有的key进行重命名
dbsize:查看当前数据库中key的数目
15、AOF的重写配置
vim /etc/redis/6379.conf
#在日志进行BGREWRITEAOF时,如果设置为yes表示新写操作不进行同步fsync,只是暂存在缓冲区里,避免造成磁盘I0操作冲突,等重写完成后在写入。Redis中默认为no
no-appendfsync-on-rewrite no
#当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作
auto-aof-rewrite-percentage 100
#当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Redis时由于文件尺寸较小导致频繁的BGREWRITEAOF
auto-aof-rewrite-min-size 64mb
二、实验
1、安装工具包并安装redis
yum install gcc gcc-c++ make -y
cd /opt
tar zxvf redis-5.0.7.tar.gz
cd redis-5.0.7/
make
make PREFIX=/usr/local/redis install
ln -s /usr/local/redis/bin/* /usr/local/bin/
cd utils
./install_server.sh
//一直回车
netstat -lnupt | grep redis
2、启动redis服务
/etc/init.d/redis_6379 stop //停止
/etc/init.d/redis_6379 start //启动
/etc/init.d/redis_6379 restart //重启
/etc/init.d/redis_6379 status //启动
3、配置文件
vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.195.128 //70行,后面地址为本机地址
port 6379 //93行
daemonize yes //137行
pidfile /var/run/redis_6379.pid //159行
loglevel notice //167行
logfile /var/log/redis_6379.log //172行
4、连接redis服务
redis-cli //连接本地数据库
redis-cli -h 192.168.195.128 -p 6379 //连接远程数据库
### 5、Redis数据库常用命令
keys * //查询库有所有键的列表
set aaa 111 //添加一条记录,键为aaa,值为111
get aaa //查询键为aaa的值
exists aaa //查询键为aaa的数据是否存在,存在返回非0,不存在返回0
rename aaa bbb //对已有的key进行重命名
dbsize //查询数据库中key的数目
del bbb //删除key
hset person name zhangsan //添加对象
hset person age 18
hset person score 88
hget person name //查询对象中的值
quit //退出
6、查看Redis内存使用
info memory ##查看内存
used_memory:2323242 ##内存使用总量
used_memory_human:2.53M
mem_fragmentation_ratic:4.57 ##内存碎片率,内存碎片率最佳为1