• [问题求助] FunctionGraph的Sandbox本地中函数如何访问Redis?
    在Sandbox中函数如何访问Redis?是不是不能访问本地启动的Redis服务?
  • [调优工具] 【Hyper Tuner 调优实践 24】基于系统性能调优工具的KVM虚拟机场景的Redis仿存统计分析调优实践
    1      调优概述鲲鹏性能分析工具是一款针对鲲鹏平台的性能调优工具,包含系统性能分析、Java性能分析和诊断调试分析三大功能。本调优实践使用的是系统性能分析,针对在虚拟机上部署的Redis性能不高问题,通过执行访存分析任务,找到性能瓶颈和问题点,并根据分析结果进行优化,从而实现Redis数据库性能的提高。2      组网环境表2-1服务器类型KVM虚拟机(基于TaiShan 200服务器(型号2280)部署)配置信息4U8G100GOSCentOS 7.6(内核:4.14.0-115.el7a.0.1.aarch64)应用Redis 5.0性能测试工具redis-benchmark(Redis自带工具)说明: 本实践环境配置信息只用作举例,在其他环境上相关操作类似。3      前提条件  服务器和操作系统正常运行。  目标环境(服务器)上3.T10版本工具已经安装完成,并正常运行。  目标环境(服务器)上已安装好数据库和性能测试工具。4      调优思路  启动Redis数据库服务,使用redis-benchmark工具对数据库进行加压测试。检查压测结果,发现性能指标不是很高。  重新运行压测,同时使用Hyper Tuner工具的访存分析,以整个系统作为采集分析对象创建任务,采样类型全部勾选,根据分析任务分析结果进行分析,根据已有的调优经验或手段进行调优。  重新运行压测工具,检查性能是否得到提升。5      调优过程5.1      执行压测  1.启动Redis数据库服务。        2.使用自带的压测工具在本地对数据库进行压力测试。压测参考命令如下图所示(没有指定特定的压测项,会对所有项进行压测),指定-c 50个并发,-n 10万个请求,-q 只打印最后结果。      3. 检查压测结果通过对压测结果的数据进行分析,发现性能并不是很高,没有达到预期的结果。根据Redis的特点是基于内存的数据库,使用系统性能分析工具的访存分析能力尝试对数据库性能进行分析,找出性能问题点。表5-1类型RPS(requests per second)PING_INLINE47915.67PING_BULK53022.27SET67069.08GET60606.06INCR62073.25LPUSH72463.77RPUSH69300.07LPOP68493.15RPOP70126.23SADD67294.75HSET71633.23SPOP61236.99LPUSH (needed to benchmark LRANGE)72992.70LRANGE_100 (first 100 elements)29859.66LRANGE_300 (first 300 elements)14432.10LRANGE_500 (first 450 elements)10914.65LRANGE_600 (first 600 elements)8775.78MSET (10 keys)72046.11 5.2     执行访存分析1.在后台使用相同的压测参数执行压测,同时在性能分析工具上创建访存分析任务,配置参数如下图所示,利用访存统计分析,检查系统缓存访问和DDR访问情况。 2.任务执行完成后检查任务结果。**在“总览”界面通过查看Core Cache Miss平均值,发现相关指标的值都比较高;而iCache Bandwidth和dCache Bandwidth平均值不是很高,与理论带宽有一定差距。**在“访存访问”页面,可以看到L1D和L2D的带宽也不是很高,对应的L1D命中率在0.98,L2D的命中率在0.82左右。**在“DDR访问”页面可以看到,DDR访问中存在较多的跨DIE访问,相对于本地访问次数的占比超过了50%。总览结果页面:访存访问结果页面:DDR访问结果页面:  3.通过以上访存分析结果,再根据当前服务器类型使用的是虚拟机。分析可能原因:部署的虚拟机的方式,在默认情况下不同虚拟机的vCPU可能运行在相同物理CPU核上,会造成CPU资源竞争,同一个虚拟机在不同时间也可能会运行在不同的物理核上,会造成cache miss的情况。另外也可能出现虚拟机内存访问出现跨die和跨片情况。针对以上情况,可进行的调优手段是,对虚拟机的vCPU进行绑核,绑到同一个NUMA节点上,同时可以将虚拟机内存访问绑到对应的NUMA节点上,可避免出现内存跨die和跨片情况。 5.3       性能优化1、检查虚拟机的配置文件。发现使用的是默认配置,配置文件里的确没有绑核和绑定内存访问的相关配置项。2.手动进行配置项修改,在宿主机上修改虚拟配置文件(命令:virsh edit 虚拟机domian)。在配置文件里配置<numatune>和<cputune>选项,配置项参考如下:  <cputune>    <vcpupin vcpu='0' cpuset='50'/>    <vcpupin vcpu='1' cpuset='51'/>    <vcpupin vcpu='2' cpuset='52'/>    <vcpupin vcpu='3' cpuset='53'/>    <emulatorpin cpuset='50-53'/>  </cputune>  <numatune>    <memory mode='strict' nodeset='1'/>  </numatune>将虚拟机的vCPU核绑到对应的物理机的50-53核上,这些物理核所在的NUMA节点为node1,因此将虚拟机的内存访问同时绑到node1这个节点上,模式采用“strict”严格从指定node上申请内存。修改后保存并退出。3、关掉虚拟机(命令:virsh shutdown 虚拟机domian),再重启虚拟机(命令:virsh start 虚拟机domian)。5.4     再次执行访存分析和压测 1.执行访存分析(同时运行压测),查看结果。总览结果界面:Core Cache Miss平均值,发现相关指标的值相比调优前有所降低;而iCache Bandwidth和dCache Bandwidth平均值有所提高。缓存访问结果页面:可以看到L1D带宽有所提高,对应的L1D命中率在0.98,L2D带宽和命中率略有下降,说明CPU cache使用集中在L1上。DDR访问结果页面:DDR访问中,跨片访问次数极低,读DDR跨DIE访问相对本地访问占比在15%,写DDR跨DIE访问也极低。  2.重新单独执行压测。表5-2类型RPS(requests per second)PING_INLINE65104.17PING_BULK62539.09SET71479.62GET65659.88INCR72046.11LPUSH77279.75RPUSH74906.37LPOP75872.54RPOP71839.09SADD71275.84HSET75872.54SPOP66800.27LPUSH (needed to benchmark LRANGE)77101.00LRANGE_100 (first 100 elements)30959.75LRANGE_300 (first 300 elements)14619.88LRANGE_500 (first 450 elements)11106.18LRANGE_600 (first 600 elements)8823.79MSET (10 keys)72833.21    通过测试的结果可以看到性能数据有所提升。  6. 实践结论1.性能结果对比表6-1类型RPS(requests per second)性能对比调优前调优后PING_INLINE47915.6765104.17+35.9%PING_BULK53022.2762539.09+17.9%SET67069.0871479.62+6.6%GET60606.0665659.88+8.3%INCR62073.2572046.11+16.1%LPUSH72463.7777279.75+6.6%RPUSH69300.0774906.37+8.1%LPOP68493.1575872.5410.1%RPOP70126.2371839.092.4%SADD67294.7571275.84+5.9%HSET71633.2375872.54+5.9%SPOP61236.9966800.27+9.1%LPUSH (needed to benchmark LRANGE)72992.7077101.00+5.6%LRANGE_100 (first 100 elements)29859.6630959.75+3.7%LRANGE_300 (first 300 elements)14432.1014619.88+1.3%LRANGE_500 (first 450 elements)10914.6511106.18+1.8%LRANGE_600 (first 600 elements)8775.788823.79+0.5%MSET (10 keys)72046.1172833.21+1.1%通过调优前后性能数据的对比,每一个压测指标项的性能都得到了不同程度的提升。整体性能的提升达到了+8.16%,说明优化的效果是比较明显的。   2.总结本次调试实践,主要是针对在虚拟机平台上利用Hyper Tuner系统性能分析工具的访存分析能力对Redis数据库性能不高问题的分析。根据分析结果发现的问题进行分析,并利用已有的相关调优经验实施调优,最终使性能得到了较大的提升。
  • [问题求助] 【智慧园区appcube]- 默认的redis连接器不可用
    使用应用魔方的默认redis连接器,提示报错,该redis为系统自带的【截图信息】
  • [问题求助] 【沃土】【redis连接器】redis连接器SmartCampus__DevRedis连接失败
    【功能模块】应用管理》连接器》redis连接器【操作步骤&问题现象】1、应用管理》连接器》redis连接器,SmartCampus__DevRedis连接测试失败,医疗标准ABC环境,需要华为方提供下redis地址、端口、秘钥 【截图信息】【日志信息】(可选,上传日志内容或者附件)e-mail:dubin@chinasofti.comtel:18182698675
  • [其他] 转载分析内部运行机制,教你解决Redis性能问题
    Redis是一种键值数据库,有着时延低、性能好、数据结构丰富的特点,常用作缓存、排行榜、计数器、 消息队列等,是电商秒杀、聊天系统等业务场景中的“熟客”。作为一个“缓存中间商”,Redis的性能问题至关重要,一旦发生操作延迟问题,很容易引起连锁反应。所以本文聚焦Redis的性能分析,从Redis的基本概念出发,了解Redis是什么,它的运行机制,思考Redis可以通过哪些机制来提高性能,当性能瓶颈发生的时候,我们又能做出哪些优化策略,最终确保业务系统的稳定运行。读懂Redis:缓存神器原来是这样工作的一个网站总有大量的数据是用户共享的,如果每个用户都去数据库查询,效率就太低了。所以有了新的解决方案:将用户共享数据缓存到服务器的内存中。举个例子,应用程序们从MySQL查询到的数据,会到Redis这里登记,后面再需要用的时候,就先查找Redis的缓存,无需返回到MySQL查找。一套流程下来,为MySQL减轻了不小的负担,网络服务的性能显著提升。Redis堪称数据库届的万金油,哪里需要往哪里搬,这也得益于它有着丰富的数据结构,以及强大的读写性能。以数据结构为例,Redis和其他结构化存储的重要区别便是,它不仅支持字符串,还支持不同类型的抽象数据结构,如列表、映射、集、排序集、HyperLogLogs、位图、流和空间索引等。那么Redis是如何做到如此“万能”的,它支持的这些数据结构又是如何从底层实现呢?《三次给你聊清楚Redis》之Redis是个啥 就从非关系型数据库谈起,详细聊了聊这个问题,就像最简单的字符串,Redis并未沿袭传统c语言的惯例,而是单独构建了一种简单的动态字符串抽象类型,并充分利用SDS实现。当然,如果你想进一步了解Redis系统的设计理念,比如它通过什么机制将数据缓存到内存中,开发大系统必备技术之Redis技术学习与研究或许会给你一些启发,作者谈到了Redis的历史、流行度、设计思想,并通过支持Redis的Java客户端Jedis ,用详尽的代码案例一步步演示了它支持的数据类型使用方法,它的事务特性、集群等等,更为具象地了解Redis的特点。当我们对Redis的基本原理了然于胸后,再针对业务场景进行优化时,也能更合理地使用各种Redis命令。Redis性能:祸福相依的内部运行机制Redis的最大特点是使用内存来存储数据,当内存超过物理内存的限制后,内存数据会和磁盘产生频繁的交换,最终导致Redis性能急剧下降。所以在生产环境中我们通过配置参数maxmemoey来限制使用的内存大小。 在有趣的Redis:缓存被我写满了,该怎么办? 中,作者详细解释了2个常见的缓存淘汰算法LRU算法和LFU算法,如何删除那些没用的数据。另一方面,Redis为了把内存中的数据持久到磁盘上,也提供了完善的持久化机制,主要包括2种:RDB:产生一个数据快照文件AOF:实时追加命令的日志文件但是如果配置不合理,持久化会占用过多内存从而影响性能。举个例子,如果AOF的刷盘时机设置为每次写入都刷盘,由于每次写命令都需要写入文件并刷到磁盘中才会返回,当写入量很大时,会增加磁盘IO的负担,大大降低Redis的写入性能。Redis 持久化是如何做的?一文聊聊 RDB和AOF对比分析 谈到了这两种持久化机制对Redis性能的影响,建议大家针对不同的业务场景选择合适的持久化方式。在讨论Redis性能问题的时候,不得不提的一点是它的单线程结构,这里的单线程指的是执行命令 ,比如一条命令从客户端到达服务端不会立刻被执行,而是会进入一个队列中等待,每次只会有一条指令被选中执行。【Redis破障之路】:Redis单线程架构 详细分析了单线程模型的Redis为什么性能如此之高,能达到每秒万级别的处理能力,简单透露两点:纯内存访问、I/O多路复用技术,具体可以阅读文章。而Redis的单线程架构,也意味着网络问题会对它的性能产生一定的影响。另外,当业务规模扩大,单个Redis服务无法承载的时候,我们常常会用分布式架构来提高Redis的性能,Redis主从复制以及哨兵的原理解读 和 Redis Sentinel 源码:Redis的高可用模型分析 都讨论了主从模式下的关键功能:哨兵,通过对其源码的理解,详细说明了哨兵的代码实现方式,并学会使用哨兵功能解决主节点的写能力、存储能力限制等等。除此之外,诸如数据结构的复杂度、网络带宽、操作系统以及硬件本身都会对Redis的性能产生影响,它的性能问题几乎涵盖了 CPU、内存、网络、磁盘的方方面面,再此不一一赘述。综上,我们分析了影响Redis性能的一些关键内部机制,比如它的缓存淘汰算法;它的持久化会占用过多内存从而影响性能;它的单线程架构等。通过了解Redis的这些内部实现原理,也能进一步帮助大家排查它的性能问题。Redis调优:宕机怎么办?收下这几颗灵丹妙药下面,我们将给出一些应对Redis性能问题的解决方案。以常见的缓存问题为例,通常情况下,Redis缓存层由于某种原因宕机后,所有的请求会涌向存储层,短时间内的高并发请求可能会导致存储层挂机,称之为“Redis雪崩”。Redis缓存异常应对方案分析 有针对性的总结了Redis发生缓存穿透、雪崩、击穿情况时,能够有效应对的解决方案,比如不要给访问频繁的热点数据设置过期时间,从而解决Redis实例没有起到缓存层作用的问题。大key也是影响Redis性能的关键因素,如果一个 key 写入的 value 非常大,那么 Redis 在分配内存时就会比较耗时。同样的,当删除这个 key 时,释放内存也会比较耗时,这种类型的 key 我们一般称之为 大key。 在 分布式缓存数据库Redis大KEY问题定位及优化建议 中,作者就针对数据库报错OOM来一步步分析大key的问题,先是查看Redis集群内存监控指标,确认内存异常分片,然后通过在线&离线工具分析,结果显示大key导致数据大小分布不均。对此作者给出了两个方案:短期是删除查询到的key,长期是对大key进行拆分。另一个经常被诟病性能问题的是fork, fork是开源Redis的一个重要依赖,当 Redis 开启了后台 RDB 和 AOF rewrite 后,在执行时,它们都需要主进程创建出一个子进程进行数据的持久化,fork就是创建子进程的系统调用函数。在华为云GaussDB(for Redis)服务团队支撑某客户业务上云的过程中 ,就发现了由fork引发的时延抖动问题,文章一场由fork引发的超时,让我们重新探讨了Redis的抖动问题 还原了当时的场景,探究了fork对性能的影响,包括业务抖动、内存率利用率降低和实例容量受限。比如,在电商大促、热点事件等业务高峰时发生上述fork,会导致Redis阻塞,进而对业务造成雪崩的影响。团队通过修改日志、系统性排查整改代码中的 fork调用,最后在新版本GaussDB(for Redis)中解决了该问题,并清零了内部的fork使用,与原生Redis相比,彻底解决了fork的性能隐患。其实,考虑到业务场景越来越复杂,原生Redis出现性能瓶颈难以避免。这时候,最简单粗暴的解决方法就是使用商业版本的Redis,一劳永逸解决可能存在的性能问题。在 GaussDB(for Redis)与原生Redis集群的性能对比 中,就比较了华为云自研Redis和原生Redis集群在X86架构下的性能测试报告,结果表明GaussDB(for Redis)在性能、抗写和存储成本上的优势明显。从相识到相惜:Redis与计算存储分离四部曲 进一步从技术角度拆解分析了GaussDB(for Redis)如何在存算分离的架构下,实现强一致、秒扩容、超可用、低成本。以强一致为例,Redis遇到流量压力进行主从切换时很容易发生数据不同步问题,GaussDB ( for Redis)就在存储层(DFV层)去进行强一致的数据同步,而非计算层,这样就避免了任何中间态下的数据的不一致,再也不用担心宕机导致数据丢失。更多的技术细节揭秘,也可以阅读这组专题高斯Redis揭秘系列文章,更全面的认识GaussDB ( for Redis)。Redis的性能问题,涉及到的技术细节很多,本专题只是列出了一些较为典型的问题,希望读者能够通过上述提及的技术文章,对它有更深入的认识,学会从底层运行机制去思考Redis的性能调优。转自,【技术补给站】第10期:分析内部运行机制,教你解决Redis性能问题-云社区-华为云 (huaweicloud.com)
  • [openEuler] 在openEuler上安装PHP的imagick,redis扩展
    1、安装PHP在openEuler上是可以用yum install 安装PHP 以及php-fpm的,这里还需要安装php-devel,后面会用到yum install php php-fpm php-devel安装完成之后,我们查看当前php自带的扩展包php -m2、安装imagick扩展下载源码wget http://pecl.php.net/get/imagick-3.4.3.tgz解压安装tar -xzvf imagick-3.4.3.tgz cd imagick-3.4.3 phpize ./configure make && make install安装完成后,会打印出安装的路径,到路径下看一下,是否以及存在so文件更改php.ini加入so文件vi /etc/php.ini在末尾加入extension = imagick.so重启php,查看扩展包service php-fpm restart可以看到扩展包已经成功安装3、安装redis扩展安装redis扩展需要先安装json扩展,直接yum 安装即可 yum install php-json下载源码wget https://pecl.php.net/get/redis-5.0.0.tgz解压安装,与上面类似tar -xzvf redis-5.0.0.tgz cd redis-5.0.0 phpize ./configure make && make install安装完成后查看so文件是否存在更改php.ini加入so文件vi /etc/php.ini在末尾加入,这里要注意,一定要把json放在redis前面,否则会报错extension = json extension = redis.so重启php,查看扩展包service php-fpm restartok了!
  • [已解决问题归档] 【redis】【自动启动】redis部署后,如何设置服务器开机后redis自动启动
    【问题来源】【必填】 武汉农商银行    【问题简要】【必填】redis集群部署后启动成功,但是服务器重启后,redis服务没有自动启动。请问如何设置redis服务自启动 【问题类别】【必填】  【AICC解决方案版本】【必填】    AICC可选择版本:AICC 8.14.0    ICD: V300R008C22【期望解决时间】尽快【问题现象描述】【必填】【日志或错误截图】【可选】
  • [技术干货] Redis 常见的性能问题
    主服务器写内存快照,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以主服务器最好不要写内存快照。Redis 主从复制的性能问题,为了主从复制的速度和连接的稳定性,主从库最好在同一个局域网内。
  • [技术干货] Redis 如何做内存优化
    尽量使用 Redis 的散列表,把相关的信息放到散列表里面存储,而不是把每个字段单独存储,这样可以有效的减少内存使用。比如将 Web 系统的用户对象,应该放到散列表里面再整体存储到 Redis,而不是把用户的姓名、年龄、密码、邮箱等字段分别设置 key 进行存储。
  • [技术干货] Redis 分布式锁有什么缺陷
    Redis 分布式锁不能解决超时的问题,分布式锁有一个超时时间,程序的执行如果超出了锁的超时时间就会出现问题。
  • [技术干货] Redis 怎么实现分布式锁
    Redis 分布式锁其实就是在系统里面占一个“坑”,其他程序也要占“坑”的时候,占用成功了就可以继续执行,失败了就只能放弃或稍后重试。占坑一般使用 setnx(set if not exists)指令,只允许被一个程序占有,使用完调用 del 释放锁。
  • [技术干货] Redis 持久化
    Redis 的持久化有两种方式,或者说有两种策略:RDB(Redis Database):指定的时间间隔能对你的数据进行快照存储。AOF(Append Only File):每一个收到的写命令都通过write函数追加到文件中。
  • [技术干货] jedis 和 Redisson
    jedis:提供了比较全面的 Redis 命令的支持。Redisson:实现了分布式和可扩展的 Java 数据结构,与 jedis 相比 Redisson 的功能相对简单,不支持排序、事务、管道、分区等 Redis 特性。
  • [技术干货] Redis 支持的 Java 客户端
    支持的 Java 客户端有 Redisson、jedis、lettuce 等。
  • [技术干货] Redis 支持的数据类型有哪些
    Redis 支持的数据类型:string(字符串)、list(列表)、hash(字典)、set(集合)、zset(有序集合)。
总条数:553 到第 页
上滑加载中