Redis性能优化培训ppt课件.pptx

上传人:飞****2 文档编号:70670464 上传时间:2023-01-23 格式:PPTX 页数:39 大小:484.64KB
返回 下载 相关 举报
Redis性能优化培训ppt课件.pptx_第1页
第1页 / 共39页
Redis性能优化培训ppt课件.pptx_第2页
第2页 / 共39页
点击查看更多>>
资源描述

《Redis性能优化培训ppt课件.pptx》由会员分享,可在线阅读,更多相关《Redis性能优化培训ppt课件.pptx(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去RedisRedis性能优化培训性能优化培训快速掌握Redis性能优化火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去目录Redis简介Redis特性Redis性能数据指标常见性能问题分析性能优化方案性能测试火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去Redis简介Redis是一个开源的高性能Nosql数据库,也是基于内存的Key-Value存储系统,可以用作数据库

2、、缓存和消息中间件支持多种数据结构:字符串、哈希表、列表、集合、有序集合、位图、Hyperloglogs内置了复制,LUA脚本,LRU数据淘汰,事务和不同级别的磁盘持久化等功能通过Sentinel哨兵和Cluster自动分片集群提供高可用性火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去Redis特性基于单线程模型实现,一个线程服务所有客户端请求,采用非阻塞式IO线程安全,所有操作都是原子的,不会因并发产生数据异常速度非常快,大部分命令算法时间复杂度都是O(1)使用高耗时Redis命令很危险,会占用唯一线程的大量处理时间,导致所有的请

3、求都被拖慢火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去Redis性能数据指标通过Redis-cli命令行界面访问到Redis服务器,使用info命令获取丰富的Redis性能数据指标info命令输出的数据可分为10个类别,分别是:serverclientsmemorypersistencestatsreplicationcpucommandstatsclusterkeyspace火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去重要性能指标memory输入infomemory

4、命令,只返回与内存相关的数据常用内存数据指标1.used_memory:已使用内存2.used_memory_rss:从操作系统上显示已经分配的内存总量3.mem_fragmentation_ratio:内存碎片率4.used_memory_lua:Lua脚本引擎所使用的内存大小5.mem_allocator:在编译时指定的Redis使用的内存分配器,可以是libc、jemalloc、tcmalloc以上指标都是以字节(byte)为单位火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去重要性能指标CPUused_cpu_sys:55.0

5、9-Redis服务器耗费的系统CPUused_cpu_user:26.16-Redis服务器耗费的用户CPUused_cpu_sys_children:0.02-后台进程耗费的系统CPUused_cpu_user_children:0.01-后台进程耗费的用户CPU火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去重要性能指标Clients记录了已连接客户端的信息connected_clients:1-已连接客户端的数量(不包括通过从属服务器连接的客户端)client_longest_output_list:0-当前连接的客户端当中,最

6、长的输出列表client_biggest_input_buf:0-当前连接的客户端当中,最大输入缓存blocked_clients:0-正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去重要性能指标Stats记录了一般统计信息total_connections_received:782640-服务器已接受的连接请求数量total_commands_processed:6401614-服务器已执行的命令数量instantaneous_ops_per_sec:7-

7、服务器每秒钟执行的命令数量latest_fork_usec:475-最近一次fork()操作耗费的毫秒数火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去重要性能指标Commandstats记录了各种不同类型的命令的执行统计信息记录命令执行的次数、命令耗费的CPU时间、执行每个命令耗费的平均CPU时间等等火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去常见性能问题分析一生产系统刚开始运行阶段,系统稳定。但是运行一段时间后,发现部分时间段系统接口响应变慢。查看客户端日志经常会出现

8、这样的错误:redis.clients.jedis.exceptions.JedisConnectionException:.SocketTimeoutException:Readtimedout执行slowlog查看慢查询语句,发现有大量的keys命令操作,keys命令在大量并发情况下性能非常差正式环境中,尽量避免使用keys,接下来找出使用keys的代码做优化,至此,timeout问题解决火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去常见性能问题分析二生产环境长时间的运行后,经常会有接口返回数据失败的情况,或者是从监控上发现数据

9、库压力某一时间暴增。查看客户端日志发现这样的错误:redis.clients.jedis.exceptions.JedisConnectionException:Couldnotgetaresourcefromthepool执行clientlist命令,发现大量的client的idle时间特别长检查配置发现timeout和tcp-keepalive均未启用(均为0),redis服务端没有有效的机制来确保服务端已经建立的连接是否已经失效当服务器和客户端网络出现闪断,导致tcp连接中断,这种情况下的client将会一直被redis服务端所持有,就会出现上idle时间特长的client连接设置tim

10、eout和tcp-keepalive来清理失效的连接火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去常见性能问题分析三突然间服务不能访问,返回错误:redis.clients.jedis.exceptions.JedisDataException:MISCONFRedisisconfiguredtosaveRDBsnapshots,butiscurrentlynotabletopersistondisk.Commandsthatmaymodifythedatasetaredisabled.PleasecheckRedislogsfor

11、detailsabouttheerror.查看redis日志,发现有这个错误:Cantsaveinbackground:fork:CannotallocatememoryRedis在保存内存的数据到磁盘时,为了防止主进程假死,会Fork一个子进程来完成这个保存操作,这个Fork的子进程会需要分配和主进程相同的内存,这时候就相当于需要的内存double了,如果这时候可用内存不足以分配需要的内存,将会导致Fock子进程失败而无法保存数据到磁盘。修改linux内核参数:vm.overcommit_memory=1,问题解决火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或

12、裹上湿毛毯、湿被褥勇敢地冲出去优化措施总结1.结合实际使用场景,考虑是否需要用到redis的持久化,如果单纯用来做应用层的缓存(在缓存未命中的情况下访问数据库),可以关闭持久化2.缓存模式下,尽量为每块缓存设置时效性,避免冷数据长时间占用资源3.生产环境中尽量避免使用keys操作,由于redis是单线程模式,大量的keys操作会阻塞其他的命令执行4.设置合理的内存回收策略,保证内存可用性的同时能适当的提供缓存的命中率5.提前计算出系统可能会用的内存大小,合理的分配内存。需要注意在开启持久化模式下,需要预留更多的内存提供给Fock的子进程做数据磁盘flush操作火灾袭来时要迅速疏散逃生,不可蜂拥

13、而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去性能优化方案关键参数优化长耗时命令优化延迟因素优化内存管理优化操作系统优化读写分离机制Redis集群火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去关键参数优化客户端最大连接数(maxclients)可能的错误信息:maxnumberofclientsreached默认为0,即不限制,一般不需要更改,所以客户端连接限制,取决于操作系统参数ulimit-n(maxopenfiles),可通过修改/etc/security/limits.conf文件以永久生效。火灾

14、袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去关键参数优化主从响应策略(repl-ping-slave-period/repl-timeout)slave会每隔repl-ping-slave-period(默认10秒)ping一次master,如果超过repl-timeout(默认60秒)都没有收到响应,就会认为Master挂了。如果Master明明没挂但被阻塞住了也会报这个错。可以适当调大repl-timeout火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去关键参数优化客户

15、端输出缓冲区(client-output-buffer-limit)当使用主从复制时,性能压测下,数据量会急剧增长,导致从节点需要复制的数据很大,消耗时长增加。slave没挂但被阻塞住了,比如正在loadingMaster发过来的RDB,Master的指令不能立刻发送给slave,就会放在outputbuffer中,在配置文件中有如下配置:client-output-buffer-limitslave256mb64mb60这是说负责发数据给slave的client,如果buffer超过256m或者连续60秒超过64m,就会被立刻强行关闭所以此时应该相应调大数值,否则就会出现很悲剧的循环:Mas

16、ter传输一个很大的RDB给Slave,Slave努力地装载,但还没装载完,Master对client的缓存满了,再来一次火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去关键参数优化客户端最大连接数(maxclients)限制非预期的连接数增长,保持Redis的性能最优应设置为预期连接数峰值的110%到150之间,若是连接数超出这个数字后,Redis会拒绝并立刻关闭新来的连接默认情况下,尽量不要让Redis实例的客户端连接数超出5000火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢

17、地冲出去长耗时命令优化*不要把List当做列表使用,仅当做队列来使用*通过机制严格控制Hash、Set、SortedSet的大小*可能的话,将排序、并集、交集等操作放在客户端执行*绝对禁止使用KEYS命令*避免一次性遍历集合类型的所有成员,而应使用SCAN类的命令进行分批的,游标式的遍历火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去长耗时命令优化SlowLog可以自动记录耗时较长的命令配置参数:slowlog-log-slower-thanxxx#执行时间慢于xxx微秒的命令计入SlowLogslowlog-max-lenxxx#S

18、lowLog的长度,即最大记录多少条SlowLogSLOWLOGGETnumber命令,获取最近进入SlowLog的number条命令SLOWLOGRESET命令,重置SlowLog火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去延迟因素优化网络引发的延迟通常千兆网络环境中,TCP/IP网络延迟是200us(微秒),Unix域Socket可以低到30us减少网络往返时间RTT(Round-TripTime),官方优化建议:*长连接:不要频繁连接/断开到服务器的连接,尽可能保持长连接*域Socket:客户端与Redis服务端在同一台机器

19、上,应使用Unix域Socket*多参数命令:相比管道,优先使用多参数命令,如mset/mget/hmset/hmget等*管道化:使用管道pipeline将连续执行的命令组合执行,减少RTT*LUA脚本:对于有数据依赖而无法使用管道的命令,可以考虑在Redis服务端执行LUA脚本火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去延迟因素优化数据淘汰引发的延迟当同一秒内有大量key过期时,会引发Redis的延迟,尽量错开key的失效时间随机化设置过期时间,避免同一时间超过25%的Key过期导致的Redis阻塞Redis剔除过期Key的两

20、种方式:被动:当客户端访问到Key时,发现已经过期,则剔除主动:每100ms剔除一批Key,假如过期Key超过25%则反复执行火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去延迟因素优化Swap引发的延迟当Linux将Redis所用的内存分页移至swap空间时,将会阻塞Redis进程,导致Redis出现不正常的延迟/proc/smaps文件中会保存进程的swap记录,通过查看这个文件,能够判断Redis的延迟是否由Swap产生。如果这个文件中记录了较大的Swapsize,则说明延迟很有可能是Swap造成的火灾袭来时要迅速疏散逃生,不可

21、蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去延迟因素优化数据持久化引发的延迟Redis的数据持久化工作本身就会带来延迟,需要根据数据的安全级别和性能要求制定合理的持久化策略RDB持久化通常会提供比使用AOF更高的性能,但每次RDB快照和AOFRewrite都需要Redis主进程进行fork操作,fork操作本身可能会产生较高的耗时根据具体情况合理配置RDB快照和AOFRewrite时机,避免过于频繁的fork带来的延迟可以通过INFO命令返回的latest_fork_usec字段查看上一次fork操作的耗时(微秒)火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财

22、物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去内存管理优化内存使用率Redis内存使用used_memory超过可用内存的95%,部分数据开始在内存与Swap空间来回交换,严重影响性能如果没有开启RDB快照或AOF持久化策略,缓存数据在Redis崩溃时会有丢失风险当开启并触发快照功能时,Redis会fork一个子进程把当前内存中的数据完全复制一份写入到硬盘上。因此若是当前使用内存超过可用内存的45%时触发快照功能,那么此时进行的内存交换会变的非常危险(可能会丢失数据)。倘若在这个时候实例上有大量频繁的更新操作,问题会变得更加严重火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,

23、要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去内存管理优化内存使用率优化如果缓存数据小于4GB,使用32位的Redis实例可能的使用Hash数据结构设置key的过期时间回收key火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去内存管理优化内存回收策略maxmemory-policy“volatile-lru”:使用LRU算法从已设置过期时间的数据集合中淘汰数据“volatile-ttl”:从已设置过期时间的数据集合中淘汰即将过期的数据“volatile-random”:从已设置过期时间的数据集合中随机淘汰数据“allkey

24、s-lru”:使用LRU算法从所有数据集合中淘汰数据“allkeys-random”:从数据集合中任意淘汰数据“no-enviction”:禁止淘汰数据火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去内存管理优化内存碎片率mem_fragmentation_ratio由操系统分配的内存used_memory_rss除以Redis分配的内存used_memory得出内存碎片是由操作系统低效的分配/回收物理内存导致的内存碎片率稍大于1是合理的,这个值表示内存碎片率比较低,也说明redis没有发生内存交换内存碎片率超过1.5,说明Redis

25、消耗了实际需要物理内存的150%,其中50%是内存碎片内存碎片率低于1,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去内存管理优化内存碎片率优化重启Redis服务器内存碎片率超过1.5,重启Redis可让额外产生的内存碎片失效并作为新内存使用限制内存交换内存碎片率低于1,应增加可用物理内存或减少Redis实例内存占用修改内存分配器Redis支持glibc、jemalloc和tcmalloc等几种不同的内存分配器,每个分配器在内存分配和碎片上都有不同的实现修改默认内存分配器

26、,需要完全理解这几种内存分配器的差异,也需重新编译Redis,不建议普通管理员修改火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去内存管理优化优化总结根据业务需要选择合适的数据类型为不同的应用场景设置相应的紧凑存储参数若业务场景不需要数据持久化,关闭持久化方式用以提高处理性能及内存使用率如果需要使用持久化,根据是否可以容忍重启丢失部分数据在快照方式与语句追加方式之间选择其一,不要使用虚拟内存或磁盘存储方式不要让Redis所在机器物理内存使用超过实际内存总量的60%火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的

27、衣服或裹上湿毛毯、湿被褥勇敢地冲出去操作系统优化内存分配控制内核参数vm.overcommit_memoryRedis建议把这个值设置为1,是为了让fork能够在低内存下也执行成功swappiness参数决定操作系统使用swap的倾向程度取值范围是0100,swappiness的值越大,说明操作系统可能使用swap的概率越高,swappiness值越低,表示操作系统更加倾向于使用物理内存设置方法:echovm.swappiness=bestvalue/etc/sysctl.conf火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去操作系

28、统优化TransparentHugePages支持大内存页(2MB)分配,默认开启,Redis建议禁用,禁用方法:echonever/sys/kernel/mm/transparent_hugepage/enabledOOMkillerOOMkiller会在可用内存不足时选择性的杀掉用户进程对于Redis服务器来说,可以将所有Redis的oom_adj设置为最低值或者稍小的值,降低被OOMkiller杀掉的概率火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去操作系统优化NTP时间同步保证Redis集群时间同步,避免因时间不一致导致的各

29、种问题,例如故障转移TCPbacklogRedis默认的tcp-backlog为511,ubuntu操作系统默认128,需修改系统值:echo511/proc/sys/net/core/somaxconn火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去读写分离机制Redis主从复制高可用集群方案可以实现一主多从的多节点架构主节点接收所有写请求,并将数据同步给多个从节点可以让从节点提供对实时性要求不高的读请求服务,以减小主节点压力尤其针对使用长耗时命令的统计类任务,应指定在从节点上执行火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要

30、当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去读写分离机制优化建议Master最好不要做任何持久化工作如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内尽量避免在压力较大的主库上增加从库主从复制不要用图状结构,用单向链表结构更稳定火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去Redis集群集群分片的必要性:Redis中存储的数据量大,一台主机的物理内存已经无法容纳Redis的写请求并发量大,一个Redis实例无法承载Redis

31、集群能力:能够自动将数据分散在多个节点上当访问的key不在当前分片上时,能够自动将请求转发至正确的分片当集群中部分节点失效时仍能提供服务火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去性能测试Redis-benchmark官方自带Redis性能测试工具,可以有效的测试Redis服务的性能测试案例:测试redis服务器100个并发连接,100000个请求的性能./redis-benchmark-h192.168.101.201-p6379-c100-n100000测试指定操作命令的性能./redis-benchmark-tset,lpush-n100000-q火灾袭来时要迅速疏散逃生,不可蜂拥而出或留恋财物,要当机立断,披上浸湿的衣服或裹上湿毛毯、湿被褥勇敢地冲出去谢谢结束

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