-
存储方式不同:memcache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小;Redis 有部份存在硬盘上,这样能保证数据的持久性。数据支持类型:memcache 对数据类型支持相对简单;Redis 有复杂的数据类型。使用底层模型不同:它们之间底层实现方式,以及与客户端之间通信的应用协议不一样,Redis 自己构建了 vm 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。value 值大小不同:Redis 最大可以达到 512mb;memcache 只有 1mb。
-
redis-server:服务器端工具redis-cli:客户端工具redis-benchmark:redis性能压力测试工具redis-check-dump(rdb格式) & redis-check-aof(aof格式):检测持久化存储RDB/AOF的文件格式是否错误,以及发现错误进行修复redis-shutdown:用于关闭redisredis-sentinel:用于实现redis主从切换的工具
-
我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。>过期策略通常有以下三种:定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果>Redis中同时使用了惰性过期和定期过期两种过期策略。
-
1. Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快。 2. 再说一下IO,Redis使用的是非阻塞IO,IO多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争。 3. Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。 4. 另外,数据结构也帮了不少忙,Redis全程使用hash结构,读取速度快,还有一些特殊的数据结构,对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。 5. 还有一点,Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。
-
5月20-22日,以“数字转型、架构重塑”为主题的第十三届中国系统架构师大会(SACC2021)在云端进行网络直播。华为云NoSQL数据库架构师余汶龙受邀参加并发表了重要演讲,分享了GaussDB(for Redis)的存算分离架构设计理念以及构筑的产品核心竞争力,以创新技术构建业务敏捷性,驱动企业数字化转型。 Redis作为业界最受欢迎的NoSQL数据库之一,在性能、数据结构多样性等方面具备优势。但随着企业数字化进程加快,开源Redis在AOF膨胀、快照性能、主从脱节、高成本、低容量等方面的劣势愈发明显,这也进一步催生了Redis生态的技术革新。 GaussDB(for Redis)是华为云数据库团队自主研发的兼容Redis协议的云原生数据库,该数据库采用计算存储分离架构,突破开源Redis的内存限制,可轻松扩展至PB级存储。 在GaussDB(for Redis)计算存储分离架构模型下,计算层提供了热数据缓存,存储层负责将全量数据落盘。内部通过RDMA高速网络互连,通过算法预测用户访问规律,实现数据的自动冷热交换,最终达到极致的性能提升。 该架构底层核心部分是基于华为内部强大且广泛使用的自研分布式存储系统DFV,实现了一套Share Everything的云原生架构,充分发挥了云原生的弹性伸缩、资源共享的优势,完美避开了开源Redis的主从堆积、主从不一致、fork抖动、内存利用率只有50%、大key阻塞、gossip集群管理等问题。 基于该架构,GaussDB(for Redis)构筑了强一致、高可用、冷热分离、弹性伸缩、高性能等5大极具竞争力的能力优势。强一致。数据复制是存储的事情,因此专业的事情交给专业的团队来做。通过分布式存储DFV,GaussDB(for Redis)轻松实现了3副本强一致,并可轻松支持6副本,为业界首创。在强一致架构下,用户再也不用担心开源Redis的主从堆积带来的丢数据、不一致、OOM等极端问题,更不用担心业务出错,比如计数器、限流器、访问统计、hash字段等不一致。高可用。开源Redis的单分片和集群,其数据复制都采用主从架构,导致N个节点的集群,如果同时挂掉一对主从(即2个节点),整个集群就不可用。而GaussDB(for Redis)采用存算分离之后,每个计算节点都可以看到并共享所有数据。因此对于N个节点的实例,最多可以容忍N-1个节点异常,真正做到了超高可用性。冷热分离。为充分发挥数据价值,GaussDB(for Redis)实行冷热数据分离,热数据放在内存,冷数据放在磁盘,同时自动LRU淘汰冷数据,实时预测算法加载热数据。这样既使得冷热数据一致性强,交互逻辑又简单,对业务友好。弹性伸缩。数据量膨胀到一定规模后,扩容往往被认为是个高危且困难的操作。GaussDB(for Redis)基于云原生架构,将计算资源和存储资源的扩容解耦。计算层扩容,无需任何数据搬迁,只需修改路由映射,即可秒级完成。存储层是个共建的超级数据湖,其容量巨大,拥有极佳的动态扩容能力。此外,基于64MB细粒度数据分区,整个扩容过程,对上层数据库业务几乎无感。因此GaussDB(for Redis)可以轻松支撑业务后期的大规模膨胀,并且真正做到计算/存储分层的按需扩容和购买。高性能。受益于多点读写,并且不存在备节点浪费资源,GaussDB(for Redis)在性能比拼中,吞吐和时延能力领先于其它云厂商2-3倍。同时受益于多线程架构、高压缩比、高内存利用率等优势,GaussDB(for Redis)对比相同内存的开源Redis,吞吐和时延表现更为优秀。 存算分离的分布式架构是大势所趋,目前已经有越来越多的企业选择将核心业务上云到该架构,而且基于该架构构建的产品核心能力,又极大促进了企业业务的发展,加速企业数字化转型升级。华为云期待未来能有更多企业客户,基于GaussDB(for Redis)的核心能力,共促产业发展,共赢时代新机遇!
-
【问题来源】:长沙银行【问题简要】: redis按照文档部署后,启动集群失败【问题类别】: REDIS【AICC解决方案版本】 AICC可选择版本:AICC 8.14.0【期望解决时间】5月15日【问题现象描述】:
-
NoSQL介绍基本概述NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。特点: 不遵循SQL标准。(有自己的一系列命令操作) 不支持ACID(没有事务地特性不代表没有事务) 比SQL性能高很多Redis介绍 使用场景配合关系型数据库做高速缓存比如:高频率访问的数据,降低数据库地IO,分布式架构中,做session地共享多样地数据结构存储持久化数据 安装Redis官方网站 Redis中文官方网站http://redis.io http://redis.cn/说明:redis没有官方提供windows地安装包,但是Windows自个提供了这个安装包。 准备工作:下载安装最新版的gcc编译器 yum install centos-release-scl scl-utils-build yum install -y devtoolset-8-toolchain scl enable devtoolset-8 bash gcc --version # 测试安装环境 Linux命令配置 tar -zxvf redis-6.2.1.tar.gz # 解压这个安装包 # 然后进入这个解压后的目录 cd redis-6.2.1 # 在redis-6.2.1目录下再次执行make命令(只是编译好) # 如果没有准备好C语言编译环境,make 会报错—Jemalloc/jemalloc.h:没有那个文件 # 解决方案:运行make distclean,在redis-6.2.1目录下再次执行make命令,跳过make test 继续执行: make install 1 2 3 4 5 6 然后就是启动Redis相关知识 redis中默认16个数据库,类似数组下标从0开始,初始默认使用0号库。使用命令 select 来切换数据库。如: select 8 统一密码管理,所有库同样密码。 dbsize查看当前数据库的key的数量 flushdb清空当前库 flushall通杀全部库 Redis是单线程+多路IO复用技术正经说法:多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)在这里插入图片描述通俗例子:假设有三个人去车站买票,买不同的地方的,这个时候就需要三个窗口进行,并且如果前面有人你就不能走,还需要排队等着,这个时候如果叫黄牛买票呢?这三个人就只需要一个电话打给这个黄牛,然后他们有啥事就走了,压根不用等,等这个黄牛买到票了会打电话通知他们,这个时候他们再来取票就行了。Redis数据类型命令手册:http://www.redis.cn/commands.html菜鸟教程:https://www.runoob.com/redis在先命令测试:https://try.redis.io/(只包含常用地数据结构操作)
-
【问题简要】 长沙银行AICC项目【问题类别】【必填】 Redis(当初采用的8.12.0版本包下载的)【AICC解决方案版本】【必填】 AICC 8.14.0【期望解决时间】【选填】 0.5个工作日内【问题现象描述】【必填】 帮忙确认下AICC搭建整个平台,redis相关参数值设置标准明确下! 下面是我通过ideploy工具安装的redis集群,根据redis.log日志发现应该是工具装完有些参数设置太小了。
-
高斯Redis揭秘系列文章第十二期:2021最新架构分享链接第十一期:迁移系列下链接第十期:迁移系列上链接第九期:与HBase的对比链接第八期:用高斯Redis进行计数链接第七期:高斯Redis与强一致链接第六期:Feed流场景中的应用链接第五期:高斯 Redis 在IM场景中的应用链接第四期:GEO场景应用链接第三期:探讨Redis fork带来的性能抖动链接第二期:stream场景应用链接第一期:Redis与存算分离,讲架构设计链接第三方测评文章DBA测试:高斯Redis与自建Redis的成本对比链接第三方性能测试评价链接高斯Redis与开源Redis性能对比链接性能数据高斯Redis多种规格性能白皮书链接
-
加入db选择后的redis连接池配置代码public class RedisPoolConfigure { //Redis服务器IP private String ADDR ; //Redis的端口号 private int PORT ; //可用连接实例的最大数目 private int MAX_ACTIVE ; //pool中的idle jedis实例数 private int MAX_IDLE ; //等待可用连接的最大时间,单位毫秒 private int MAX_WAIT ; //超时时间,单位毫秒 private int TIME_OUT ; //设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数) private String EVICTION_POLICY_CLASS_NAME ; //连接耗尽时是否阻塞, false报异常,ture阻塞直到超时 private boolean BLOCK_WHEN_EXHAUSTED; //是否启用pool的jmx管理功能, 默认true private boolean JMX_ENABLED; //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的; private boolean TEST_ON_BORROW ; //服务器密码 private String REDIS_PASS; //redis选择数据库DB private int REDIS_DB; private String LUASHA; private Map<String, String> configure = null; /** * 根据配置文件,将RedisPool连接配置初始化 */ public RedisPoolConfigure(){ try { configure = new ConfigureReader().readProperties("redis.properties"); } catch (IOException e) { e.printStackTrace(); } this.ADDR = configure.get("REDIS.ADDR"); this.LUASHA = configure.get("REDIS.LUA_HASH"); this.EVICTION_POLICY_CLASS_NAME = configure.get("REDIS.EVICTION_POLICY_CLASS_NAME"); this.BLOCK_WHEN_EXHAUSTED = Boolean.parseBoolean(configure.get("REDIS.BLOCK_WHEN_EXHAUSTED")); this.JMX_ENABLED = Boolean.parseBoolean(configure.get("REDIS.JMX_ENABLED")); this.TEST_ON_BORROW = Boolean.parseBoolean(configure.get("REDIS.TEST_ON_BORROW")); this.REDIS_PASS=configure.get("REDIS.PASS"); if(typeCheck()){ this.PORT = new Integer(configure.get("REDIS.PORT")); this.MAX_ACTIVE = new Integer(configure.get("REDIS.MAX_ACTIVE")); this.MAX_IDLE = new Integer(configure.get("REDIS.MAX_IDLE")); this.MAX_WAIT = new Integer(configure.get("REDIS.MAX_WAIT")); this.REDIS_DB=new Integer(configure.get("REDIS.DB")); }else{ System.out.println("error"); } } /** * 辅助工具,检查map中数据的类型 * @return */ private boolean typeCheck() { if (isNumeric(configure.get("REDIS.PORT")) && isNumeric(configure.get("REDIS.MAX_ACTIVE")) && isNumeric(configure.get("REDIS.MAX_IDLE")) && isNumeric(configure.get("REDIS.MAX_WAIT")) && isNumeric(configure.get("REDIS.DB"))) { return true; } return false; } public String getADDR() { return ADDR; } public int getPORT() { return PORT; } public int getMAX_ACTIVE() { return MAX_ACTIVE; } public int getMAX_IDLE() { return MAX_IDLE; } public int getMAX_WAIT() { return MAX_WAIT; } public int getTIME_OUT() { return TIME_OUT; } public boolean isTEST_ON_BORROW() { return TEST_ON_BORROW; } public String getEVICTION_POLICY_CLASS_NAME() { return EVICTION_POLICY_CLASS_NAME; } public boolean isBLOCK_WHEN_EXHAUSTED() { return BLOCK_WHEN_EXHAUSTED; } public boolean isJMX_ENABLED() { return JMX_ENABLED; } /** * 判断传入的数据是否为纯数字构成 * @param str * @return */ public boolean isNumeric(String str) { if(str==null || "".equals(str)){ return false; } for (int i = 0; i < str.length(); i++) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true; } public String getLUASHA() { return LUASHA; } public void setLUASHA(String lUASHA) { LUASHA = lUASHA; } public String getREDIS_PASS() { return REDIS_PASS; } public void setREDIS_PASS(String rEDIS_PASS) { REDIS_PASS = rEDIS_PASS; } public int getREDIS_DB() { return REDIS_DB; } public void setREDIS_DB(int rEDIS_DB) { REDIS_DB = rEDIS_DB; } }redis连接池初始化、获取Jedis实例和释放Jedis实例/** * jedis的连接池,返回未封装的jedis对象 * 一般只有在RedisCache类提供的操作粒度不足使用时才使用此类提供的原生jedis方法 * @author Hector * */ public class RedisPool { private static JedisPool jedisPool = null; /** * 初始化Redis连接池 */ static { try { RedisPoolConfigure configure = new RedisPoolConfigure(); JedisPoolConfig config = new JedisPoolConfig(); config.setBlockWhenExhausted(configure.isBLOCK_WHEN_EXHAUSTED()); config.setEvictionPolicyClassName(configure.getEVICTION_POLICY_CLASS_NAME()); config.setJmxEnabled(configure.isJMX_ENABLED()); config.setMaxIdle(configure.getMAX_IDLE()); config.setMaxTotal(configure.getMAX_ACTIVE()); config.setMaxWaitMillis(configure.getMAX_WAIT()); config.setTestOnBorrow(configure.isTEST_ON_BORROW()); jedisPool = new JedisPool(config, configure.getADDR(), configure.getPORT(), configure.getTIME_OUT(),configure.getREDIS_PASS(),configure.getREDIS_DB()); } catch (Exception e) { e.printStackTrace(); } } /** * 获取Jedis实例 * @return */ public synchronized static Jedis getJedis() { Jedis resource=null; try { if (jedisPool != null) { resource = jedisPool.getResource(); return resource; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } /** * 释放jedis资源 * @param jedis */ public static void close(final Jedis jedis) { if (jedis != null) { jedis.close(); } } public static JedisPool getJedisPool() { return jedisPool; } }
-
【功能模块】集群安装redis服务【操作步骤&问题现象】1、安装redis服务的时候初始化实例个数比服务器的CPU核数多,导致安装失败,请问如何修改redis安装时的初始化实例个数2、集群版本为 FusionInsight 8.0.2【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】【php插件】缺少以下插件php-imapphp-pearphp-pecl-redisphp-pecl-igbinary【操作步骤&问题现象】1、dnf 官方源安装:[root@hw-kp ~]# dnf install --allowerasing --nobest --skip-broken php-embedded php-ldap php-pdo php-process php-cli php-devel php-fpm php-imap php-mbstring php-opcache php-pear php-pecl-redis php-snmp php-xml php-gd php-common php-mysqlnd php-pecl-igbinary php-soap -yLast metadata expiration check: 0:09:10 ago on Tue 13 Apr 2021 04:34:37 PM CST.Package php-embedded-7.2.10-3.oe1.aarch64 is already installed.Package php-ldap-7.2.10-3.oe1.aarch64 is already installed.Package php-pdo-7.2.10-3.oe1.aarch64 is already installed.Package php-process-7.2.10-3.oe1.aarch64 is already installed.Package php-cli-7.2.10-3.oe1.aarch64 is already installed.Package php-devel-7.2.10-3.oe1.aarch64 is already installed.Package php-fpm-7.2.10-3.oe1.aarch64 is already installed.No match for argument: php-imapPackage php-mbstring-7.2.10-3.oe1.aarch64 is already installed.Package php-opcache-7.2.10-3.oe1.aarch64 is already installed.No match for argument: php-pearNo match for argument: php-pecl-redisPackage php-snmp-7.2.10-3.oe1.aarch64 is already installed.Package php-xml-7.2.10-3.oe1.aarch64 is already installed.Package php-gd-7.2.10-3.oe1.aarch64 is already installed.Package php-common-7.2.10-3.oe1.aarch64 is already installed.Package php-mysqlnd-7.2.10-3.oe1.aarch64 is already installed.No match for argument: php-pecl-igbinaryPackage php-soap-7.2.10-3.oe1.aarch64 is already installed.Dependencies resolved.Nothing to do.Complete!2、以下为官方 yum 源:[root@hw-kp ~]# cat /etc/yum.repos.d/openEuler_aarch64.repo#generic-repos is licensed under the Mulan PSL v2.#You can use this software according to the terms and conditions of the Mulan PSL v2.#You may obtain a copy of Mulan PSL v2 at:# http://license.coscl.org.cn/MulanPSL2#THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR#IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR#PURPOSE.#See the Mulan PSL v2 for more details.[OS]name=OSbaseurl=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/$basearch/enabled=1gpgcheck=1gpgkey=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler[everything]name=everythingbaseurl=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/$basearch/enabled=1gpgcheck=1gpgkey=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/$basearch/RPM-GPG-KEY-openEuler[EPOL]name=EPOLbaseurl=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/EPOL/$basearch/enabled=1gpgcheck=1gpgkey=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler[debuginfo]name=debuginfobaseurl=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/debuginfo/$basearch/enabled=1gpgcheck=1gpgkey=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/debuginfo/$basearch/RPM-GPG-KEY-openEuler[source]name=sourcebaseurl=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/enabled=1gpgcheck=1gpgkey=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/RPM-GPG-KEY-openEuler[update]name=updatebaseurl=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/update/$basearch/enabled=0gpgcheck=1gpgkey=http://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/$basearch/RPM-GPG-KEY-openEuler【截图信息】【日志信息】(可选,上传日志内容或者附件)
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签