作者文章

fwq

FWQ
服务器教程
Redisson分布式限流的实现原理解析
Redisson分布式限流的实现原理解析 收藏 “纵有疾风来,人生不言弃”,这句话送给正在学习数据库的朋友们,也希望在阅读本文《Redisson分布式限流的实现原理解析》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新数据库相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢! 正文 我们目前在工作中遇到一个性能问题,我们有个定时任务需要处理大量的数据,为了提升吞吐量,所以部署了很多台机器,但这个任务在运行前需要从别的服务那拉取大量的数据,随着数据量的增大,如果同时多台机器并发拉取数据,会对下游服务产生非常大的压力。之前已经增加了单机限流,但无法解决问题,因为这个数据任务运行中只有不到10%的时间拉取数据,如果单机限流限制太狠,虽然集群总的请求量控制住了,但任务吞吐量又降下来。如果限流阈值太高,多机并发的时候,还是有可能压垮下游。 所以目前唯一可行的解决方案就是分布式限流。 我目前是选择直接使用Redisson库中的RRateLimiter实现了分布式限流,关于Redission可能很多人都有所耳闻,它其实是在Redis能力上构建的开发库,除了支持Redis的基础操作外,还封装了布隆过滤器、分布式锁、限流器……等工具。今天要说的RRateLimiter及时其实现的限流器。接下来本文将详细介绍下RRateLimiter的具体使用方式、实现原理还有一些注意事项,最后简单谈谈我对分布式限流底层原理的理解。 RRateLimiter使用 RRateLimiter的使用方式异常的简单,参数也不多。只要创建出RedissonClient,就可以从client中获取到RRateLimiter对象,直接看代码示例。 RedissonClient redissonClient = Redisson.create(); RRateLimiter rateLimiter = redissonClient.getRateLimiter("xindoo.limiter"); rateLimiter.trySetRate(RateType.OVERALL, 100, 1, RateIntervalUnit.HOURS); rateLimiter.trySetRate就是设置限流参数,RateType有两种,OVERALL是全局限流 ,PER_CLIENT是单Client限流(可以认为就是单机限流),这里我们只讨论全局模式。而后面三个参数的作用就是设置在多长时间窗口内(rateInterval+IntervalUnit),许可总量不超过多少(rate),上面代码中我设置的值就是1小时内总许可数不超过100个。然后调用rateLimiter的tryAcquire()或者acquire()方法即可获取许可。 rateLimiter.acquire(1); // 申请1份许可,直到成功 boolean res…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis在PHP项目中的使用技巧
Redis在PHP项目中的使用技巧 “纵有疾风来,人生不言弃”,这句话送给正在学习数据库的朋友们,也希望在阅读本文《Redis在PHP项目中的使用技巧》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新数据库相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢! Redis在PHP项目中的使用技巧 Redis是一个开源的内存数据结构存储系统,可以用作数据库、缓存、消息中间件等多种用途。在PHP项目中,使用Redis可以提高系统的性能和效率。本文将分享一些在PHP项目中使用Redis的技巧,并提供相应的代码示例。 一、安装和配置Redis 安装Redis在Linux系统中,可以使用以下命令安装Redis: sudo apt-get install redis-server 在Windows系统中,可以从Redis官方网站下载安装包,并按照安装向导进行安装。 配置Redis在Redis的配置文件中,可以进行一些参数的设置,如端口号、密码等。可以通过编辑配置文件来自定义Redis的设置。配置文件通常位于/etc/redis/redis.conf目录下。 二、连接Redis 在PHP中,可以使用phpredis扩展或Predis库连接Redis。推荐使用phpredis扩展,速度更快,稳定性更好。 使用phpredis扩展连接Redis首先,需要安装phpredis扩展。可以通过PECL安装: pecl install redis 然后,在php.ini文件中添加以下行: extension=redis.so 安装完成后,可以使用以下代码连接Redis: $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $redis->auth('password');…
2025-05-10 阅读全文 →
FWQ
服务器教程
Win10配置redis服务实现过程详解
Win10配置redis服务实现过程详解 收藏 对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《Win10配置redis服务实现过程详解》,主要介绍了Redis、服务、Win10配置,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了! 一,Windows安装: 下载地址: (redis官网没有window版本所以需要在github上下载); 装Redis-x64-3.2.100.msi,双击刚下载好的msi格式的安装包(Redis-x64-3.2.100.msi)开始安装。 选择“同意协议”,点击下一步继续。 选择“添加Redis目录到环境变量PATH中”,这样方便系统自动识别Redis执行文件在哪里。 端口号可保持默认的6379,并选择防火墙例外,从而保证外部可以正常访问Redis服务。 设定最大值为100M。作为实验和学习,100M足够了。 点击安装后,正式的安装过程开始。稍等一会即可完成。 点击“开始”>右击“计算机”>选择“管理”。在左侧栏中依次找到并点击“计算机管理(本地)”>服务和应用程序>服务。再在右侧找到Redis名称的服务,查看启动情况。如未启动,则手动启动之。 正常情况下,服务应该正常启动并运行了。
2025-05-10 阅读全文 →
FWQ
服务器教程
利用Redis实现分布式消息发布订阅
利用Redis实现分布式消息发布订阅 偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《利用Redis实现分布式消息发布订阅》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步! 利用Redis实现分布式消息发布订阅 在分布式系统中,消息的发布和订阅是常用的通信模式。在这个模式下,消息发布者将消息发送给一个或多个主题,订阅者则订阅感兴趣的主题,并接收相应的消息。为了实现这个模式,我们可以借助Redis这个高性能的内存数据库。 Redis是一个开源的,基于内存的数据结构存储系统,支持多种数据结构类型(如字符串、列表、哈希等),并提供了丰富的命令接口。其中,Redis的发布订阅功能可以方便地实现分布式消息发布和订阅。 安装Redis 首先,我们需要在本地或远程服务器上安装Redis。可以从Redis官方网站下载和安装Redis,或者直接使用操作系统的包管理工具进行安装。 连接Redis 在代码中使用Redis之前,我们需要先建立与Redis服务器的连接。可以使用Redis的客户端库连接到Redis服务器,如Redis-Py(Python)、Redisson(Java)等。 以下是Python代码示例,使用Redis-Py来连接Redis: import redis # 建立与Redis服务器的连接 r = redis.Redis(host='localhost', port=6379) # 进一步操作Redis... 发布消息 在Redis中,我们可以使用PUBLISH命令将消息发布到指定的主题。主题是一个字符串,可以是任意的非空字符串。发布者将消息发送给指定主题,所有订阅了该主题的订阅者都会收到该消息。 以下是Python代码示例,发布消息到指定主题: # 发布消息到指定主题 r.publish('topic1', 'Hello, World!')…
2025-05-10 阅读全文 →
FWQ
服务器教程
搞定!Redis实现“附近的人”功能
搞定!Redis实现“附近的人”功能 收藏 各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《搞定!Redis实现“附近的人”功能》,很明显是关于数据库的文章哈哈哈,其中内容主要会涉及到MySQL、Redis、mongodb等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!  针对“附近的人”这一位置服务领域的应用场景,常见的可使用 PG、MySQL 和 MongoDB 等多种 DB 的空间索引进行实现。 图片来自 Pexels  而 Redis 另辟蹊径,结合其有序队列 ZSET 以及 GEOHASH 编码,实现了空间搜索功能,且拥有极高的运行效率。 本文将从源码角度对其算法原理进行解析,并推算查询时间复杂度。要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。 以下将分别进行介绍,其中会重点对查询功能进行解析。 操作命令 自 Redis 3.2 开始,Redis 基于 GEOHASH…
2025-05-10 阅读全文 →
FWQ
服务器教程
CentOS中怎么使用RPM包安装redis
CentOS中怎么使用RPM包安装redis 收藏 最近发现不少小伙伴都对数据库很感兴趣,所以今天继续给大家介绍数据库相关的知识,本文《CentOS中怎么使用RPM包安装redis》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~ Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。 前期准备 平台: centos 6.5 x86_64 安装:redis-3.0.7-4.el6.art.x86_64.rpm 下载rpm包 打开地址 http://pkgs.org/download/redis 进入根据自己的linux平台以及需要安装的redis版本进去下载对应的rpm包,这里我们以redis 3.0.7为例安装: [root@21yunwei src]#  wget   http://www6.atomicorp.com/channels/atomic/centos/6/x86_64/RPMS/redis-3.0.7-4.el6.art.x86_64.rpm 安装 [root@21yunwei src]# rpm  -ivh  redis-3.0.7-4.el6.art.x86_64.rpm 这里需要注意一下,如果是新拿的系统或者未安装jemalloc库的时候一般会报错: [root@21yunwei src]# rpm  -ivh  redis-3.0.7-4.el6.art.x86_64.rpmwarning: redis-3.0.7-4.el6.art.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 4520afa9: NOKEY error: Failed dependencies: libjemalloc.so.1()(64bit) is needed by redis-3.0.7-4.el6.art.x86_64 解决办法: yum install epel-release  -y yum install jemalloc -y…
2025-05-10 阅读全文 →
FWQ
服务器教程
几分钟教你掌握Redis简单动态字符串SDS
几分钟教你掌握Redis简单动态字符串SDS 收藏 从现在开始,我们要努力学习啦!今天我给大家带来《几分钟教你掌握Redis简单动态字符串SDS》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到字符串、sds、Redis动态等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习! 正文 Redis 没有直接使用 C 语言传统的字符串表示(而是以空字符结尾的字符数组,以下简称 C 字符串),自己构建了一种名为简单动态字符串(simple dynamic string,SDS) 的抽象类型,并将 SDS 用作 Redis 的默认字符串表示。 在 Redis 里面,C 字符串只会作为字符串字面量(string literal),用在一些无须对字符串值进行修改的地方,比如打印日志: redisLog(REDIS_WARNING,”Redis is now ready to exit,…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis五种基本数据类型详解:用途及操作
Redis五种基本数据类型详解:用途及操作 收藏 从现在开始,我们要努力学习啦!今天我给大家带来《Redis五种基本数据类型详解:用途及操作》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到数据类型、Redis等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习! Redis是一种开源的内存数据结构存储系统,它支持五种基本数据类型:字符串(string)、散列(hash)、列表(list)、集合(set)、有序集合(sorted set)。以下是对这五种数据类型的详细讲解: 1、字符串(string) 字符串是Redis最基本的数据类型之一,它可以存储任意类型的字符串数据,包括二进制数据。在Redis中,字符串是最常用的数据类型之一,它可以被用来存储各种信息,例如用户的身份认证信息、计数器值、配置信息等等。 Redis字符串数据类型提供了许多操作,例如获取、设置、删除、追加、自增等操作。以下是一些常见的操作: GET:获取字符串值 SET:设置字符串值 DEL:删除指定的键值对 INCR:将字符串转换成数字并自增 APPEND:将字符串追加到原始字符串的末尾 MGET:一次获取多个字符串值 MSET:一次设置多个字符串值 2、散列(hash) 散列是Redis中的一个键值对集合,它是一个string类型的field和value的映射表,其中field和value都是字符串类型。散列可以用于表示对象,例如一个用户对象,它的各个属性可以存储在一个散列中。 Redis散列数据类型提供了许多操作,例如获取、设置、删除、获取所有字段等操作。以下是一些常见的操作: HGET:获取指定字段的值 HSET:设置指定字段的值 HDEL:删除指定的字段 HGETALL:获取所有字段和值 HINCRBY:将指定字段的值加上一个整数 HMGET:一次获取多个字段的值 HMSET:一次设置多个字段的值 3、列表(list) 列表是Redis中的一个链表结构,它可以存储一个有序的字符串列表,列表的每个元素都可以是一个字符串类型的值。Redis的列表数据类型可以用于存储一些有序的数据,例如用户的历史记录、最近的消息列表等。 Redis列表数据类型提供了许多操作,例如获取、设置、删除、插入等操作。以下是一些常见的操作:…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis:高并发场景下的数据存储解决方案
Redis:高并发场景下的数据存储解决方案 从现在开始,努力学习吧!本文《Redis:高并发场景下的数据存储解决方案》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你! Redis:高并发场景下的数据存储解决方案 随着互联网的迅速发展,高并发场景下的数据存储已成为各大企业关注的焦点。在面对海量请求和快速响应的需求时,传统的关系型数据库面临性能瓶颈。而Redis作为一种高性能的非关系型数据库,逐渐成为高并发场景下的数据存储解决方案。 Redis是一个开源的内存键值存储数据库,具备快速、高并发、持久化、分布式和丰富的数据类型等特点。它采用单线程模型,并将数据存储在内存中,因而具备非常高的读写性能。 在高并发场景下,Redis的优势尤为明显。首先,Redis通过将热点数据存储在内存中,极大地提升了读取数据的速度。其次,Redis采用单线程模型,避免了多线程的线程切换和同步带来的性能开销。再者,Redis支持持久化,可以将内存中的数据定期写入磁盘,从而保证数据的安全性。最后,Redis提供了丰富的数据类型,如字符串、哈希、列表、集合和有序集合,方便开发人员根据具体场景灵活应用。 以下将通过一些具体的代码示例,展示Redis在高并发场景下的强大功能。 字符串操作 import redis r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set('name', 'Redis') # 设置字符串键值对 name = r.get('name') # 获取字符串值 print(name) # 输出:Redis 哈希操作…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis实现异步任务处理详解
Redis实现异步任务处理详解 本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Redis实现异步任务处理详解》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~ 随着Web应用不断发展,异步任务处理的需求越来越重要,因为我们需要确保用户在完成任务前可以继续使用应用程序。在这种情况下,除了异步任务处理外,无法实现多任务并行处理,因此常常需要使用一些工具来处理异步任务,其中Redis是非常有用的一种工具。 Redis是一种高性能的内存数据库,可以用来快速存储、读取和操作数据。它的主要用途是实现缓存和消息传递,但是,它也可以用来处理异步任务。Redis具有内置的队列和发布/订阅功能,这使得它成为一个非常有用的异步任务处理工具。 在这篇文章中,我们将介绍如何使用Redis来实现异步任务处理。 建立Redis连接 首先,我们需要使用一个Redis客户端来建立与Redis服务器的连接。可以使用任何支持Redis连接的客户端。Python的redis-py是一个非常好的选择。请确保全局安装redis-py: pip install redis 接下来,您可以使用以下命令建立Redis连接: import redis redis_conn = redis.Redis(host='localhost', port=6379, db=0) 这里我们创建了一个名为redis_conn的Redis连接实例,该实例将连接到本地Redis服务器(host=’localhost’),端口号为6379(port=6379),使用0号数据库(db=0)。 Redis队列 Redis Queue(RQ)是一个Python库,它使用Redis作为后端来实现一个分布式任务队列。 RQ是建立在Redis的lpush和rpop命令之上的,因此具有非常好的性能。 安装RQ和Redis: pip install rq redis…
2025-05-10 阅读全文 →