ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Redis-5.0.7配置与优化(最新版实战!!!)

2019-12-10 18:55:13  阅读:181  来源: 互联网

标签:5.0 127.0 0.1 Redis redis 6379 最新版 root


Redis概述

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

Redis优点

具有极高的数据读写速
支持丰富的数据类型
支持数据的持久化
原子性
支持数据备份

Redis配置文件(/etc/redis/6379.conf)bind: 监听的主机地址

port: 端口
daemonize yes: 启用守护进程
pidfile: 指定PID文件
loglevel notice: 日志级别
logfile: 指定日志文件

Redis安装部署

#安装编译环境
[root@localhost ~]# yum install gcc gcc-c++ make -y

#远程挂载源码包
[root@localhost ~]# mount.cifs //192.168.142.1/redis /mnt
Password for root@//192.168.142.1/redis:  

#解压源码包
[root@localhost ~]# cd /mnt
[root@localhost mnt]# tar zxvf redis-5.0.7.tar.gz -C /opt

#编译与安装
[root@localhost mnt]# cd /opt/redis-5.0.7/
[root@localhost redis-5.0.7]# make
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis/ install

#建立服务命令软链接到系统
[root@localhost redis-5.0.7]# ln -s /usr/redis/bin/* /usr/local/bin/

#切入utils目录
[root@localhost redis-5.0.7]# cd /opt/redis-5.0.7/utils/

#执行启动脚本
[root@localhost 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/redis/bin/redis-server
#此处需手动指定扩展目录路径/usr/local/redis/bin/redis-server

#使用进程控制启动服务
[root@localhost utils]# /etc/init.d/redis_6379 start
Starting Redis server...

#配置redis的6379.conf文件,追加监听地址
[root@localhost utils]# vim /etc/redis/6379.conf 
bind 127.0.0.1 192.168.142.136

#重启服务
[root@localhost utils]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...

Redis常用命令演示

#连接本地数据库
[root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> 

#连接远程数据库
[root@localhost utils]# redis-cli -h 192.168.142.136 -p 6379
192.168.142.136:6379> 

[root@localhost utils]# /usr/local/redis/bin/redis-cli
#获取set命令帮助
127.0.0.1:6379> help set

  SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
  summary: Set the string value of a key
  since: 1.0.0
  group: string

#存放数据
127.0.0.1:6379> set teacher wangmin
OK

#获取数据
127.0.0.1:6379> get teacher
"wangmin"

#查看当前数据库所有键
127.0.0.1:6379> keys *
1) "teacher"
2) "st"
3) "teacer"
4) "stu"
5) "student"

#查看当前数据库中
127.0.0.1:6379> keys t*
1) "teacher"
2) "teacer"

#查看当前数据库中以s开头后面包含任意一个及字符的键
127.0.0.1:6379> keys s?
1) "st"

#查看当前数据库中以s开头后面包含任意二个及字符的键
127.0.0.1:6379> keys s??
1) "stu"

#判断键值是否存
127.0.0.1:6379> exists stu
(integer) 1
#返回int值为1,则表示键值存在

127.0.0.1:6379> exists std
(integer) 0
#返回int值为0,则表示键值不存在

#删除当前数据库的指定key
127.0.0.1:6379> del st
(integer) 1

#获取可以对应的value值类型
127.0.0.1:6379> type stu
string

#对已有的可以进行重命名覆盖
127.0.0.1:6379> rename student stud
OK
127.0.0.1:6379> get stud
"yuanyuan"

#对已有的可以进行重命名不覆盖
127.0.0.1:6379> renamenx stud st
(integer) 1
127.0.0.1:6379> get st
"yuanyuan"

#查看当前数据库中key的数目
127.0.0.1:6379> dbsize
(integer) 4

redis-benchmark测试工具

-h:指定服务器主机名
-p:指定服务器端口
-C:指定并发连接数
-n: 指定请求数
-d:以字节的形式指定SET/GET值的数据大小
-q:强制推出redis。仅显示query/sec值

1.向IP地址为192.168.142.136端口为6379的redis服务器发送100个并发连接与100000个请求测试性能

[root@localhost utils]# /usr/local/redis/bin/redis-benchmark -h 192.168.142.136 -p 6379 -c 100 -n 100000
...
#主要查看set和get性能参数
====== SET ======
  100000 requests completed in 1.03 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

93.23% <= 1 milliseconds
99.09% <= 2 milliseconds
99.82% <= 3 milliseconds
100.00% <= 3 milliseconds
96993.21 requests per second

====== GET ======
  100000 requests completed in 1.05 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

