作者文章

fwq

FWQ
服务器教程
关于使用Redisson订阅数问题
关于使用Redisson订阅数问题 收藏 本篇文章给大家分享《关于使用Redisson订阅数问题》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。 一、前提 最近在使用分布式锁redisson时遇到一个线上问题:发现是subscriptionsPerConnection or subscriptionConnectionPoolSize 的大小不够,需要提高配置才能解决。 二、源码分析 下面对其源码进行分析,才能找到到底是什么逻辑导致问题所在: 1、RedissonLock#lock() 方法 private void lock(long leaseTime, TimeUnit unit, boolean interruptibly) throws InterruptedException {        …
2025-05-10 阅读全文 →
FWQ
服务器教程
redis 存储对象的方法对比分析
redis 存储对象的方法对比分析 收藏 亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《redis 存储对象的方法对比分析》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下对象、Redis存储,希望所有认真读完的童鞋们,都有实质性的提高。 redis 存储对象的方法对比 问题背景: 原来项目里面全部是直接redis存储对象的json数据,需要频繁的序列化和反序列化,后来考虑更换项目中的redis存储对象为hash对象存储的,但是获取后不能方便的set get操作,很是蛋疼,怎么才能解决这个问题呢? 1.1 直接存储对象的json 存放redis的时候,直接先用fastJson 或者 jackJson或者Gson把对象序列化为json数据,然后用直接存放,key表示用户id或许和openid,value则是对象的json数据 public String get(String key) { Object value = redisTemplate.boundValueOps(key).get(); return (String) value; }…
2025-05-10 阅读全文 →
FWQ
服务器教程
手动实现Redis的LRU缓存机制示例详解
手动实现Redis的LRU缓存机制示例详解 收藏 亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《手动实现Redis的LRU缓存机制示例详解》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下缓存、RedisLRU,希望所有认真读完的童鞋们,都有实质性的提高。 第一种实现(使用LinkedHashMap) public class LRUCache { int capacity; Map map; public LRUCache(int capacity){ this.capacity = capacity; map = new LinkedHashMap(); } public int get(int key){ //如果没有找到…
2025-05-10 阅读全文 →
FWQ
服务器教程
Zabbix企业应用 :固定端口监控Redis
Zabbix企业应用 :固定端口监控Redis 收藏 本篇文章向大家介绍《Zabbix企业应用 :固定端口监控Redis》,主要包括Zabbix、端口监控,具有一定的参考价值,需要的朋友可以参考一下。 本文介绍使用固定端口模式监控redis,先展示效果图,看看是否能满足你的需求,然后再看看具体的监控配置方案。 1、Redis key_6379 2、Redis Last_save_time_6379 3、Redis Port status_6379 4、Redis Uptime_in_seconds_6379 5、Redis Used memory_6379 6、Redis Port Connections_6379 下面是配置方案 一、在客户端 1、到/usr/loca/zabbix/conf/zabbix_agentd.conf里添加: UserParameter=redis_stats[*],redis-cli -h 127.0.0.1 -p $1 info|grep $2|cut -d : -f2  如果你的redis绑定了ip,请自行修改。 2、重启zabbix agent服务…
2025-05-10 阅读全文 →
FWQ
服务器教程
redis分布式锁的问题与解决方法
redis分布式锁的问题与解决方法 收藏 来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习数据库相关编程知识。下面本篇文章就来带大家聊聊《redis分布式锁的问题与解决方法》,介绍一下锁、Redis分布式,希望对大家的知识积累有所帮助,助力实战开发! 分布式锁 在分布式环境中,为了保证业务数据的正常访问,防止出现重复请求的问题,会使用分布式锁来阻拦后续请求。我们先写一段有问题的业务代码: public void doSomething(String userId){ User user=getUser(userId); if(user==null){ user.setUserName("xxxxx"); user.setUserId(userId); insert(user); return; } update(user); } 上面的代码很简单,查询db中有没有对应的user数据,如果有的话,执行更新操作,如果没有则插入。 我们知道,上面的代码是线程不安全的,在多线程的环境中,就会出现问题。为了能够保证数据的正确性,在单机环境下,我们可以使用synchronized的方法,来保证线程安全,具体修改: public synchronized void doSomething(String userId){ User user=getUser(userId);…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis在图片搜索和识别中的应用实例
Redis在图片搜索和识别中的应用实例 一分耕耘,一分收获!既然打开了这篇文章《Redis在图片搜索和识别中的应用实例》,就坚持看下去吧!文中内容包含等等知识点…希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢! Redis是一款高性能、开源的键值存储系统,具有快速、可靠、高效的特点,尤其在应用场景较多的缓存、队列、计数、消息发布/订阅等方面得到广泛应用。除此之外,Redis在图像搜索和识别中也有着广泛的应用,本文主要介绍这方面的应用实例。 一、Redis在图像搜索中的应用 Redis与图像检索引擎的结合 图像检索引擎通过对比检索图像与参考图像的相似度来实现图像的检索。图像检索引擎具有检索速度快、存储空间小等优点,但由于需要对比每张图像与参考图像的相似度,对于大规模图像的处理存在着瓶颈。而Redis作为高速缓存系统可以较好地解决这一问题。 具体实现方法为:将图像数据以二进制形式存储在Redis中,并用图片的MD5值作为key值,通过代码对图像数据进行hash计算得到value值。因此获取任意图像的二进制数据时,只需通过Redis根据其MD5值快速获取即可。由此可见,Redis的高速缓存性能为图像检索引擎在处理海量图像时带来了很大的加速和优化效果。 Redis与容错型卷积神经网络的结合 图像搜索引擎通常采用的是同步和异步两种方法。异步方法的思想就是将从容错性考虑到整个过程,即出现错误的时候可以自动恢复,从而保证搜索引擎的可靠性。而Redis作为高可靠的缓存系统,能够极大地增强容错性卷积神经网络(Resilient Convolutional Neural Networks,简称RCNN)的效果。 具体实现方法为:将图像数据存储在Redis中,不同的RCNN进行并行处理。在处理过程中,一旦某个RCNN处理出现错误,其可以尝试从Redis中获取数据进行恢复,从而避免了出错的RCNN影响整个图像搜索引擎的搜索质量。这一方法有效减少了图像搜索引擎中的错误率,提高了系统的鲁棒性。 二、Redis在图像识别中的应用 Redis与卷积神经网络的结合 在图像识别中,卷积神经网络是一种应用广泛的方法。由于其计算量大、复杂度高,因此需要使用高性能的计算机和算法优化手段。而Redis则为卷积神经网络提供了一种高性能的缓存机制,同时也可以通过Redis的消息发布和订阅功能来优化卷积神经网络的通信速度,进一步提高识别的准确度。 具体实现方法为:将数据分发到不同的卷积神经网络节点中进行处理,同时将每个节点计算出的结果存储在Redis中,并调用Redis的消息发布/订阅功能实时更新中间结果。这一方法有利于提高图像识别的速度和准确度。 Redis与图像分类方法的结合 在基于图像分类方法实现的图像识别中,Redis作为高速缓存系统可以有效地提高模型训练和图像处理的速度,从而提高识别的准确度。同时,Redis还可以通过在图像分类方法之上建立消息队列,优化算法的执行流程,避免了不必要的等待时间和资源浪费。 具体实现方法为:将数据存储在Redis中,对于每个分类实例,建立一个Redis列表,并根据其存储顺序进行分类。同时,通过建立消息队列来处理新加入的数据,避免了数据分类时出现资源冲突的情况,从而使得图像分类器的训练效果更加优秀,并对图像识别的识别准确率有着明显的提升。 总的来说,Redis在图像搜索和识别中的应用极大地增强了系统的可靠性、鲁棒性,同时还可以通过提高系统运行效率来加速图像处理与计算。随着科技的不断进步和创新,相信Redis在图像搜索和识别中的应用会越来越广泛。 Redis在搜索引擎中的应用实战 Redis在智能零售中的应用实战
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis集群模式有哪些及有什么优点
Redis集群模式有哪些及有什么优点 收藏 小伙伴们有没有觉得学习数据库很有意思?有意思就对了!今天就给大家带来《Redis集群模式有哪些及有什么优点》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你! 单机模式 单机模式的redis非常简单,你只需要启动一个单一的节点就可以了,安装过程不超过5分钟。 通过redis-benchmark测试简单的命令,QPS可达到10w以上,不得不说非常的让人惊艳了。 单机模式的问题也非常明显。缺乏高可用的机制! 假如redis进程死了,进程就只能够穿透到底层的数据库中,对业务来说非常的危险。如果你把redis当作数据存储来用,情况会更加严重,甚至会丢失数据。 主从模式 所以最基本的redis部署,都会增加一个或者多个slave(现在叫replication)。 当主redis发生问题的时候,能够选取一个slave顶上去。 非常可惜的是,这种模式和传统的MySQL主从一样,切换起来比较蛋疼,需要借助外部的工具,比如keepalived等辅助进行切换,部署和维护难度直接飙升。 keepalived是一个基于VRRP协议来实现的高可用方案,通过 IP 漂移实现高可用。从描述上就可以看出它需要网络管理员的参与,和我们轻量级的redis背道而驰。 哨兵模式 哨兵模式就是使用额外的进程来替换keepalived的功能,对redis进程的存活性进行判断。在哨兵模式下,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来。 但哨兵模式一个最大的问题,就是哨兵的数量太多,至少需要3个节点。 对redis进行仲裁的时候,需要n/2+1个节点投票才能确认,这也是分布式系统的一般做法 (quorum)。和Zookeeper类似,哨兵节点做成奇数个,是非常合适的。 哨兵模式可以通过sentinel monitor配置同时检测多套集群,在集群数量适中的时候,还是比较好用的。 但哨兵模式有很多隐藏的坑,比如哨兵的启动,必须在master存活的情况下才能正常运行;另外,如果你的redis配置文件中使用RENAME屏蔽了一些危险命令时,哨兵也不能够启动。 客户端在连接redis的时候,就不能再直接连接redis的实例,它需要从哨兵转上一圈,以便获取一些变更信息。 集群模式 集群模式可以说是这里面最优雅的方式了。你只需要部署多个对等的redis节点,然后使用客户端命令进行组群就可以了。 ip=192.169.0.23 ./bin/redis-cli --cluster create  $ip:7001 $ip:7002 $ip:7003 $ip:7004 $ip:7005 $ip:7006 --cluster-replicas 1…
2025-05-10 阅读全文 →
FWQ
服务器教程
深度解析双十一背后的阿里云Redis服务
深度解析双十一背后的阿里云Redis服务 收藏 在数据库实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《深度解析双十一背后的阿里云Redis服务》,聊聊Redis、数据库、阿里云,希望可以帮助到正在努力赚钱的你。 Redis是一个使用范围很广的NOSQL数据库,阿里云Redis同时在公有云和阿里集团内部进行服务,本文介绍了阿里云Redis双11的一些业务场景:微淘社区之亿级关系链存储、天猫直播之评论商品游标分页和菜鸟单据履行中心之订单排序。 在一片欢呼之中,2018年的双十一***收官,各项数据不出意外的刷出了新的记录,亮眼的数据背后是阿里过硬的技术支撑。其中阿里云Redis不仅保障了阿里集团内部业务双十一的流量洪峰平稳度过,也让使用阿里云Redis的各个客户度过了一个安稳省心的双十一。 目前阿里云Redis涵盖了丰富的产品形态:主从、集群、读写分离、同城容灾、异地多活,可以选择单副本,双副本,还有混合存储类型。 主从规格的Redis具有100%的兼容性; 读写分离增加只读节点承担读流量,成本***; 集群规格大容量、高性能,突破单机性能极限,兼容redis cluster, sentinel等多种架构,上云无忧; 同城容灾双机房部署,整机房故障切换到正常机房; 异地多活让业务全球部署,就近写入,自动全球实时同步。 此外,阿里云Redis还拥有热备份、账号、安全等功能,满足业务的各项安全上的需求。本文将简单介绍下2018年双十一的部分业务场景。 直播 直播在双十一期间也迎来流量高峰,观看直播的用户每发一条评论背后就会使用阿里云的Redis的服务。直播平台会对每条评论写入两条数据:索引和用户评论,索引使用Redis的SortedSet数据结构对评论进行排序,而评论内容本身使用Hash存储。获取评论的时候,先读索引,再访问对应Hash拿到评论列表。评论的写入过程如下: 现在的直播必不可少的就是弹幕,和评论一样,异常直播弹幕的写入QPS可能非常高,并且用户遍布全国各地甚至是分布在全球的华人,一条在美国发出的弹幕跨洋写进部署在国内,时延是不可接受的,物理距离的限制就算是低延迟的Redis也无能为力,各个地域单独部署一套存储又会造成不同地域的用户弹幕无法相互看到。阿里云Redis多活产品是为这种场景而生,每个地域部署一套Redis,用户就近写入,后端自动实时同步,跨洋的小伙伴感觉不再遥远。 菜鸟订单履行 双11用户在产生一个交易订单之后会随之产生一个物流订单。经过菜鸟仓配系统处理的订单,为了让仓配各个阶段能够更加智能的协同作业,决策系统会根据订单信息指定出对应的订单履行计划,包括什么时候下发仓、什么时候出库、什么时候配送揽收、什么 时候送达等信息,单据履行中心根据履行计划,对每个阶段按照对应的时间去履行物流服务。由于仓、配的运力有限,对于有限的运力下,期望最早作业的单据是业务认为优先级***的单据,所以订单在真正下发给仓或者配之前,需要按照优先级进行排序。 订单履行中心通过使用Redis来对所有的物流订单进行排序决定哪个订单是***优先级的。 微淘社区用户关系链 微淘社区承载了亿级淘宝用户的社交关系链,对于每个用户都有自己的关注列表,每个商家有自己的粉丝信息,整个微淘社区承载的关系链如下图所示。 Redis丰富的数据类型让这种关系链的存储变得简单,高性能保证了双十一期间业务仍如丝般顺滑。比如微淘社区使用了Hash存储用户之间的关注信息,包括:1)用户A是否关注过用户B;2)用户A/B的关系列表。 双十一大屏 双十一期间不光有出镜率***的媒体中心数据大屏,还有很多技术和业务模块的监控数据大屏。这类大屏不仅要求数据实时性高,对可靠性要求也非常高,一旦出现异常,通过大屏可以快速展示出来。 数据缓存 大屏汇聚了所有业务或者技术模块的监控信息,具有来源广、数据量大、实时性高的特点,Redis的高性能低延迟满足需求。大量数据通过pipeline批量更新,存入数据库时使用update…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis慢查询日志及慢查询分析详解
Redis慢查询日志及慢查询分析详解 收藏 今天golang学习网给大家带来了《Redis慢查询日志及慢查询分析详解》,其中涉及到的知识点包括Redis慢查询、日志分析等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~ 前提介绍 本篇文章主要介绍了Redis的执行的慢查询的功能的查询和配置功能,从而可以方便我们在实际工作中,进行分析Redis的性能运行状况以及对应的优化Redis性能的佐证和指标因素。 在我们5.0左右的版本中Redis使用单线程架构和I/O多路复用模型来实现高性能的内存数据服务。接下来主要分析Redis单线程命令处理机制,接着分析Redis单线程模型为什么性能如此之高。 单线程命令的处理机制 Redis客户端与服务端的模型主要是下图所示。 每次客户端调用都经历了发送命令、执行命令、返回结果三个过程。 本章内容 本章的文章内容主要是一下几点。 什么是慢查询 慢查询就是当Redis在处理一条指令的时候,当超过了系统配置的执行时间的阈值的时候,就会被系统当作慢查询统计和判定。 慢查询日志 慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值,就将这条命令的相关信息(例如:发生时间、耗时、命令的详细信息)记录下来。 Redis慢查询日志 Redis慢查询日志功能是用于记录执行时间超过给定时长的命令请求,可以通过查看慢查询日志来监控和优化查询速度。 Redis慢查询的危害 说到了Redis慢查询的危害,就会先说一下Redis的运行机制。 Redis客户端执行一条命令的步骤 Redis是单线程来处理命令,所以一条命令从客户端到达服务端不会立即被执行,所有的命令都会进入一个队列,然后逐个被执行。 因此Redis服务端去执行操作的是可以主要以下几个步骤: 所有的指令都有先后顺序,但是真正意义到达服务端的执行顺序也是不确定的,因为中间有网络传输。但是可以肯定的是,不会有两条命令被同时执行,这样就不会产生并发问题,这就是Redis单线程的基本模型。 慢查询引发的问题 单线程机制:所有命令放在一个队列中 Redis执行指令主要是在内存中执行、非IO阻塞、避免线程切换和竞态产生的消耗。 因为单线程的问题,一个命令不能执行太长时间,不然会阻塞其他命令的执行。所以慢查询会造成整体的Redis服务的性能的下降以及CPU的耗时和负载变高。 注意:慢查询只会记录执行命令的时间,没有慢查询并不代表客户端没有超时问题。…
2025-05-10 阅读全文 →
FWQ
服务器教程
Redis实现分布式管理锁的方法与应用实例
Redis实现分布式管理锁的方法与应用实例 大家好,今天本人给大家带来文章《Redis实现分布式管理锁的方法与应用实例》,文中内容主要涉及到,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢! Redis实现分布式管理锁的方法与应用实例 随着网络应用的快速发展,分布式系统成为了现代应用的重要组成部分。然而,在分布式系统中,由于涉及到多个节点的操作,在进程之间共享资源的时候容易出现竞争与死锁的问题。为了解决这些问题,分布式管理锁应运而生。 分布式锁是指在分布式系统中控制对共享资源访问的一种机制,它能够确保多个进程在同一时间内只能有一个进程对共享资源进行操作。Redis是一种快速、可扩展的键值对存储系统,可以用来实现分布式系统中的分布式管理锁。本文将介绍Redis实现分布式管理锁的方法与应用实例。 一、Redis实现分布式锁的基本原理 Redis实现分布式锁主要依赖于其提供的两个原子操作:SETNX和GETSET命令。其中,SETNX命令可以实现一个键的原子性设置,即只有在该键不存在时才能设置成功;而GETSET命令则是在设置新值的同时获取旧值,由于是原子性操作,可以避免并发访问的问题。 基于这两个原子操作,可以通过以下基本步骤来实现分布式锁。 尝试获取锁。客户端使用SETNX命令尝试将一个唯一的标识符(如客户端ID或UUID)作为键名,任意值作为键值添加到Redis数据库中。若操作成功,说明客户端已经成功获取到锁。 如果获取锁失败,则循环重试。因为多个客户端同时尝试获取锁时可能会发生竞争关系,所以客户端需要不断尝试获取锁,并在获取锁前设置适当的等待时间。 客户端完成任务后释放锁。当客户端完成操作后,需要使用GETSET命令将键值设置为一个特定的哨兵值(如null),以确保只有持有锁的客户端能够释放该锁。然后,客户端删除该键,释放锁。 二、Redis分布式锁的应用实例 下面以分布式任务队列为例,介绍如何使用Redis实现分布式锁。 假设有多个客户端同时向任务队列中添加任务,并希望每个任务只被执行一次。为了实现这个目的,可以使用Redis分布式锁来控制任务的执行。具体实现步骤如下: 客户端A尝试获取锁。客户端A使用SETNX命令将某个任务的唯一标识符作为键名(如任务ID),任意值作为键值添加到Redis数据库中。若操作成功,说明客户端A已经成功获取到锁;否则,客户端A会等待一定时间后再次尝试获取锁。 客户端A从任务队列中获取任务。客户端A获取到锁后,可以从任务队列中获取任意一个未处理的任务,并将该任务标记为“正在执行”。 客户端B尝试获取锁。此时,客户端B也尝试获取锁。由于客户端A已经获取到了锁,客户端B需要等待一定时间后再次尝试获取锁才能进行任务处理。 客户端A完成任务并释放锁。当客户端A将任务执行完毕后,使用GETSET命令将任务的状态设置为“已完成”,并将锁键值设置为null。此时,客户端A成功释放了锁。 客户端B获取锁并继续任务。当客户端B获取到锁后,可以从任务队列中获取下一个未执行的任务并标记为“正在执行”,然后重复上述步骤。 通过上述步骤,可以实现分布式任务队列的任务顺序执行,并确保每个任务只被执行一次。 三、总结 本文简要介绍了Redis实现分布式锁的基本原理和应用实例。值得注意的是,分布式锁的实现虽然可以有效避免并发冲突,但也会增加系统的开销,特别是在高并发场景下。因此,在使用Redis分布式锁时需要谨慎考虑系统资源和性能问题,以确保系统的稳定性和可靠性。 Golang中for循环遍历避坑指南 Golang设计模式之外观模式的实现
2025-05-10 阅读全文 →