NoSQL之Redis配置与优化

一、Redis简介

●Redis基于内存运行并支持持久化(内存运行:处理高热数据优秀,不占用多的进程)
●采用key-value(键值对)的存储形式
●优点
具有极高的数据读写速度
支持丰富的数据类型
支持数据的持久化
原子性
支持数据备份

二、Redis部署

2.1Redis安装

1.安装编译工具后编译安装redis

[root@localhost ~]# yum -y install gcc gcc-c++ make
[root@localhost ~]# tar zxf redis-5.0.7.tar.gz
[root@localhost ~]# cd redis-5.0.7/
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis install

2.进行命令路径优化,执行redis安装脚本进行配置

[root@localhost redis-5.0.7]# 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@localhost redis-5.0.7]# cd utils/
[root@localhost utils]# ./install_server.sh   #安装后redis自动开启了
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]  #执行文件路径
Cli Executable : /usr/local/bin/redis-cli      #客户端命令工具

[root@localhost utils]# /etc/init.d/redis_6379 start/stop/status/restart   

3.将本机地址添加到监听端口,重启服务后测试能否成功登录

[root@localhost utils]# vim /etc/redis/6379.conf
bind 127.0.0.1 14.0.0.20   #把允许登录的地址加到配置文件的bind后面
[root@localhost utils]# /etc/init.d/redis_6379 restart
[root@localhost utils]# netstat -lutap | grep 6379
tcp        0      0 localhost:6379          0.0.0.0:*               LISTEN      12774/redis-server
[root@localhost utils]# redis-cli -h 14.0.0.20 -p 6379  #连接远程数据库
14.0.0.20:6379>
 #连接本地数据库
[root@localhost utils]# redis-cli
127.0.0.1:6379>

2.2Redis配置文件部分参数介绍

●配置参数(/etc/redis/6379.conf)
bind:监听的主机地址
port:端口
daemonize yes:启用守护进程
pidfile:指定PID文件
loglevel notice:日志级别
logfile:指定日志文件

三、Redis数据库常用命令

redis-cli命令行工具

3.1连接数据库

#连接本地数据库

[root@localhost utils]# redis-cli
127.0.0.1:6379>

#连接远程数据库

[root@localhost utils]# redis-cli -h 14.0.0.20 -p 6379 
14.0.0.20:6379>

3.2获取命令帮助

help :获取某个命令的帮助
help :获取可能帮助的主题列表
help @:获取中的命令列表

3.3存放/获取数据

set:存放数据
get:获取数据

127.0.0.1:6379> set person tom   #set 键名 值
OK
127.0.0.1:6379> keys *       
1) "person"
127.0.0.1:6379> get person   #查看键person对应的值
"tom"

3.4key相关命令

●keys:获取符合规则的键值列表

#keys *:查看所有键;通配符*和?都支持
127.0.0.1:6379> keys per*
1) "person"
127.0.0.1:6379> keys per???
1) "person"

●exists:判断键值是否存在

127.0.0.1:6379> exists person
(integer) 1      #执行失败返回0,执行成功返回非0

●del:删除当前数据库的指定key

127.0.0.1:6379> keys *
1) "age"
2) "person"
127.0.0.1:6379> del person   #del 键名
(integer) 1
127.0.0.1:6379> keys *
1) "age"

●type:获取key对应的value值类型

127.0.0.1:6379> type age
string

●rename(覆盖)/renamenx(不覆盖):对已有的key进行重命名

127.0.0.1:6379> rename socre new
OK

●dbsize:查看当前数据库中key的数目

127.0.0.1:6379> dbsize
(integer) 2      #有两个key

3.5redis-benchmark测试工具(压测)

●向IP地址为14.0.0.20、端口为6379的Redis服务器发送100个并发连接与10000个请求测试性能

[root@localhost utils]# redis-benchmark -h 14.0.0.20 -p 6379 -c 100 -n 10000

●测试存取大小为100字节的数据包的性能

[root@localhost utils]# redis-benchmark -h 14.0.0.20 -p 6379 -q -d 100

四、Redis多数库操作

●Redis支持多数据库,默认支持16个数据库,0-15命名,
●多数据库相互独立,互不干扰
●多数据库常用命令
多数据库间切换
多数据库间移动数据
清除数据库内数据

127.0.0.1:6379> select 5   #选择数据库5
OK
127.0.0.1:6379[5]> set age 5  #创建键名age,值5
OK
127.0.0.1:6379[5]> keys *  
1) "age"
127.0.0.1:6379[5]> move age 1  #移动键值到数据库1
(integer) 1
127.0.0.1:6379[5]> select 1
OK
127.0.0.1:6379[1]> keys *
1) "age"

●Redis支持存对象

例如:对象是student
127.0.0.1:6379> hset student name lisi
(integer) 1
127.0.0.1:6379> hset student age 18
(integer) 1
127.0.0.1:6379> hset student score 90
(integer) 1
127.0.0.1:6379> keys *
1) "student"
127.0.0.1:6379> hget student name
"lisi"
127.0.0.1:6379> hget student age
"18"