92.05% <= 1 milliseconds
99.12% <= 2 milliseconds
99.75% <= 3 milliseconds
99.90% <= 7 milliseconds
99.93% <= 8 milliseconds
100.00% <= 8 milliseconds
94966.77 requests per second
...

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

[root@localhost utils]# /usr/local/redis/bin/redis-benchmark -h 192.168.142.136 -p 6379 -d 100
...
#主要查看set和get性能参数
====== SET ======
  100000 requests completed in 1.05 seconds
  50 parallel clients
  100 bytes payload
  keep alive: 1

99.17% <= 1 milliseconds
99.79% <= 2 milliseconds
100.00% <= 2 milliseconds
95328.88 requests per second

====== GET ======
  100000 requests completed in 1.02 seconds
  50 parallel clients
  100 bytes payload
  keep alive: 1

99.29% <= 1 milliseconds
99.70% <= 2 milliseconds
100.00% <= 2 milliseconds
97751.71 requests per second
...

Redis多数据库操作

Redis支持多数据库,默认支持16个数据库,0-15命名,多数据库相互独立,互不干扰

多数据库常用命令

#多数据库间切换
#默认在第一个数据库中
127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]> select 15
OK
127.0.0.1:6379[15]> 

#多数据库间移动数据
127.0.0.1:6379> move st 3
(integer) 1

#切换数据库并查看键值
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> keys *
1) "st"

#清除数据库内数据
127.0.0.1:6379[3]> flushdb
OK
127.0.0.1:6379[3]> keys *
(empty list or set)

Redis持久化

持久化概述

Redis是运行在内存中,内存中的数据断电丢失,为了能够重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化

持久化分类

●RDB方式:创建快照的方式获取某- -时刻Redis中所有数据的副本
●AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记.录数据的变化

RDB持久化

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

触发条件
●在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
●执行save或者是bgsave (异步) 命令
●执行flushall命令,清空数据库所有数据
●执行shutdown命令,保证服务器正常关闭且不丢失任何数据

优缺点
●适合大规模的数据恢复
●如果业务对数据完整性和一致性要求不高,RDB是很好的选择
●数据的完整性和一致性不高
●备份时占用内存

配置RDB持久化

[root@localhost utils]# vim /etc/redis/6379.conf 

#900秒之内至少一次写操作
save 900 1

#300秒之内至少发生10次写操作
save 300 10

#60秒之内发生至少10000次写操作
save 60 10000

#只要满足其一都会触发快照操作,注释所有的save项表示关闭RDB

#RDB文件名称
dbfilename dump.rdb

#RDB文件路径
dir /var/lib/redis/6379

#开启压缩功能
rdbcompression yes

AOF持久化

Redis默认不开启
弥补RDB的不足(数据的不一致性)
采用日志的形式来记录每个写操作,并追加到文件中
Redis重启会根据日志文件的内容将写指令从前到后执
行一次以完成数据的恢复工作

配置AOF持久化

[root@localhost utils]# vim /etc/redis/6379.conf 

#开启AOF持久化
appendonly yes

#AOF文件名称
appendfilename "appendonly.aof"

#always:同步持久化,每次发生数据变化会立刻写入磁盘
# appendfsync always

#everysec:默认推荐,每秒异步记录次(默认值)
appendfsync everysec

#no:不同步,交给操作系统决定如何同步
# appendfsync no

#忽略最后一条可能存在问题的指令
aof-load-truncated yes

AOF的重写机制

AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多
当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩

AOF重写的原理

Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到一个临时文件中,最后替换旧的aof文件

AOF的重写配置

[root@localhost utils]# 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命令的最小值,
#避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF
auto-aof-rewrite-min-size 64mb

Redis性能管理

查看redis内存使用

[root@localhost utils]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> info memory
# Memory
used_memory:11767592
used_memory_human:11.22M        #内存使用率
used_memory_rss:23867392
used_memory_rss_human:22.76M
used_memory_peak:24877056
used_memory_peak_human:23.72M
used_memory_peak_perc:47.30%
used_memory_overhead:841518
used_memory_startup:791416
used_memory_dataset:10926074
used_memory_dataset_perc:99.54%
allocator_allocated:12177712
allocator_active:12488704
allocator_resident:19542016
total_system_memory:1911832576
total_system_memory_human:1.78G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.03
allocator_frag_bytes:310992
allocator_rss_ratio:1.56
allocator_rss_bytes:7053312
rss_overhead_ratio:1.22
rss_overhead_bytes:4325376
mem_fragmentation_ratio:2.04        #内存碎片率
mem_fragmentation_bytes:12140824
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:49694
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0

标签:5.0,127.0,0.1,Redis,redis,6379,最新版,root
来源: https://blog.51cto.com/14449521/2457539

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有