作者文章

fwq

FWQ
服务器教程
Redis实现分布式数据存储的结构资源池与性能测试
Redis实现分布式数据存储的结构资源池与性能测试 偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《Redis实现分布式数据存储的结构资源池与性能测试》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步! Redis实现分布式数据存储的结构资源池与性能测试 Redis是一个开源的高性能键值对存储数据库,具有快速、可靠的特点。它支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合等,能够满足不同应用场景的需求。在分布式系统中,数据的存储和访问往往是分散在不同的节点之间的,需要一种分布式数据存储方案,Redis提供了一种分布式结构资源池的实现方案,以支持分布式环境下的数据存储和访问。 一、Redis分布式结构资源池的实现原理 Redis的分布式结构资源池是通过 Redis Sentinel 或 Redis Cluster 实现的。Redis Sentinel 是一个高可用性的解决方案,它可以监控 Redis 主从节点的状态,并在主节点宕机时选举一个新的主节点来实现自动故障转移。Redis Cluster 是一个分布式解决方案,它可以将数据分散到多个节点上,每个节点负责一部分数据的存储和管理,可以实现数据的分布式存储和访问。 Redis的分布式结构资源池实现的核心是利用主从节点或者集群节点之间的数据同步来实现数据的分布式存储和访问。当客户端向主节点或集群节点发送写入请求时,节点会先将数据写入自己的数据库中,然后再将数据同步到对应的从节点或集群节点中。当客户端向主节点或集群节点发送读取请求时,节点会优先从自己的数据库中读取数据,如果自己没有则从对应的从节点或集群节点中读取数据。这种方式可以保证数据的实时同步和高可用性。 二、Redis分布式结构资源池的性能测试 为了验证Redis分布式结构资源池的性能和可靠性,我们进行了一系列的性能测试和故障模拟测试。 测试环境 测试环境为一组三台阿里云 CentOS 7.4 64位服务器,每台服务器配置为 4核、16G内存、云盘100G。 测试数据…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis笔记点赞排行榜的实现示例
Redis笔记点赞排行榜的实现示例 收藏 从现在开始,我们要努力学习啦!今天我给大家带来《Redis笔记点赞排行榜的实现示例》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到点赞、Redis笔记等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习! 一、发布探店笔记 探店笔记类似点评网站的评价,往往是图文结合。对应的表有两个 探店笔记表(主键、商户id、用户id、标题、文字、图片、探店文字描述、点赞数量、评论数量) 评价表(笔记的评价)  先上传图片请求一次保存图片接口,再点发布请求发布接口。这两个接口已经写好 二、实现查看笔记接口 BlogController @RestController @RequestMapping("/blog") public class BlogController { @Resource private IBlogService blogService; @GetMapping("/hot") public Result queryHotBlog(@RequestParam(value = "current", defaultValue =…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis在政务平台中的应用实践
Redis在政务平台中的应用实践 偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《Redis在政务平台中的应用实践》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步! 随着社会信息化趋势的加速和政府数字化转型的深入推进,政务平台的规模和功能正不断扩大。政务平台是政府信息化的核心支撑平台,需要承载大量数据、承担高并发的请求和响应,同时还具备快速扩容、高可用、可扩展等特点。为了满足这些要求,越来越多的政务平台开始引入Redis分布式缓存技术,以提升系统性能和容错性。 Redis是一款基于内存的高速键值存储数据库。它提供了丰富的数据结构、强大的持久化、高可用性和分布式锁等特性。在政务平台中,Redis的应用场景主要包括以下几个方面: Session共享 政务平台通常会提供用户登录和会话管理功能。由于用户的请求可能涉及多个服务之间的调用,每个服务都需要读取用户会话信息,而且这些服务可能部署在不同的服务器上,因此需要一种可靠的机制来实现session共享。Redis提供了分布式缓存和发布订阅机制,可以方便地实现跨服务器会话共享,有效地提高了系统的性能和可扩展性。 高速缓存 政务平台的数据量往往非常大,如果每次请求都需要访问数据库,会给数据库带来极大的负载压力。此时,使用Redis缓存热点数据,可以降低数据库的访问频率,提升系统性能和响应速度。例如,将常用的页面数据和业务逻辑结果缓存在Redis中,可以减少请求响应时间,提高用户的体验感受。 计数器和排行榜 政务平台中经常需要对数据进行计数、排序等操作,例如网站访问量、文章点击数、用户排行榜等。Redis提供了原子性的操作,可以解决并发问题,比如INCR命令可以用于自增计数器,ZADD命令可以将元素添加到有序集合中,并根据指定的分数进行排序。这些命令可以帮助政务平台实现实时的计数和排名功能。 消息队列 政务平台需要处理大量的后台任务,例如异步通知、定时任务、批量数据处理等。这些任务需要以异步方式执行,但直接使用数据库操作通常效率不高。此时,可以使用Redis作为消息队列,将任务消息发送到Redis队列中,再由后台进程从队列中获取任务进行处理,可以有效地提高系统性能和可扩展性。 分布式锁 在分布式环境中,保证数据的一致性和可靠性是非常重要的。政务平台中往往需要对某些关键资源进行加锁操作,避免多个进程同时操作,导致数据出错或者死锁。Redis提供了一种分布式锁机制,可以方便地实现锁的获取和释放,确保关键资源的并发访问安全。 在政务平台中,Redis作为分布式缓存和高速数据库,可以帮助平台提升系统性能,提高可扩展性和容错性,同时也方便开发人员进行应用开发。但同时需要注意的是,Redis也有一些潜在的风险和问题,例如内存溢出、数据安全、并发问题等。因此,在使用Redis时,一定要充分了解其特性和使用规范,避免出现意外。 总之,Redis作为一种优秀的分布式缓存和高速数据库技术,在政务平台中应用广泛,并且具备广泛的适用性。随着政务平台的不断升级和发展,Redis的应用价值也将变得更加突出。 日本演员工会提出AI立法建议 要求建立“声音肖像权” 使用Gin框架实现异步任务处理功能
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis:缓存穿透、缓存击穿、缓存雪崩?
Redis:缓存穿透、缓存击穿、缓存雪崩? 收藏 一分耕耘,一分收获!既然都打开这篇《Redis:缓存穿透、缓存击穿、缓存雪崩?》,就坚持看下去,学下去吧!本文主要会给大家讲到缓存击穿、缓存雪崩、缓存穿透等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新数据库相关的内容,希望对大家都有所帮助! 为什么要使用缓存 我们做的每一个项目基本上刚开始都是一个很小的项目,每天的QPS很少,那个时候系统访问都是直接请求到数据库;后来项目越来越大,使用的人越来越多,每天对于数据库的压力剧增,为了保证“有效、有限的请求”访问到数据库,我们放大前置环节的逻辑和成本,所以缓存应运而生。 缓存的好处有以下两点: 提高接口的响应时间和并发量; 减轻数据库的压力。 但是,我们用到了缓存,就不得不考虑三个经典的场景:“缓存穿透”、“缓存击穿”、“缓存雪崩”。本文将介绍三种场景并给出合理的解决方案,如有异议,请进行友好的评论。 缓存穿透 正常情况下,一个请求过来,首先判断key是否存在,如果key存在,直接返回;如果key不存在或者已过期,查询数据库,如果数据库中存在数据,则更新缓存并返回数据;如果不存在,则直接返回空。 缓存穿透(cache penetration)是用户访问的key在数据库中一定不存在的数据,如果有人利用这个漏洞恶意攻击系统,每次请求的压力都给到数据库,会压垮数据库,造成系统崩溃。 方案一:缓存默认值 在数据库查询不存在时,可以将其缓存为默认值。不过设置的时间不宜过长(建议设置为60s),如果过了一会儿数据库新增了该数据,时间太长的话,就会出现数据不一致的情况。 方案二:业务逻辑前置判断 如果有人为的恶意攻击,用不合理的参数去请求系统,按照方案一新增了大量的不存在的key到内存中,极端情况下,缓存也被撑爆了…… 所以我们可以在接口处进行数据合法性校验,进行提前拒绝。比如:a接口只允许查询18+的成年人的数据,请求带有未成年人就明显不合适。 方案三:使用布隆过滤器 如果有人很巧妙的用合理的参数但是系统内不存在的key请求系统,系统按照方案一、方案二也会新增大量的不存在key到内存中,这时又怎么办呢…… 那我们可以使用布隆过滤器(本文不做扩展哈,请自行了解),当把数据写入数据库的时候,使用布隆过滤器进行标记,当有请求时,如果发现缓存消失,在去查询数据库前,先查询布隆过滤器该key是否存在,如果不存在,直接返回,不过布隆过滤器有一定的误判率,这个可以忽略。 方案四:加互斥锁或队列 经过方案一、二、三的优化,应该可以处理穿透的问题吧,但是仔细想一想,兄弟儿,我们是高并发的场景啊,所以,场景是大量的请求同一时刻都来请求同一个key,发现没有这个key,全都去访问数据库,以至于系统崩溃…… 在这里,我们要加一个锁,只保证一个线程去创建缓存,其余的等待,这样就ok了。 缓存击穿 缓存击穿(Cache Breakdown)指的是一个热点key,在不停的被大量的请求访问,当这个热点key缓存失效的瞬间,大量的请求访问到数据库,以至于系统崩溃。 方案一:永不过期…
2025-05-10 阅读全文 →
FWQ
服务器教程
分析Redis数据持久化、数据备份、数据的故障恢复
分析Redis数据持久化、数据备份、数据的故障恢复 收藏 小伙伴们有没有觉得学习数据库很有意思?有意思就对了!今天就给大家带来《分析Redis数据持久化、数据备份、数据的故障恢复》,以下内容将会涉及到Redis、数据、故障,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!  前言 缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取持久化,数据备份,数据的故障恢复方面你究竟了解多少呢? 1.redis持久化的意义—-redis故障恢复 在实际的生产环境中,很可能会遇到redis突然挂掉的情况,比如redis的进程死掉了、电缆被施工队挖了(支付宝例子)等等,总之一定会遇到各种奇葩的现象导致redis死掉,这时候放在redis内存中的数据就会全部丢失,这些数据可能服务很多的系统或者服务,当然,我们可以重新启动redis,重启之后,如果redis没有持久化,redis中的数据就会全部丢失。 如果通过持久化将数据搞一份到磁盘,然后定期的同步和备份到云存储服务上去,那么就可以保证数据不会全部丢失,还是可以恢复一部分数据的。 2.持久化的两大机制(RDB和AOF) RDB:对redis数据执行周期性的持久化 AOF:将每条命令写入日志,以append-only的模式写入一个日志文件中,在redis重启的时候,可以通过回放AOF的写入指令来重新构建整个数据集 是否实用持久化要看具体的业务场景: 如果只是想让redis仅仅作为纯内存的缓存,那么可以禁止RDB和AOF。 故障恢复大致思路: 通过RDB或AOF,都可以将redis内存中的数据持久化到磁盘上来,然后可以将数据备份到阿里云,如果redis挂了,服务器中内存和磁盘的数据就都丢了,这时候可以将阿里云中的备份文件拷贝至指定目录下,然后重启redis,redis就会自动根据持久化数据文件去恢复内存中的数据,继续对外提供服务。如果同时室友了RDB和AOF两种持久化机制,那么在重启的时间建议使用AOF的方式重新构建数据,因为AOF中的数据更加完整。 3.剖析RDB和AOF RDB:早上7点,这个时候redis  中有500条数据,这个时候redis会在一定周期内生成一个RDB快照文件,等到了9点的时候redis中有8000条数据,这个时候又在一定的周期内生成了另一个RDB快照文件,这就是RDB持久化机制。 AOF:redis 中每写入一条指令,就会把这条指令更新到磁盘中的文件中。然而在现代操作系统中,写文件不是直接写磁盘,会先写进os  cache,然后在一定时间内再从os cache刷入disk file,对于AOF来说每隔一秒(可配置)调用一次操作系统饿fsync操作强制将os  cache中的数据刷入磁盘文件中。但是redis内存中的数据也不是***增长的,它是定期的根据LRU算法清理一些不常用的数据,这样才能保证AOF不会***增长,但是如果LRU的清理速度比不上AOF的膨胀速度的时候,这时候当AOF大到一定程度就会进行AOF  rewrite操作。AOF rewrite操作就会基于当时redis内存中的数据来重新构造一个更小的AOF文件,然后将旧的AOF文件删除。 简单的说,假设redis限定了只能存放10G数据,这时候不断的在redis中写入数据,当达到了10G的数据量的时候,这时候根据LRU清理了一些不常用的数据,清理了5G,这时候又写了5G,这时候AOF文件记录了15G的数据相关的写入指令,假如这个时候AOF已经膨胀了,这个时候redis进行AOF  rewrite操作,重新生成了一个新的10G的数据指令的AOF文件,这个时候将继续写入新的AOF文件,将老的AOF文件删除。…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis与Node.js的集成方案:如何实现高可扩展性
Redis与Node.js的集成方案:如何实现高可扩展性 学习数据库要努力,但是不要急!今天的这篇文章《Redis与Node.js的集成方案:如何实现高可扩展性》将会介绍到等等知识点,如果你想深入学习数据库,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助! Redis与Node.js的集成方案:如何实现高可扩展性 介绍Redis是一个开源的数据结构服务,通常用作缓存、消息中间件和数据库。它支持丰富的数据结构,包括字符串、哈希、列表、集合、有序集合和位图等。Node.js是一个轻量级的服务器端JavaScript运行环境,具有出色的性能和可扩展性。在本文中,我们将探讨如何将Redis与Node.js集成,以实现高可扩展性的方案。 安装Redis和Node.js在开始之前,我们需要先安装Redis和Node.js。你可以在Redis官方网站下载并安装Redis,而Node.js则可以在Node.js官方网站下载并安装。 Node.js内置的Redis模块Node.js内置了一个Redis模块,可以直接使用它来与Redis进行交互。首先,我们需要在项目中引入Redis模块: const redis = require('redis'); 然后,我们可以创建一个Redis客户端实例,并连接到Redis服务器: const client = redis.createClient(6379, 'localhost'); 在上面的代码中,我们指定了Redis服务器的主机和端口。如果你的Redis服务器位于本地主机,端口默认为6379。你也可以根据需要修改这些值。 Redis基本操作一旦与Redis服务器建立连接,我们就可以对Redis进行各种操作了。以下是一些常见的Redis操作示例: 设置键值对: client.set('name', 'John', (err, reply) => { console.log(reply); }); 获取键的值:…
2025-05-10 阅读全文 →
FWQ
服务器教程
一个包含10节点的Redis集群实践案例
一个包含10节点的Redis集群实践案例 收藏 IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《一个包含10节点的Redis集群实践案例》,聊聊Redis、实践、集群,我们一起来看看吧! Redis 通常不会被用作主要的数据存储,但它在存储和访问可容忍丢失的临时数据(如度量指标、会话状态、缓存)方面却独有长处,并且速度非常快,不仅提供了最佳性能,还内置了一组非常有用的数据结构。它是现代技术栈中最常见的主要部件之一。 Stripe(一家做支付的硅谷创业公司)的速率限定器就是基于 Redis 构建的,这些限速器运行在一个 Redis 实例上。Redis 主服务器有一些用于失效备援的追随者,不过在任何时候,都只有一个节点在处理读写操作。 各种消息来源声称,一个 Redis 节点每秒可以处理百万次操作。尽管我们的操作没有那么多,但也不会很少。每个速率限定器都需要运行多个 Redis 命令,而每个 API 请求都要通过很多个速率限定器。所以,每个节点每秒钟需要处理数万次到数十万次的操作。 如果节点出现饱和,就会不断出现故障。我们的服务可以容忍 Redis 的不可用,因此大多数情况下是没有问题的,但在某些情况下,问题的严重程度会升级。我们最后通过迁移到包含 10 节点的 Redis 集群来解决这个问题。对性能的影响可以忽略不计,重要的是现在我们可以实现水平可伸缩。 改造前后的错误率比较: 使用 Redis…
2025-05-10 阅读全文 →
FWQ
服务器教程
详解redis脚本命令执行问题(redis.call)
详解redis脚本命令执行问题(redis.call) 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《详解redis脚本命令执行问题(redis.call)》,介绍一下命令、redis脚本,希望对大家的知识积累有所帮助,助力实战开发! 1、redis-cli命令行中执行: # 调用redis命令设置缓存 # 不传参数 eval "return redis.call('set', 'name1', 'Tom')" 0 # 传入1个值参数 eval "return redis.call('set', 'name2', ARGV[1])" 0 "Tom" # 传入1个键名参数和1个值参数 eval "return redis.call('set',…
2025-05-10 阅读全文 →
FWQ
服务器教程
关于SpringBoot 使用 Redis 分布式锁解决并发问题
关于SpringBoot 使用 Redis 分布式锁解决并发问题 收藏 知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《关于SpringBoot 使用 Redis 分布式锁解决并发问题》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟! 问题背景 现在的应用程序架构中,很多服务都是多副本运行,从而保证服务的稳定性。一个服务实例挂了,其他服务依旧可以接收请求。但是服务的多副本运行随之也会引来一些分布式问题,比如某个接口的处理逻辑是这样的:接收到请求后,先查询 DB 看是否有相关的数据,如果没有则插入数据,如果有则更新数据。在这种场景下如果相同的 N 个请求并发发到后端服务实例,就会出现重复插入数据的情况: 解决方案 针对上面问题,一般的解决方案是使用分布式锁来解决。同一个进程内的话用本进程内的锁即可解决,但是服务多实例部署的话是分布式的,各自进程独立,这种情况下可以设置一个全局获取锁的地方,各个进程都可以通过某种方式获取这个全局锁,获得到锁后就可以执行相关业务逻辑代码,没有拿到锁则跳过不执行,这个全局锁就是我们所说的分布式锁。分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。 我们这里介绍如何基于 Redis 的分布式锁来解决分布式并发问题:Redis 充当获取全局锁的地方,每个实例在接收到请求的时候首先从 Redis 获取锁,获取到锁后执行业务逻辑代码,没争抢到锁则放弃执行。 主要实现原理: Redis…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis如何分析慢查询操作?
Redis如何分析慢查询操作? 收藏 知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《Redis如何分析慢查询操作?》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟! 什么是慢查询 和mysql的慢SQL日志分析一样,redis也有类似的功能,来帮助定位一些慢查询操作。 Redis slowlog是Redis用来记录查询执行时间的日志系统。 查询执行时间指的是不包括像客户端响应(talking)、发送回复等IO操作,而单单是执行一个查询命令所耗费的时间。 另外,slow log保存在内存里面,读写速度非常快,因此你可以放心地使用它,不必担心因为开启slow log而损害Redis的速度。 慢查询参数 首先来关注下慢日志分析对应的两个参数: 1、slowlog-log-slower-than:预设阀值,即记录超过多少时间的记录,默认为10000微秒,即10毫秒。 2、slowlog-max-len:记录慢查询的条数,默认为128条,当超过设置的条数时最早进入队列的将被移除。线上建议增大数值,如:1000,这样可减少队列移除的频率。  127.0.0.1:6379> config get slowlog-log-slower-than   1) "slowlog-log-slower-than"   2) "10000"   127.0.0.1:6379> config get slowlog-max-len   1) "slowlog-max-len"   2) "128"   可以用config set对这两个参数进行调整,或者在配置文件中设置。  ################################## SLOW LOG ###################################   # The Redis Slow Log is a system to log queries that exceeded a specified   # execution time. The execution time does not include the I/O operations   # like talking with the client, sending the reply and so forth,   # but just the time needed to actually execute the command (this is the only  …
2025-05-10 阅读全文 →