Redis配置与优化

Redis配置与优化

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安装部署

#安装编译环境
[[email protected] ~]# yum install gcc gcc-c++ make -y

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

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

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

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

#切入utils目录
[[email protected] redis-5.0.7]# cd /opt/redis-5.0.7/utils/

#执行启动脚本
[[email protected] 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

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

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

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

Redis常用命令演示

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

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

[[email protected] 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个请求测试性能

[[email protected] 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字节的数据包的性能

[[email protected] 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持久化

[[email protected] 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持久化

[[email protected] 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的重写配置

[[email protected] 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内存使用

[[email protected] 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

内存碎片率

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

内存使用率

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

回收key

●保证合理分配redis有限的内存资源
●当内存使用达到设置的最大阀值时,需要选择一种key的回收策略
默认情况下回收策略是禁止删除
redis.conf配置文件中修改maxmemory-policy属性值
- volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据
- volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰
- volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰
- allkeys-lru:使用LRU算法从所有数据集合中淘汰数据
- allkeys-random:从数据集合中任意选择数据淘汰
- no-enviction:禁止淘汰数据

感谢阅读~ ~ ~ ~

原文地址:https://blog.51cto.com/14484404/2461455

时间: 2024-08-08 01:41:18

Redis配置与优化的相关文章

MySQL必须调整的10项配置mysql优化

from:http://www.opsers.org/server/10-configuration-mysql-mysql-must-adjust-optimization.html 大多数配置能在运行时使用SET GLOBAL改变.这是非常便捷的方法它能使你在出问题后快速撤销变更.但是,要永久生效你需要在配置文件里做出改动. 一个变更即使重启了MySQL也没起作用?请确定你使用了正确的配置文件.请确定你把配置放在了正确的区域内(所有这篇文章提到的配置都属于 [mysqld]) 服务器在改动一

EF架构~通过EF6的DbCommand拦截器来实现数据库读写分离~终结~配置的优化和事务里读写的统一

回到目录 本讲是通过DbCommand拦截器来实现读写分离的最后一讲,对之前几篇文章做了一个优化,无论是程序可读性还是实用性上都有一个提升,在配置信息这块,去除了字符串方式的拼接,取而代之的是section数组,这样在修改配置时更加清晰了:而实用性上,彻底改变了读和写不能共用一个仓储对象的缺点,并且在一个事务里可以读写并存,并为了数据的一致性,使事务里的curd操作指向主库,这一点很重要! 前几篇文章的目录 EF架构~通过EF6的DbCommand拦截器来实现数据库读写分离~再续~添加对各只读服

Redis配置以及通过C#访问小试

首先安装一个Ubuntu14.04的虚拟机用来安装Redis.Ubuntu的Unity在虚拟机里面卡爆了,可以通过如下方法安装传统的Gnome界面: sudo aptitude install gnome-session-fallback 安装完成之后可以在登录的地方选择Gnome界面. Redis的编译和安装在Linux下面非常简单,访问redis.io获得稳定版的源代码.现在是redis-2.8.13.tar.gz 下载完成之后,执行如下命令: tar xzf redis-2.8.13.ta

tomcat配置和优化

介绍 1.tomcat是一个解析jsp程序的软件 2.jdk用来编译 3.Apache是一个web服务器环境程序,启用它可以作为web服务器使用不过只支持静态网页,不支持动态网页,如asp.jsp.php.cgi 4.如果要在Apache环境下运行jsp就需要一个解释器来执行jsp网页,而这个jsp解释器就是Tomcat 5.那为什么还要JDK呢?因为jsp需要连接数据库的话就要jdk来提供连接数据库的驱程,所以要运行jsp的web服务器平台就需要APACHE+TOMCAT+JDK tomcat

实战Nginx与PHP(FastCGI)的安装、配置与优化(转载)

一.什么是 FastCGIFastCGI是一个可伸缩地.高速地在HTTP server和动态脚本语言间通信的接口.多数流行的HTTP server都支持FastCGI,包括Apache.Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP.FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器.这在处理高并发访问时,几乎是不可用的.

设置redis配置

编辑redis配置 可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置. eg: CONFIG SET loglevel "notice"//设置 CONFIG GET loglevel //查看设置结果 查看redis配置 语法:CONFIG GET CONFIG_SETTING_NAME eg: CONFIG GET loglevel 1) "loglevel" 2) "notice" 查看所有配置项: CO

Linux运维二:CentOS6.6系统安装后的基本配置与优化

CentOS6.6系统安装完成后还需要做一些配置与优化: 一:Linux内核版本号介绍 查看内核版本: [[email protected] scripts]# uname -r 2.6.32-504.el6.x86_64 2 表示主版本号,有结构性变化才会更改 6 表示次版本号,新增功能时才变化,一般奇数表示测试版,偶数表示开发版 32 表示对次版本的修订次数或补丁包数 504 代表编译的次数,每次编译可对少数程序优化或修改 el6 用来表示版本的特殊信息,有较大的随意性 e1 代表企业版li

实战Nginx与PHP(FastCGI)的安装、配置与优化

一.什么是 FastCGIFastCGI是一个可伸缩地.高速地在HTTP server和动态脚本语言间通信的接口.多数流行的HTTP server都支持FastCGI,包括Apache.Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP.FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器.这在处理高并发访问时,几乎是不可用的.

Nginx与Tomcat安装、配置与优化

Nginx与Tomcat安装.配置与优化 Nginx的安装与使用 Nginx是一款优秀的反向代理服务器 安装: rpm(或者是pkg安装),是预编译好的程序包安装 yum(或者apt-get)安装,自动联网下载安装包,自动管理依赖关系 编译安装 检查和安装依赖项 yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel configure make && make install 启动.停止.重启: 安