五、Redis持久化

●持久化概述
Redis是运行在内存中,内存中的数据断电丢失
为了能够重用Redis数据,或者防止系统故障,需要将Redis中的数据写入到磁盘空间中,即持久化
●持久化分类
RDB方式:创建快照的方式获取某一时刻Redis中所有数据的副本
(缺点:只能是一个时刻,不可以连续,存在盲区,可能导致少量数据丢失)
AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
(缺点:日志文件的量多,人力成本大)
注意:
生产环境RDB+AOF方式,两个快照中间部分采用AOF方式,查找日志中对应时间的写命令

5.1RDB持久化

●Redis默认的持久化方式
●默认文件名为dump.rdb

[root@redis utils]# cd /var/lib/redis/6379/
[root@redis 6379]# ls
dump.rdb

●触发条件
在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
执行save或者是bgsave(异步)命令
执行flushall命令,清空数据库所有数据
执行shutdown命令,保证服务器正常关闭且不丢失任何数据
●优缺点
适合大规模的数据恢复
如果业务对数据完整性和一致性要求不高,RDB是很好的选择
数据的完整性和一致性不高
备份时占用内存
●通过RDB文件恢复数据
将dump.rdb文件拷贝到redis的安装目录的bin目录下,重启redis服务即可

[root@localhost utils]# vim /etc/redis/6379.conf
save 900 1    #900秒之内至少一次写操作
save 300 10  #300秒内至少10次操作
save 60 10000 #60秒内至少10000次写操作
#只要满足其一都会触发快照操作,注释所有的save项表示关闭RDB
dbfilename dump.rdb  #RDB文件名称
dir /var/lib/redis/6379  #RDB文件路径
rdbcompression yes   #是否进行压缩

5.2AOF持久化

●Redis默认不开启
●弥补RDB的不足(数据的不一致性)
●采用日志的形式来记录每个写操作,并追加到文件中
●Redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
●根据AOF文件恢复数据
将appendonly.aof文件拷贝到redis安装目录的bin目录下,重启redis服务即可
●配置文件选项

[root@localhost ~]# vim /etc/redis/6379.conf
appendonly yes  #开启AOF持久化
appendfilename "appendonly.aof"   #AOF文件名称
#appendfsync always     #同步持久化,每次发生数据变化会立刻写入磁盘;
appendfsync everysec    #默认推荐,每秒异步记录一次(默认值)
#appendfsync no      #不同步,交给操作系统决定如何同步
aof-load-truncated yes   #忽略最后一条可能存在问题的指令

●AOF的重写机制
AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多
当AOF文件的大小超过所设定的阀值时,Redis就会对AOF文件的内容压缩
●AOF的重写的原理
Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到一个临时文件中,最后替换旧的aof文件
●AOF的重写配置

[root@redis 6379]# vim /etc/redis/6379.conf 
no-appendfsync-on-rewrite no	#在日志进行BGREWRITEAOF时, 如果设置为yes表示新写操作不进行同步fsync,只暂存在缓冲区里,避免造成磁盘I0操作冲突,等重写完成后在写入。redis中默认为no
auto-aof-rewrite-percentage 100	#当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作
auto-aof-rewrite-min-size 64mb	#当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF.AOF文件到达64M的时候,发生BGREWRITEAOF操作

六、Redis性能管理

6.1查看Redis内存使用

[root@localhost ~]# redis-cli
127.0.0.1:6379> info memory
#Memory
used_memory:11315280                #内存使用总量
used_memory_human:10.79M
...省略内容
mem_fragmentation_ratio:1.76      #内存碎片率
mem_fragmentation_bytes:8566768  

6.2内存碎片率介绍

●操作系统分配的内存值used_memory_rss除以redis使用的内存值
used_ memory计算得出
●内存碎片是由操作系统低效的分配/回收物理内存导致的
不连续的物理内存分配
●跟踪内存碎片率对理解redis实例的资源性能是非常重要的
内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低
内存碎片率超过1.5,说明redis消耗了实际需要物理内存的150%,其中50%是 内存碎片率
内存碎片率低于1的,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换
(内存碎片率为1是最佳,低于1访问速度会慢,高于1说明碎片太多)

6.3内存使用率介绍

●redis实例的内存使用率超过可用最大内存,操作系统将开始进行
内存与swap空间交换(这时redis响应速度会变慢)
●避免内存交换
针对缓存数据大小选择
尽可能的使用Hash数据结构
设置key的过期时间

6.4如何回收key

●保证合理分配redis有限的内存资源
●当达到设置的最大阈值时,需选择一种key的回收策略
默认情况下回收策略是noeviction(禁止收回)
/etc/redis/6379.conf配置文件中修改maxmemory-policy属性值
volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据
volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰(建议使用)
volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰
allkeys-lru:使用LRU算法从所有数据集合中淘汰数据
allkeys-random:从数据集合中任意选择数据淘汰
no-enviction:禁止淘汰数据
去掉#注释后,配置文件一定要顶格写

猜你喜欢

转载自blog.csdn.net/chengu04/article/details/108479164